動くキャラクターが落下する「果物」/ASCII 文字を傍受するために左右に移動する必要があるコンソール ゲームを作成していますが、私だけが問題を抱えています。私は1秒間隔のタイマーを使用しています.タイマーが経過するたびに、すでにボードにある果物のリストをチェックし、各果物を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
Fruit のクラスは次のとおりです。
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 文字ではなく 2 文字落ちる、フルーツが前のフルーツの左側にスポーンして停止するなど、奇妙な問題が発生しています。特にデバッグに問題があります。ブレークポイントを設定してコードにステップ インすると、デバッガーが不規則に場所を移動するように見えます。タイマーが一時停止している間もタイマーがまだ実行されていて、速度が遅すぎるようです。
行ごとに適切にデバッグする方法はありますか、それとも何が起こっているのかについて賢明な推測をする必要がありますか?