VisualFreeBasic游戏趣味编程_5.7_得分与显示效果改进

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

定义整型变量记录游戏的得分,并初始化为0

Dim score As Long ' 得分

当用户按空格键并且游戏没有失败,则得分增加1:

score = score + 1  ' 得分+1

最后将score转换为字符串输出:

      gg.Font "黑体", 14
      gg.SetColor BGR(0,178,0) '文字颜色
      gg.DrawString 5,90,"得分:" & score '显示得分   

填充绘制圆盘,随着针数的增加,圆盘填充颜色越来越鲜艳:

gg.Brush  HSBtoRGB_Gdi(HSB(0,lineNum,100,255)) 

将正在旋转的针的颜色设为蓝色,最新发射的针的颜色设为红色:

If i = lineNum -1 Then gg.Pen 3, BGR(204, 0, 0) 

添加发射针的动画

      If 发射动画 Then
         gg.DrawLine 100 - 发射动画, 120, 60 + (100 - 发射动画), 120
         发射动画 -= 2

最后执行结果,圈在旋转,按空格,针会扎过去。

完整代码

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
   Dim score       As Long ' 得分
   Dim 发射动画    As Long
   Do
      gg.Cls

      gg.Font "黑体", 14
      gg.SetColor BGR(0, 178, 0) '文字颜色
      gg.DrawString 5, 90, "得分:" & score '显示得分
      gg.Pen 3, 0
      If 发射动画 Then
         gg.DrawLine 100 - 发射动画, 120, 60 + (100 - 发射动画), 120
         发射动画 -= 2
         If 发射动画 = 0 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 '游戏结束
            score           = score + 1 ' 得分+1
            Angles(lineNum) = 180
            lineNum         += 1
         End If
      Else
         gg.DrawLine 0, 120, 60, 120
         If IsKeyPress(VK_SPACE) Then '按下空格键
            If lineNum < 1000 Then
               发射动画 = 100
            End If
         End If
      End If
      If lineNum Then '有针的情况
         gg.Pen 3, BGR(0, 128, 255)
         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)
            If i = lineNum -1 Then gg.Pen 3, BGR(204, 0, 0)
            gg.DrawLine 200, 120, xEnd, yEnd
         Next
      End If
      gg.Pen 2, BGR(255, 0, 0)
      gg.Brush HSBtoRGB_Gdi(HSB(0, lineNum, 100, 255))
      gg.DrawEllipse 160, 80, 80, 80

      gg.Redraw
      Sleep 10
   Loop
End Sub

作业:针扎失败后,可以搞一个爆炸效果动画。

评论一下?

OωO
取消