首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gomoku (一行5中)计算机逻辑

Gomoku (一行5中)计算机逻辑
EN

Stack Overflow用户
提问于 2012-04-05 09:50:18
回答 1查看 2K关注 0票数 0

好的,让我先说一下,我的教授向我们抛出了一个项目,我认为我们还没有准备好接受这个项目。然而,我必须建立一个5连排的游戏,这是“聪明”的。因此,我首先让程序使用以下命令向用户询问电路板的尺寸:

https://gist.github.com/2307257

现在由于这个游戏中的棋盘很大,我想有一个算法来对棋盘上的空间进行排序,这样计算机就可以尝试控制棋盘的中间位置。例如,在5x5电路板上,这些值为:

1 1 1

1 2 2 2 1

1 2 3 2 1

1 2 2 2 1

1 1 1

在这种情况下,计算机将选择棋盘的中间(值3)。作为一个彻头彻尾的菜鸟,我在做这件事上有些困难。我一直在想,我可以用一些循环来做这件事,因为我相信板上任何点的值都应该是: array (min width + i) do (max width - i) =1+i,对吗?嗯,我一直在尝试使用这样的东西:

https://gist.github.com/2307327

但它当然不能工作,否则我就不会在这里了。所以请帮我解决这个问题。谢谢

EN

回答 1

Stack Overflow用户

发布于 2012-04-21 01:31:45

该代码将导致缓冲区溢出,因为长度/大小为5的数组将具有从0到4的索引。

当y等于高度时,第27行将导致崩溃,因为您将导致数组边界之外的写入。当x等于width而y小于height时,您将写入数组单元。

你的循环应该是...for (y = 0;y

如果您想要填充如上所示的数组,则忽略了y方向。你可以简化。

代码语言:javascript
复制
#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的电路板将导致不可能的结果。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10021651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档