2010-07-21 78 views
2

比方说,我有这个二维数组地图寻路二维数组

{ 0,0,0,0,7,1,1,1,1,1,1,1,1 }, 
{ 0,7,7,7,7,1,1,1,24,1,1,1,1 }, 
{ 0,7,24,24,24,24,24,24,24,1,1,3,1 }, 
{ 0,7,23,23,23,23,23,23,24,1,1,3,1 }, 
{ 0,7,24,23,23,23,23,23,23,1,1,1,1 }, 
{ 0,7,24,23,23,23,23,23,23,1,1,1,1 }, 
{ 0,7,23,23,23,23,23,23,24,1,3,1,1 }, 
{ 0,7,24,24,24,24,24,24,24,1,3,1,1 }, 
{ 0,0,0,0,1,1,1,1,1,1,1,1,1 }, 

,我有充分的HashSet定义阻止砖整数。什么是一种好方法,当我点击地图的一部分时,我的球员站在那里做一个好的寻路? A *(使用节点/ etc)?你有什么建议?

谢谢。

+0

为了使用A *,我建议设置被阻塞的tile为int.MaxValue值,并且忘记任何hashset。 – nothrow 2010-07-21 15:17:24

+0

哪里是了解A *的好地方?我试过谷歌。 :\ – nn2 2010-07-21 15:22:20

+1

尝试维基百科:http://en.wikipedia.org/wiki/A*_search_algorithm 另外,移动通过一个瓷砖的成本是不同的? – tsiki 2010-07-21 15:23:55

回答

6

如果图的大小实际上与您所描述的示例的顺序相同,那么您可以安全地使用Dijkstra's algorithm,因为它的实现比A *更简单一些,并且没有真正需要启发式算法如果你可以在几乎同一时间做一个详尽的搜索:)

至于你对“使用节点/ etc”的评论,这已经是一个图,尽管是一个稍微尴尬的表示。每个数组值都是一个节点,“边缘”由数组中的邻接给出。被阻塞的图块可以通过禁止邻接来完成(即查看被阻塞图块的列表以确定是否可以从当前正在考虑的另一个节点到达),或者如上面Yossarian所建议的那样,只需将该图块的成本设置为这样大到几乎无限大。但是,如果采用后一种方法,则需要确保这些切片永远不会在解决方案中无意中结束!

+0

你知道吗?这对我来说似乎有点高级。我将学习Java游戏AI和逻辑的基础知识。我有David Brackeen编写的“Java开发游戏”和Jonathan S. Harbour的“Beginning Java Game Programming Second Edition”和Andrew Davison编写的“Java中的Killer Game Programming”。当我阅读这些内容时,我会尽快回复您。好哇! – nn2 2010-07-21 15:35:57

+0

@丹 - 这是一个非常好的答案,你应该真的考虑它。如果你害怕图像,只需使用一个图形库,如jgraph,它已经有一个Djikstra最短路径函数 – willcodejavaforfood 2010-07-21 15:38:47

+0

我会看看jgraph。小心将我链接到它的网站?无法在Google上找到它,因为这只是一个常用词。 – nn2 2010-07-21 15:43:37