五合一计算机逻辑
Gomoku (5-In-a-row) Computer Logic
好吧,让我在前言中说,我的教授向我们抛出了一个项目,我认为我们还没有准备好接受。尽管如此,我必须构建一个"智能"的5连游戏。所以我开始让程序用询问用户板的尺寸
https://gist.github.com/2307257
现在,由于这个游戏中的棋盘很大,我想有一个算法来对棋盘上的空间进行排序,这样计算机就可以控制棋盘的中间。例如,在5x5板上,值为:
11 11 11
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
11 11 11
在这种情况下,计算机将选择板的中间(值3)。作为一个彻头彻尾的傻瓜,我做这件事有些困难。我一直在想,我可以用一些循环来做到这一点,因为我相信板上任何位置的值都应该是:array[(最小宽度+i)到(最大宽度-i)][(最小高度+i)从(最大高度-i)]=1+i正确的我一直在尝试使用这样的东西:
https://gist.github.com/2307327
但它当然不起作用,否则我就不会在这里了。所以请帮我弄清楚。感谢
该代码将导致缓冲区溢出,因为长度/大小为5的数组将具有从0到4的索引。
当y等于高度时,第27行将导致崩溃,因为您将导致在数组边界之外进行写入。当x等于宽度,y小于高度时,将写入数组[0][y+1]单元格。
你的循环应该是。。。对于(y=0;y<height;y++)对于(x=0;x<width;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循环,使其在宽度的"一半"(最终是高度)上迭代。否则,你将覆盖已经计算过的单元格。简而言之,这是一个优化。你应该做的最后一件事,以及在你先把事情做好之后。
通常,做一些简单易懂的事情就速度而言"足够好",而优化可能不是必要的。在这种情况下,你需要一台20世纪70年代的超慢机器,让大脑死亡的简单算法看起来很慢。
有些挑剔
-验证您的输入。如果某些yahoo类型为负数,则在尝试创建数组时会崩溃。在这种情况下,接受小于5的值是没有用的,因为您需要连接5。一块4x4的木板将导致不可能的结果。
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 我可以使用任何好的逻辑来阻止计算机将 O 放在井字游戏中的现有 X 上
- C++ 计算机猜测用户数量在 7 次猜测以内
- C++为什么我的编译器成功了,但我的计算机给出了调试错误?
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何在个人计算机和群集 (c++) 上生成相同的随机数
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 预处理的 C/C++ 文件是否特定于计算机?
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 我会导致太多内存泄漏,以至于我的计算机无响应吗?
- 在多 GPU 计算机中查找空闲 GPU
- 我该如何编码,使计算机知道两个名称条目和三个名称条目之间的区别
- 从C++中的主机名获取计算机名
- 我的C++程序如何访问计算机的日期和时间以打印和使用当前年份?
- 如何使Visual Studio 2017 C++项目在计算机之间更具可移植性
- 五合一计算机逻辑