当按下空格键后,将circleNum设为0,相当于清除所有已有的圆;将drawMode加1,从而切换为下一种绘图模式:
Do
If IsKeyPress(VK_SPACE) Then
'按下空格键
drawMode += 1
If drawMode > 4 Then drawMode = 1
Exit Do
End If
Sleep 100
Loop

全部代码
Sub 游戏执行过程(hWndForm As hWnd)
Dim gg As yGDI = hWndForm
Dim 圆心x(99) As Long '数组存储所有圆心的x坐标
Dim 圆心y(99) As Long '数组存储所有圆心的y坐标
Dim 半径(99) As Long '数组存储所有圆的半径
Dim 圆的个数 As Long = 0
Dim 游戏W As Long = DpiunScaleI(Form1.ScaleWidth) '游戏区的尺寸
Dim 游戏H As Long = DpiunScaleI(Form1.ScaleHeight)
Dim 圆的最小半径 As Long = 5
Dim 圆的最大半径 As Long = 40
Dim circleNum As Long ' 生成的圆的个数
Dim As Long x, y, r ' 新增圆的圆心坐标、半径
Dim isNewCircleOK As Long '用于判断新生成的圆是否OK
'生成圆,把数据保存在数组中
Dim i As Long
Dim drawMode As Long = 1
Do
While 圆的个数 < 100 '当圆的个数小于100时,循环运行
isNewCircleOK = 0 ' 假设开始不OK
While isNewCircleOK = 0 ' 当新生成的圆不OK时,重复生成新圆进行比较
Randomize
x = Int(Rnd *游戏W) '新圆的圆心x坐标
Randomize
y = Int(Rnd *游戏H) '新圆的圆心y坐标 '
r = 圆的最小半径
For i = 0 To 圆的个数 -1
If isTwoCirclesIntersect(圆心x(i), 圆心y(i), 半径(i), x, y, r) Then Exit For ' 如果已有圆和新圆相交跳出循环,此时i<圆的个数
Next
If (i = 圆的个数) Then ' 如果上面for语句都不跳出,说明i等于circleNum
isNewCircleOK = 1 ' 这个新生成的圆和已有圆都不相交
End If
Wend
isNewCircleOK = 0 ' 继续设为不OK,下面要让这个新圆的半径最大
While isNewCircleOK = 0 And r < 圆的最大半径 ' 当不OK,并且新圆的半径小于最大半径时
r += 1
For i = 0 To 圆的个数 -1
If isTwoCirclesIntersect(圆心x(i), 圆心y(i), 半径(i), x, y, r) Then
isNewCircleOK = 1 ' 一旦和一个旧圆相交,这时新圆OK
Exit For ' 因为新圆半径已经达到最大的情况,这时跳出循环
End If
Next
Wend
圆心x(圆的个数) = x '把新圆的圆心坐标添加到数组中
圆心y(圆的个数) = y
半径(圆的个数) = r '把新圆的半径添加到数组中
圆的个数 += 1 '圆的个数+1
Wend
gg.Cls
For i = 0 To 圆的个数 -1
'Dim drawMode As Long = randBetweenMinMax(1, 4) ' 随机生成一种绘制模式
' 根据不同绘图模式进行绘制
If (drawMode = 1) Then
DrawCircles1(gg, 圆心x(i), 圆心y(i), 半径(i))
ElseIf (drawMode = 2) Then
DrawCircles2(gg, 圆心x(i), 圆心y(i), 半径(i))
ElseIf (drawMode = 3) Then
DrawCircles3(gg, 圆心x(i), 圆心y(i), 半径(i))
ElseIf (drawMode = 4) Then
DrawCircles4(gg, 圆心x(i), 圆心y(i), 半径(i))
End If
Next
gg.Redraw
Sleep 500
Do
If IsKeyPress(VK_SPACE) Then
'按下空格键
圆的个数 =0
drawMode += 1
If drawMode > 4 Then drawMode = 1
Exit Do
End If
Sleep 100
Loop
Loop
End Sub
评论一下?