我是来自澳大利亚的 11 年级 IPT(编程)学生。我有一个任务,我需要制作一个老式游戏。我选择制作俄罗斯方块,几乎完成了,但有一些问题。
我在使用 Visual Basic .Net (2008) 时遇到问题。该程序正在更改一个变量而没有被编程这样做。它在一个模块中,并且 Sub 是变量存在的唯一位置。
基本上,变量(称为 intLineFilled)保存了比赛场地内某条水平线上的方格数。然后我有一个 IF 语句来测试它是否等于一行中的正方形总数。(游戏面板的宽度除以方块的宽度。)发生这种情况时,意味着将布尔值更改为 true 以表示有一条线。
我的问题是:调试时,在放置第一个块后(有时是第二个或第三个,取决于运气),当它到达上述 IF 语句时,该值只有 1、2 或 3,具体取决于块类型。但是 IF 语句仍然运行,并且在 IF 语句期间或之后测试变量 intLineFilled 的值告诉我它的值是 16(这是它需要达到一行的值)。由此,我收到一个错误,其中程序告诉我表单上有 5 行,这会引发我稍后使用的数组的错误。代码一开始工作得很好,但现在不行了。
Dim intLineChecker_Left As Integer = frmGame.picGamePanel.Left
Dim intLineChecker_Top As Integer = frmGame.picGamePanel.Top + frmGame.picGamePanel.Height - intSquareSize
Dim blnLine As Boolean = False
Dim intLineFilled As Integer = 0
Dim intLineNum As Integer = 0
Dim intLine(4) As Integer
For index As Byte = 0 To 4
intLine(index) = 0
Next index
While intLineChecker_Top > frmGame.picGamePanel.Top
While intLineChecker_Left < (frmGame.picGamePanel.Left + frmGame.picGamePanel.Width)
For Each placedblock In frmGame.Controls
If placedblock.Tag = "placed" Then
If placedblock.Left = intLineChecker_Left Then
If placedblock.Top = intLineChecker_Top Then
intLineFilled += 1
End If
End If
End If
Next placedblock
If intLineFilled = frmGame.picGamePanel.Width / intSquareSize Then
blnLine = True
End If
If blnLine = True Then
intLineNum += 1
frmGame.TextBox1.Text = frmGame.TextBox1.Text + "bln: " + Str(intLineNum) + ", "
intLine(intLineNum) = intLineChecker_Top
End If
intLineChecker_Left = intLineChecker_Left + intSquareSize
End While
blnLine = False
intLineFilled = 0
intLineChecker_Left = frmGame.picGamePanel.Left
intLineChecker_Top = intLineChecker_Top - intSquareSize
End While
如果有人想查看,我的项目位于以下链接的 zip 文件中: https ://www.dropbox.com/s/99btww63qpl0pjm/Tetris.zip
比赛需要在明天之前完成,但在我解决这个问题之前我无法进行其他任何事情。