选择“案例无法正常工作(特定于代码)

时间:2019-07-09 18:09:08

标签: vb.net select-case

我有一个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。很抱歉放置这么多代码。

1 个答案:

答案 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()的移动方向又是正确的。对我来说,它看起来效率也很低-为什么不跟踪生物的当前位置而不是遍历整个网格,例如在生物对象内?