寻路2D Java游戏?

15

我目前正在编写一个非常基础的Java游戏,其灵感来自于Theme Hospital

我对Java还比较陌生,目前正在大学一年级学习。我已经断断续续地学了将近两年的Java,但现在我终于把时间专注于一个像样的项目上了。

我现在需要创建一个人(病人)以被送往医院。他们需要去接待处,然后去看GP,最后回到起点。

我已经研究过A*路径查找,但它对我来说似乎非常复杂。我认为我理解了它的工作原理,但不确定如何将其实现到我的游戏中。

到目前为止,用户可以放置接待处并建造GP的办公室。每个都有一个“使用点”,这将是病人必须到达的地方。网格方块只能是满的或不满的,没有不同的地形。

我还不想贴出任何代码,因为它很混乱,我在过去几个月中学习了许多与GUI相关的新技术。我的计划是先达到里程碑1,使病人去到接待处,然后去看诊室,最后离开。一旦我做到这一点,我将进一步整理代码。

我看过许多A*的实现和许多不同类型。有人能给我一个起点吗?我应该尝试调整已经编写好的类集,还是从头开始自己编写?


请查看我的帖子以获取A*算法实现的链接。 - TofuBeer
好问题,帮了我很多!不过,我认为这个问题将会在2020年被标记为关闭状态,因为一些人认为帖子中没有代码 :( - Travis
5个回答

11

你确实需要 A* 算法,它是基于网格的路径规划的最佳实现。

这可能会对你有所帮助:

http://www.cokeandcode.com/main/tutorials/path-finding/

编辑:上面的链接既可以作为可实现的类集合,也可以作为自定义路径规划方法以满足你的需求的指南。


啊,是的,我在几个月前第一次研究我的游戏想法时就发现了这个。我会重新阅读它,看看它是否有帮助。谢谢 :) - Relequestual

4

如果您编写自己的实现,您将学习到很多有关路径查找的知识。但是这也会花费很多时间。

可以查看JGraphT库,它处理一般图形,具有良好的API,并支持比A*更多的最短路径算法(更多)


4

3
这个链接已经失效了,它会重定向到该网站的主页面。 - Peter Mortensen

3

这本书《AI for Game Developers》对A*算法有非常好的解释。我今天实际上要写一个实现...如果我写了,我会把代码放在这里。

代码已经完成,它太大了,无法放在这里,所以您可以从https://chaos.bcit.ca/svn/public/astar/获取(自签名证书,但服务器不会做任何恶意事情)。

我基本上遵循了书中的伪代码,但我让所有东西都比我迄今为止看到的A*更加面向对象。

你有一个由Tile组成的Maze。每个Tile都有一个位置和一个障碍物(如果没有障碍物则为null)。

您可以使用PathFinder(如AStar)来查找给定起始位置和结束位置之间的最短路径。您将得到一条路径,其中包括您需要通过的Tile,以从起点到达终点。

你可以通过提供不同的启发式计算器来改变启发式计算(当前的启发式计算器只是检查是否有障碍物并找出最短的经过路径,例如,如果您不喜欢默认值,您可以为不同的障碍物添加权重)。代码已根据LGPL授权许可,因此如果您进行更改并分发应用程序,则必须使更改可用。请随时将漏洞报告/修复发送到许可证注释中的电子邮件地址(在每个头文件中都可以找到)。考试后我会添加注释,但我认为它非常直观易懂。

哇,我喜欢 Stack Overflow,回复非常快。谢谢,如果我使用了你的实现,当然会给你完全的功劳! - Relequestual
没关系(这里只有几个前学生知道我的真名,所以不用担心 :-)) - TofuBeer
1
只要您发布有趣、广泛或酷炫的内容,您将会得到快速的回复。如果您提出的问题是在不多人有经验的领域中的精确技术问题,或者是写得不好且缺乏细节的问题,那么您将会看到 Stack Overflow 上更加安静的一面。 :) - Robert P
代码已发布(请参见链接) - TofuBeer
2
链接无法访问。 - kb1000
是的...我前一段时间换了办公室,现在又要搬家了。搬完后我会尽力让它重新运行起来。 - TofuBeer

0

1
链接(有效地)已损坏:您没有权限访问此服务器上的/~csc245/teaching/CS1015/practicals/aStarTutorial.htm - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接