VisualFreeBasic游戏趣味编程_5.3_利用数组实现多根针的绘制

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

要实现多根针的绘制,需要记录每根针的角度值。这一节将介绍数组的概念,读者可以输入并运行以下代码:

Sub 游戏执行过程(hWndForm As hWnd)
   Dim a(2) As Long 
   a(0) = 1
   Print a(0)
   a(1) = 3 *a(0)
   Print a(1)
   a(2) = a(0) + a(1)
   Print a(2)
End sub

程序运行后输出:
其中,Dim a(2) As Long定义了整型数组a,a一共有3个元素——a(0)、a(1)、a(2)。括号中的0、1、2称为数组的下标,从0开始编号,到数组元素个数减1。注意,数组的下标不能超出范围,否则软件会崩溃,这种错误称为数组越界。

数组元素和一般变量类似,比如,可以进行赋值(a(0)=1;),可以输出(print a(0),数组的元素之间也可以进行运算(a(2) = a(0)+a(1) 。

也可以在定义数组时对数组元素赋初始值,并利用for循环语句输出数组的所有元素:

Sub 游戏执行过程(hWndForm As hWnd)
    Dim a(4) As Long= {1,3,5,7,9} 
    Dim i As Long 
    For i = 0 To 4
       Print a(i)
    Next 
   Dim b(4) As Long= {2,4,6}
   For i = 0 To 4
      Print b(i)
   Next 
End Sub

程序运行后输出:

1 3 5 7 9
2 4 6 0 0

其中,Dim a(4) As Long= {1,3,5,7,9}表示定义数组a,并用括号里的5个整数对数组的5个元素进行初始化,然后利用for语句输出数组的所有元素值。

Dim b(4) As Long= {2,4,6}表示定义数组b,并用括号里面的3个整数对数组的前3个元素进行初始化,后面的两个元素值自动赋值为0。

除了可以定义整型数组,还可以定义字符型数组、浮点数数组。以下代码为求出浮点数数组中的最大值与最小值:

Sub 游戏执行过程(hWndForm As hWnd)
   Dim a(7) As Single = {21.5, 13.7, 10.5, -7, 19, 20.5, -2.3, 13.2}
   Dim 最小  As Single = a(0)
   Dim 最大  As Single = a(0)
   Dim i    As Long
   For i = 0 To 7
      If a(i) < 最小 Then 最小 = a(i)
      If a(i) > 最大 Then 最大 = a(i)
   Next
   Print "最大值:" & 最大 & ",最小值:" & 最小
end sub 

程序运行后输出:最大值:21.5,最小值:-7


练习题5-2: 定义浮点数数组存储7个元素——1.2、2.3、3.0、4.8、5.6、6.9、7.8,编程求解数组所有元素的平方和。


回到游戏,假设有20根针:

Dim lineNum As Long  = 20

定义浮点数数组存储所有针的旋转角度:

Dim Angles(19) As Long

首先利用for循环语句,让数组中针的角度均匀分布

   Dim i As Long 
   For i = 0 To 19
      Angles(i) = i * 18
   Next 

在do循环语句中,利用for语句让数组中所有针的角度值增加rotateSpeed,即可实现所有针的旋转与显示。完整代码参看

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 = 20
   gg.Brush '不填充色彩
   Dim rotateSpeed As Long = 1
   Dim Angles(19)  As Long
   Dim i           As Long
   For i = 0 To 19
      Angles(i) = i * 18
   Next

   Do
      gg.Cls
      gg.Pen 3, BGR(0, 0, 0) '线宽为3,这样针看起来更明显
      For i = 0 To 19
         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
      gg.Pen 2, BGR(255, 0, 0) '设置圆盘线条颜色为红色
      gg.DrawEllipse 160, 80, 80, 80

      gg.Redraw
      Sleep 10
   Loop
End Sub

运行效果是在旋转的

评论一下?

OωO
取消