定义整型变量记录游戏的得分,并初始化为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
作业:针扎失败后,可以搞一个爆炸效果动画。
评论一下?