当新增加的针和已有针发生碰撞时,游戏失败。在此设定当两根针的旋转角度差的绝对值小于0.5度时,认为两根针足够接近,即发生了碰撞,然后退出游戏循环
If IsKeyPress(VK_SPACE) Then '按下空格键
If lineNum < 1000 Then
For i = 0 To lineNum -1
'如果两根针之间角度接近,认为碰撞,游戏失败
If Abs(Angles(i) -180) <= 0.6 Then
rotateSpeed = 0 '旋转速度设为0
Exit For '不用再比较了,循环跳出
End If
Next
If rotateSpeed = 0 Then Exit Do '游戏结束
其中,新增加针的旋转角度是 180 度,Abs(Angles(i) -180)是和已有针的旋转角度差。abs( )为求绝对值的函数,即任何一个大于或等于0的数的绝对值是其自身,任何一个小于0的数的绝对值是其自身乘以-1
Sub 游戏执行过程(hWndForm As hWnd)
Dim x As Long =-3
Dim y As Single =3.5
Print Abs(x)
Print Abs(y)
End sub
程序运行后输出:
3
3.5
当Abs(Angles(i) -180)成立时,认为新增加的针和已有针发生碰撞,即将旋转速度rotateSpeed设为0,所有针停止旋转。
此外,由于这时不需要再判断和其他针是否碰撞,因此使用Exit For语句,跳出当前for循环。
Sub 游戏执行过程(hWndForm As hWnd)
Dim i As Long
For i = 1 To 5
If i = 3 Then Exit For
Print i
Next
End sub
程序运行后输出:
1
2
当i等于3时,运行Exit For语句,跳出for循环,则仅输出1、2两个数字。
还有一个continue;语句,表示跳过当次循环,循环语句继续运行。输入并运行以下代码
Sub 游戏执行过程(hWndForm As hWnd)
Dim i As Long
For i = 1 To 5
If i = 3 Then Continue For
Print i
Next
End sub
程序运行后输出:
1
2
4
5
当i等于3时,运行continue For 语句,跳过当次for循环,继续运行下一次循环,则输出1、2、4、5这4个数字。
游戏失败后,rotateSpeed=0,然后退出游戏循环
If rotateSpeed = 0 Then Exit Do '游戏结束
全部成品代码
Sub 游戏执行过程(hWndForm As hWnd)
Dim gg As yGDI = hWndForm
Dim pi As Single = 3.1415926 / 180
Dim lineLength As Long = 100 ' 针的长度
Dim As Long xEnd, yEnd ' 针的末端坐标(针起始位置为圆心)
Dim lineNum As Long = 0
gg.Brush '不填充色彩
Dim rotateSpeed As Single = 0.5
Dim Angles(999) As Single
Dim i As Long
Do
gg.Cls
gg.Pen 3, BGR(0, 0, 0) '线宽为3,这样针看起来更明显
gg.DrawLine 0, 120, 60, 120
If IsKeyPress(VK_SPACE) Then '按下空格键
If lineNum < 1000 Then
For i = 0 To lineNum -1
'如果两根针之间角度接近,认为碰撞,游戏失败
If Abs(Angles(i) -180) <= 0.6 Then
rotateSpeed = 0 '旋转速度设为0
Exit For '不用再比较了,循环跳出
End If
Next
If rotateSpeed = 0 Then Exit Do '游戏结束
Angles(lineNum) = 180
lineNum += 1
Sleep 100
End If
End If
If lineNum Then '有针的情况
For i = 0 To lineNum -1
Angles(i) = Angles(i) + rotateSpeed '角度增加
If Angles(i) > 360 Then Angles(i) = 0
xEnd = 200 + lineLength *Cos(Angles(i) * pi) '计算针的末端坐标
yEnd = 120 + lineLength *Sin(Angles(i) * pi)
gg.DrawLine 200, 120, xEnd, yEnd
Next
End If
gg.Pen 2, BGR(255, 0, 0) '设置圆盘线条颜色为红色
gg.DrawEllipse 160, 80, 80, 80
gg.Redraw
Sleep 10
Loop
End Sub
评论一下?