首先,我正在上一门使用Java编程语言的100级计算机科学课程。我们的作业是制作一个防御塔游戏,但我在路径规划方面遇到了麻烦。通过搜索,我发现A*算法似乎是最适合此任务的。然而,当我在路径周围画一个U形时,我的路径会卡住。因为我还没有学过数据结构课程,所以我的代码看起来很混乱(我正在努力改进)。请注意,我不会使用对角线移动。
我已经将A*算法精简了(可能过度),所以我要为我的节点添加父节点并计算正确的父节点,但我不认为这会解决我的问题。以下是我的问题的可视化图像。
现在问题出在大写字母 B 上。当塔被放置在该配置中并且我的导航路径被重新计算时,程序会卡住。由于之前的节点被忽略并且其余节点都无法通过,因此没有任何内容被放入 OpenList 中。
现在我想起来可以将 B 设为无法通过并回溯...哈哈。尽管我的教授称之为"篡改代码",我还是经常不停地添加补丁来解决问题,因为我不想删除"宝贝"并从头开始。虽然我愿意重做,但看着我的代码有多么混乱和不组织,让我很烦恼,迫不及待想学数据结构。
如果您有任何建议,请告诉我。
while(Castle not reached){
new OpenList
if(up, down, left, right == passable && isn't previous node){
//Adds in alternating order to create a more diagonal like path
Openlist.add(passable nodes)
}
BestPath.add(FindLeasDistancetoEnd(OpenList));
CheckCastleReached(BestPath[Last Index]);
{
private node FindLeastDistancetoEnd(node n){
return first node with Calculated smallest (X + Y to EndPoint)
}
我已经将A*算法精简了(可能过度),所以我要为我的节点添加父节点并计算正确的父节点,但我不认为这会解决我的问题。以下是我的问题的可视化图像。
X = 不可通过的(防御塔)
O = 开放列表
b = 关闭列表(最佳路径)
C = 城堡(终点)
S = 起点
OOOOXX
SbbbBX C
OOOOXX
现在问题出在大写字母 B 上。当塔被放置在该配置中并且我的导航路径被重新计算时,程序会卡住。由于之前的节点被忽略并且其余节点都无法通过,因此没有任何内容被放入 OpenList 中。
现在我想起来可以将 B 设为无法通过并回溯...哈哈。尽管我的教授称之为"篡改代码",我还是经常不停地添加补丁来解决问题,因为我不想删除"宝贝"并从头开始。虽然我愿意重做,但看着我的代码有多么混乱和不组织,让我很烦恼,迫不及待想学数据结构。
如果您有任何建议,请告诉我。
Math.pow()
可以使用,但乘法更快。根据维基百科,似乎父母(origins
)确实可以改变。这是我的错误。希望你现在已经弄清楚了。 - Ghostkeeper