我有一个while循环,显示一个graphnode数组(使用返回在graphnode中显示一个char的函数),然后执行一个“移动”过程,将“ Creature”从一个节点移动到另一个节点。生物通过按下'W','A','S'或'D'决定去向,然后将其从生物中占据图节点(使用称为“占据”功能),然后将该生物放入图的节点中。生物要移动的方向。
我已经尝试到处都抛出一些错误,并使用trycatch中断无法正常工作的代码,但是我没有得到任何错误。我在“ Select Case”语句中添加了一个案例。
While True
Try
Console.SetCursorPosition(0, 0)
myMap.ShowMap()
myMap.MoveCreatures()
Catch ex As Exception
Console.Clear()
Console.WriteLine(ex.Message)
Console.ReadKey(True)
End Try
End While
Public Sub MoveCreatures()
For y = 0 To tiles.GetLength(1) - 1
For x = 0 To tiles.GetLength(0) - 1
If tiles(x, y).IsOccupied Then
tiles(x, y).MoveCreature()
End If
Next
Next
Public Sub MoveCreature() Implements ITile.MoveCreature
If Occupied = True Then
Creature.Action(Me)
Else
Throw New Exception("No creature to move here.")
End If
End Sub
Select Case Console.ReadKey(True).KeyChar
Case "w"
If currentTile.North IsNot Nothing Then
currentTile.North.Occupy(currentTile.Deoccupy)
Else
Throw New Exception("Can't go in this direction!")
End If
Case "a"
If currentTile.West IsNot Nothing Then
currentTile.West.Occupy(currentTile.Deoccupy)
Else
Throw New Exception("Can't go in this direction!")
End If
...
'S'和'D'的代码相同,减去方向变化。例如。 “ S”具有
currentTile.South
当该生物在“ W”或“ D”中移动时,直到我按下另一个键时它才会重新显示地图,而当它在“ A”或“ S”中移动时,它会立即刷新地图。我希望它在我按“ W”,“ A”,“ S”或“ D”中的任何一个时刷新地图。
P.S。很抱歉放置这么多代码。
答案 0 :(得分:2)
While True
是一种C#解决方法,因为它们无法创建无限循环。在VB中,只需使用Do Loop
即可:
Do
Try
Console.SetCursorPosition(0, 0)
myMap.ShowMap()
myMap.MoveCreatures()
Catch ex As Exception
Console.Clear()
Console.WriteLine(ex.Message)
Console.ReadKey(True)
End Try
Loop
我想问题在于方法
Public Sub MoveCreatures()
For y = 0 To tiles.GetLength(1) - 1
For x = 0 To tiles.GetLength(0) - 1
If tiles(x, y).IsOccupied Then
tiles(x, y).MoveCreature()
End If
Next
Next
由于在找到占用的单元格时不会退出该函数,因此根据方法完成并调用tiles(x, y).IsOccupied
之前,向myMap.ShowMap()
的移动方向又是正确的。对我来说,它看起来效率也很低-为什么不跟踪生物的当前位置而不是遍历整个网格,例如在生物对象内?