【发布时间】:2013-08-05 15:22:08
【问题描述】:
我正在制作一个控制台游戏,其中移动角色必须左右移动才能拦截掉落的“水果”/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
这是 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
所指的 Instruction 类只是用来在 Console 中重绘字符。
我遇到了一些奇怪的问题,例如尾随字符应该被空格覆盖,水果掉落两个字符而不是一个字符,水果在前一个水果的左侧产卵然后停止等等。 ..但我在调试它时特别有问题。当我在代码中设置断点并单步执行时,调试器似乎不规律地从一个地方移动到另一个地方,就好像定时器在它暂停时仍在运行,而我太慢了。
有什么方法可以逐行正确地调试它,还是我必须对正在发生的事情做出明智的猜测?
【问题讨论】:
标签: vb.net debugging visual-studio-2012 timer console