我正在尝试在Swift中编码A* PATHFIND。
在这一点上,我正在遇到一个问题,可以检索我的封闭列表的G-Costs。
这个问题是,当我尝试搜索字典中的条目时,即使我相信我要输入正确的钥匙,也会返回一个零。
这是相关代码(注意:字典是字符串:int格式,因为它不需要cgpoints(。
print("(closedList["(currentPos)"])")
print("(currentPosString)")
print("(closedList)")
GCost = GCost + (Int)(closedList["(currentPosString)"]!)
CurrentPosString是一个字符串,CurrentPOS是CGPOINT(我曾尝试过(。
这是从此代码中读取的(我省略了很多代码(。
nil
4,4
[" 4.0,4.0":0]
(最后一行返回由于零零引起的错误(。
我的问题是如何使"封闭列表[CurrentPosString]"具有正确访问条目的正确格式并返回0?
代码生成封闭的密码:
closedList["(currentBest)"] = openList["(currentBest)"]
openList["(currentBest)"] = nil
openListOrder["(currentBest)"] = nil
for i in 0 ..< mapTerrain.numberOfColumns{
for j in 0 ..< mapTerrain.numberOfRows{
if currentBest == "(i), (j)"{
currentPos = CGPoint(x: i, y: j)
currentPosString = "(i), (j)"
closedList["(currentPos)"] = closedList[currentBest!]
print("(closedList["(currentPos)"])")
print("a") //not printing for some reason
foundNextNewPos = true
}
if foundNextNewPos == true{
break
}
}
if foundNextNewPos == true{
break
}
}
尝试使用此代码进行了重建,它仍然破裂:
currentPosString = currentBest!
currentBest = nil
生成电流:
for key in openList.keys{
let tester = openList["(key)"] //find way to not get a nil later
//print("(openList["(currentBest)"]!)") //gives nil
if key == "(endPoint)"{
currentBest = key
foundEnd = true
break
}else if openList["(currentBest)"] == nil{
currentBest = key
}else if tester! < openList["(currentBest)"]!{
currentBest = key
} else if tester == openList["(currentBest)"]{
if openListOrder["(key)"]! > openListOrder["(currentBest)"]!{
currentBest = key
}
}
}
问题是没有条目" 4,4",条目" 4.0,4.0"来自较早的代码行,该行依赖于cgfloats制作键,编辑此信息使用相同格式(" int,int"(使其正常工作。
if hexCounter < 3 && openList["(currentPos.x), (currentPos.y)"] == nil{
closedList["(currentPos.x), (currentPos.y)"] = 0
}
to
if hexCounter < 3 && openList["(currentPosString)"] == nil{
closedList["(currentPosString)"] = 0
}