【发布时间】:2018-02-09 04:02:29
【问题描述】:
我正在编写我的第一个游戏,我还有一个问题要解决。我需要一个算法来检查我是否可以将选定的球移动到选定的位置。
看这张图:
规则是,如果我捡起白色背景上的蓝色球(在最中间),我可以将它移动到所有绿色空间,但不能将它移动到紫色空间,因为它们有点像被其他球围起来。我自然不能把它移到其他球占据的地方。球只能上下左右移动。
现在我知道已经存在两种算法:A* 和 Dijkstra 的算法可能会有所帮助,但它们对于我需要的东西来说似乎太复杂了(无论是使用向量还是我还没有学过的东西,我我对编程很陌生,这是我的学期项目)。我不需要找到最短的路,我只需要知道选择的目的地是否被其他球围起来。
我在游戏中的棋盘是 9x9 数组,如果它是一个空的地方,则简单地填充“/”,或者如果它被占用,则填充 7 个字母之一。
有没有一种方法可以让我以简单的方式编写算法代码?
[我选择了洪水填充,它工作得很好,感谢您的所有帮助,如果有人遇到类似的问题 - 我建议使用洪水填充,它非常简单快捷]
【问题讨论】:
-
深度优先搜索或广度优先搜索都可以正常工作。
-
你基本上是在寻找 flood fill algorithm,谷歌一下。即使是最简单的算法实现也足以满足 9x9 网格的需求。
-
既然你说你没有被告知向量是什么,这是最基本的东西。如果你真的,真的很着急,跳过它,否则你真正应该做的是阅读一些基础教程。如果没有向量(或其他 STL 容器),您的字段如何存储?在原始数组中?以后很容易给你带来麻烦。
-
@Aziuth 方形游戏板是
std::vector会分散std::array注意力的极少数 地方之一。对于 this 示例,我建议使用std::array<std::array<char, 9>, 9>。char[9][9]太容易混淆字符串了。 -
@dtech:一个带有相关图片的问题,之前对算法的研究确实在技术上是正确的,但是对于有限的输入大小来说是过度的?有很多非初学者仍在提出更糟糕的问题。
标签: c++ algorithm multidimensional-array dijkstra