- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,让我先说一下,我的教授向我们抛出了一个项目,我认为我们还没有做好接受的准备。尽管如此,我必须构建一个“智能”的 5 连胜游戏。所以我开始让程序使用这个询问用户电路板的尺寸:
https://gist.github.com/2307257
现在由于这个游戏中的棋盘很大,我想要一个算法来对棋盘上的空间进行排序,以便计算机尝试控制棋盘的中间。例如,在 5x5 的板上,值将是:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
在这种情况下,计算机会选择棋盘的中间(值三)。我是一个完全的菜鸟,我在做这件事时遇到了一些困难。我一直在想我可以用一些循环来做到这一点,因为我相信板上任何位置的值都应该是:数组 [(最小宽度 + i)到(最大宽度 - i)] [(最小高度 + i)到(最大高度 - i)] = 1 + i正确的?好吧,我一直在尝试使用这样的东西:
https://gist.github.com/2307327
不过当然不行,不然我也不会来了。所以请帮我解决这个问题。谢谢
最佳答案
该代码将导致缓冲区溢出,因为长度/大小为 5 的数组将具有从 0 到 4 的索引。
当 y 等于高度时,第 27 行将导致崩溃,因为您将导致写入超出数组边界。当 x 等于宽度且 y 小于高度时,您将写入数组[0][y+1] 单元格。
你的循环应该是...对于(y = 0;y < 高度;y++)对于 (x = 0; x < 宽度; x++)...因为高度和宽度(假设它们)等于 5。y 和 x 将从 0 迭代到 4。这将是有效的数组索引。
如果你想像上面显示的那样填充数组,你将忽略你的 y 方向。您可以简化。
#define MIN(A, B) (((A) < (B)) ? A : B)
// x or y is cell 0 to 4 then the cell value should x or y + 1
// x or y is close to the other edge then the cell value should be width - x, or height - y
// I'm assuming that if the playing field is larger than 9x9 then a cell value of 5 is
// good enough.
array[x][y] =
MIN(
5,
MIN(
MIN(x + 1, width - x),
MIN(y + 1, height - y)));
我看到您通过意识到结果与第 27 行对称而试图变得聪明。但是,如果您这样做,那么您应该更改 for 循环以迭代宽度的“一半”(最终是高度)。否则您将覆盖已经计算过的单元格。简而言之,这是一种优化。您应该最后做的事情,以及首先要做的事情。
通常,就速度而言,做一些简单易懂的事情就“足够好了”,可能不需要进行优化。在这种情况下,您需要一台 1970 年代的超慢机器,才能让脑死亡的简单算法看起来很慢。
有些吹毛求疵...
- 验证您的输入。如果某些 yahoo 类型为负数,您将在尝试创建数组时崩溃。在这种情况下,接受小于 5 的值是没有用的,因为您需要连接 5。4x4 的板将导致不可能。
关于c++ - 五子棋(5 合一行)计算机逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10021651/
我正在创建一个 C 程序来播放 Gomoku .它使用 Minimax搜索以决定最佳移动。但是,它只能搜索最佳着法 10 秒。如何确定我的搜索功能何时搜索了 10 秒。如果您能向我提供示例或文档链接,
前言:很多刚刚接触编程的人都不知道怎么下手编写程序,特别是学习了新的知识点,不知道有什么用,那么本文将以简单的存储结构及简单的运算,条件语句,分支语句,循环语句结合,带来一个双人对战版五子棋,这是一
好吧,让我先说一下,我的教授向我们抛出了一个项目,我认为我们还没有做好接受的准备。尽管如此,我必须构建一个“智能”的 5 连胜游戏。所以我开始让程序使用这个询问用户电路板的尺寸: https://gi
我是一名优秀的程序员,十分优秀!