选择"案例未按预期工作(特定于代码)"



我有一个while循环显示一个graphnodes数组(使用一个函数,该函数返回图形节点中的字符以显示),然后是一个"移动"过程,将"生物"从一个节点移动到另一个节点。生物通过按"W"、"A"、"S"或"D"来决定去哪里,然后从生物中占据(使用称为"deoccupy"的函数)图形节点,并将该生物放入生物想要移动的方向的图形节点中。

我尝试在几乎所有地方抛出一些错误,并使用 trycatch 中断不起作用的代码,我没有收到任何错误。我在运动"选择案例"语句中添加了一个案例。

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"中的任何一个时刷新地图。

附言很抱歉放了这么多代码。

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

由于在找到占用的单元格时不会退出函数,因此在方法完成并调用myMap.ShowMap()之前,您向哪个方向移动tiles(x, y).IsOccupied再次为 true。对我来说,它看起来也非常低效 - 你为什么不跟踪生物的当前位置,而不是遍历整个网格,例如在生物对象内?

最新更新