0
我正在製作一個控制檯遊戲,其中一個移動的角色必須左右移動才能攔截下降的「水果」/ ASCII字符,只有我遇到了麻煩。我使用了一個定時器,間隔1秒,每過一段時間它就應該檢查板上已經存在的水果列表,並將每個水果向下移動一個,然後隨機將新的水果插入板子。水果都是作爲課堂上的對象來保存的。使用計時器進行調試
這裏的計時器代碼:
Sub FruitTick() Handles FruitTimer.Elapsed
Dim RandomNumber As Integer
Dim Fruit As Fruit
For i = 0 To FruitList.Count - 1
If FruitList(i).Position.Y < FruitBoard.Height - 1 Then
FruitList(i).LowerFruitByOne()
End If
Next
PeriodUntilFruitAppears -= 1
If PeriodUntilFruitAppears <= 0 Then
PeriodUntilFruitAppears = FruitFrequency
RandomNumber = New Random().Next(1, 5)
If RandomNumber = 1 Then
Fruit = New Fruit()
Fruit.AddToList()
Fruit.PlaceOnBoard()
End If
End If
End Sub
而這裏的類水果:稱
Public Class Fruit
Private FruitIcons() As Char = {"#", "ð", "ó", "ç", "%", "$"}
Public Icon As Char
Public Position As Location
Public Colour As ConsoleColor
Sub New()
Me.Icon = FruitIcons(New Random().Next(FruitIcons.Length))
Me.Position = New Location(New Random().Next(FruitBoard.Width), 0)
Me.Colour = New Random().Next(1, 16)
End Sub
Sub New(_Icon As Char, _
_Position As Location, _
_Colour As ConsoleColor)
Me.Icon = _Icon
Me.Position = New Location(_Position.X, 0)
Me.Colour = _Colour
End Sub
Sub PlaceOnBoard()
Console.SetCursorPosition(FruitBoard.Position.X + Me.Position.X, FruitBoard.Position.Y + Me.Position.Y)
Console.ForegroundColor = Me.Colour
Console.BackgroundColor = FruitBoard.BackColour
Console.Write(Me.Icon)
End Sub
Sub AddToList()
FruitList.Add(Me)
End Sub
Sub LowerFruitByOne()
Dim DrawInstruction As Instruction
DrawInstruction = New Instruction(" ", _
New Location(FruitBoard.Position.X + Me.Position.X, _
FruitBoard.Position.Y + Me.Position.Y), _
FruitBoard.BackColour, _
FruitBoard.BackColour)
DrawInstruction.Execute()
Me.Position.Y += 1
DrawInstruction = New Instruction(Me.Icon, _
New Location(FruitBoard.Position.X + Me.Position.X, _
FruitBoard.Position.Y + Me.Position.Y), _
Me.Colour, _
FruitBoard.BackColour)
DrawInstruction.Execute()
End Sub
End Class
指令類只是用來重繪在控制檯的字符。
我有一些奇怪的問題,例如尾隨的字符應該被空白的空間所覆蓋,果實落在兩個字符而不是一個,水果產生到前一個水果的左邊,然後停止等等...但我特別在調試時遇到問題。當我在代碼中放入一個斷點時,調試器似乎不規律地從一個地方移動到另一個地方,就好像定時器在暫停時仍然運行一樣,而且速度太慢。
有沒有什麼辦法可以逐行調試它,還是我需要對發生的事情進行智能猜測?
+1對於一個有用的建議,雖然我剛剛嘗試過它,它仍然在做一些奇怪的事情,調試器沒有逐行執行代碼。在很多情況下,它執行相同的行兩次,我不能解決爲什麼! – Lou
在主sub我使用GetAsyncKeyState函數來記錄按鍵來移動播放器,但這是獨立於FruitTimer,我看不出它會如何影響的東西。 – Lou