【问题标题】:Algorithm for positioning ships in Battleship game战舰游戏中舰船定位算法
【发布时间】:2015-08-14 21:12:40
【问题描述】:

我必须在 C++ 中实现Battleship game。这将是 Human vs Computer 游戏。

除了在游戏开始时定位计算机的船只外,一切都非常简单。计算机的舰船位置应该是随机的。但是我应该如何(最佳地)为船舶选择数组的单元格?

编写代码来设置船的随机位置,然后检查附近的单元格是否为空,这可能非常耗时。

有什么想法吗?

【问题讨论】:

  • 你应该编辑你的问题,说明你说你没有提到的规则。

标签: algorithm position


【解决方案1】:

空间如此之大,总是有空闲的细胞可以使用,所以反复尝试放置飞船,然后失败,完全没问题。

您可以通过确保您的船只不接触(因为如果对手正在摧毁船只,这可能会给对手提供免费信息)以及通过放置较短的船只来实现足够接近最佳的定位。靠近边缘的概率略高(以抵消更大的船只更有可能在中心附近被发现的事实)。

【讨论】:

  • 但数组大小不必为 10x10。我会让它更灵活。重复随机尝试不是这里的解决方案。我想做到最好。随机尝试非常耗时。我没有在上面写,但是在这个游戏中船不能“触摸”(因为游戏规则是这样的;这是必须的)。
  • @patryk.beza: 1) 我知道大小可以是任何东西。我仍然坚持我的主张,因为密集战舰的游戏并不有趣。 2)然后你应该编辑问题。
【解决方案2】:

使用链表,其中每个节点都是棋盘上一个正方形的链接。然后,您可以 a) 生成一个随机节点,b) 在放置船只时从列表中删除节点。您可以从放置的船周围移除额外的节点,以便给该船一些空间(不希望您的船接触;)

【讨论】:

  • 可能不是数据结构的最佳选择,因为棋盘是二维网格;单元格有多个相邻的单元格,因此与使用锯齿状/多维数组相比,您最终需要更多代码来确定邻居。
  • 每个节点都是指向棋盘上一个正方形的链接。随心所欲地实现它 - 您可以使用具有属性 X 和 Y 的结构/类“Square”,然后您可以使用与锯齿状数组完全相同的方式确定邻居。
【解决方案3】:

如果是计算机与计算机,您只需要确保将飞船随机放置在棋盘上,以使所有飞船都不相邻。

不过,由于您是在扮演人类角色,因此您可以获得更多创意。就像玩石头剪刀布游戏一样,您可以通过利用人类倾向获得优势。

【讨论】:

  • 这就是问题所在:如何以最佳方式将船只随机放置在船上,以使所有船只都不相邻?
猜你喜欢
  • 2021-11-30
  • 2014-01-18
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2018-01-05
相关资源
最近更新 更多