VisualFreeBasic游戏趣味编程_6.7_按键互动

2026-1-22 / 0 评论 / 48 阅读

当按下空格键后,将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

评论一下?

OωO
取消