VisualFreeBasic游戏趣味编程_5.6_游戏失败判断

2026-1-21 / 0 评论 / 53 阅读

当新增加的针和已有针发生碰撞时,游戏失败。在此设定当两根针的旋转角度差的绝对值小于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

评论一下?

OωO
取消