当前位置:编程学习 > VB >>

VB二维数组定义和填充圆形程序

求实现以下功能的VB程序。。急。。。

1。想把32组坐标(x,y)定义为一组二维数组
2。按按钮后,以二维数组的坐标,画32个直径为22的圆(有填充色),每个间隔0.1s画
3。画完32个后全部清空(即回到背景)
4。以二维数组为坐标,随机(8次左右)依次间隔0.1s画圆,
   画后一个时,清除掉前一个圆
--------------------编程问答-------------------- 1。想把32组坐标(x,y)定义为一组二维数组
这个是不是定义成两个分别为x坐标和y坐标的一维数组比较好? --------------------编程问答-------------------- 飘过~~~~~~~~~~~~~~~~~~~~~~~~~~~ --------------------编程问答-------------------- 飘过~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
 
--------------------编程问答--------------------

Dim xy(1 To 32, 1 To 2) As Integer
Dim i8(1 To 8, 1 To 2) As Integer
Dim n As Integer, p As Integer, r As Integer
Private Sub Command1_Click()
   Dim i As Integer, x As Integer, y As Integer
   
   For i = 0 To 31
       x = x + 30
       If i Mod 8 = 0 Then
          x = 30: y = y + 50
       End If
       xy(i + 1, 1) = x: xy(i + 1, 2) = y
   Next
   n = 0: p = 0: r = 9
   Timer1.Enabled = True
   
End Sub

Private Sub Form_Load()
    Randomize Timer
    Timer1.Interval = 100
    Timer1.Enabled = False
    Timer2.Interval = 1000
    Timer2.Enabled = False
    Me.ScaleMode = 3
    Me.DrawMode = 7
End Sub

Private Sub Timer1_Timer()
   Dim rXY As Integer
   n = n + 1
   If n <= 32 Then
      FillStyle = 0
      FillColor = QBColor(Int(Rnd * 16))
      Me.Circle (xy(n, 1), xy(n, 2)), 11, QBColor(Int(Rnd(0) * 16))
   Else
      If n = 33 Then
         Me.Cls
      Else
        n = 34
      End If
      
      p = p + 1
      If p <= 8 Then
         rXY = Int(Rnd * 32) + 1
         FillStyle = 0
         FillColor = QBColor(Int(Rnd * 16))
         Me.Circle (xy(rXY, 1), xy(rXY, 2)), 11, QBColor(Int(Rnd(0) * 16))
         i8(p, 1) = rXY
         i8(p, 2) = Int(Rnd(0) * 16)
      Else
         Timer1.Enabled = False
         Timer2.Enabled = True
      End If
   End If
   
End Sub

Private Sub Timer2_Timer()'长时间定时器也很简单,网上找一下,很多。
   r = r - 1
   If r < 1 Then
      Timer2.Enabled = False
      Exit Sub
   End If
   FillStyle = 0
   FillColor = QBColor(i8(r, 2))
   Me.Circle (xy(i8(r, 1), 1), xy(i8(r, 1), 2)), 11, QBColor(i8(r, 2))

End Sub
--------------------编程问答-------------------- 谢谢回复,能不能给点注释说明啊。。。
引用 4 楼 chinaboyzyq 的回复:
VB code

Dim xy(1 To 32, 1 To 2) As Integer
Dim i8(1 To 8, 1 To 2) As Integer
Dim n As Integer, p As Integer, r As Integer
Private Sub Command1_Click()
   Dim i As Integer, x As Integer, y As In……
--------------------编程问答-------------------- 1,2步骤都没问题了,3,4中的怎样清空画过的圆,再恢复到背景图像上?
求高手赐教一下 --------------------编程问答--------------------

Dim xy(1 To 32, 1 To 2) As Integer
Dim i8(1 To 8, 1 To 2) As Integer
Dim n As Integer, p As Integer, r As Integer
Private Sub Command1_Click()
   Dim i As Integer, x As Integer, y As Integer
   
   For i = 0 To 31 '装载你要的32个坐标值
       x = x + 30
       If i Mod 8 = 0 Then '坐标点为8个图形一行,共4行。
          x = 30: y = y + 50
       End If
       xy(i + 1, 1) = x: xy(i + 1, 2) = y
   Next
   n = 0: p = 0: r = 9
   Timer1.Enabled = True '启动定时器开始画圆。
   
End Sub

Private Sub Form_Load()
    Randomize Timer '初始化随机数
    Timer1.Interval = 100
    Timer1.Enabled = False
    Timer2.Interval = 1000
    Timer2.Enabled = False
    Me.ScaleMode = 3 '定义form1的缩放模式为像素
    Me.DrawMode = 7 '定义form1的画笔为异或笔,异或笔的意思是用原色原地再画一遍即擦除
End Sub

Private Sub Timer1_Timer()
   Dim rXY As Integer
   n = n + 1
   If n <= 32 Then
      FillStyle = 0 '实线填充模式
      FillColor = QBColor(Int(Rnd * 16)) '随机选择填充颜色
      Me.Circle (xy(n, 1), xy(n, 2)), 11, QBColor(Int(Rnd(0) * 16)) '用填充色画圆
   Else
      If n = 33 Then
         Me.Cls
      Else
        n = 34
      End If
      
      p = p + 1
      If p <= 8 Then '在32个坐标点里随机选择8个点并画圆。
         rXY = Int(Rnd * 32) + 1
         FillStyle = 0
         FillColor = QBColor(Int(Rnd * 16))
         Me.Circle (xy(rXY, 1), xy(rXY, 2)), 11, QBColor(Int(Rnd(0) * 16))
         i8(p, 1) = rXY  '记录圆的坐标位置,以便后面擦除
         i8(p, 2) = Int(Rnd(0) * 16) '记录颜色,以便后面擦除
      Else
         Timer1.Enabled = False
         Timer2.Enabled = True
      End If
   End If
   
End Sub

Private Sub Timer2_Timer()'倒序擦除已经画上去的圆。
   r = r - 1
   If r < 1 Then
      Timer2.Enabled = False
      Exit Sub
   End If
   FillStyle = 0
   FillColor = QBColor(i8(r, 2))
   Me.Circle (xy(i8(r, 1), 1), xy(i8(r, 1), 2)), 11, QBColor(i8(r, 2))

End Sub
--------------------编程问答--------------------
引用 6 楼 ikano 的回复:
1,2步骤都没问题了,3,4中的怎样清空画过的圆,再恢复到背景图像上?
求高手赐教一下

用已经记录的坐标位置和颜色再画即可。
--------------------编程问答-------------------- 背景用了图片,不好再涂色。。
引用 8 楼 chinaboyzyq 的回复:
引用 6 楼 ikano 的回复:

1,2步骤都没问题了,3,4中的怎样清空画过的圆,再恢复到背景图像上?
求高手赐教一下

用已经记录的坐标位置和颜色再画即可。
--------------------编程问答-------------------- 有没有人知道怎样自定义Brushes的颜色?想定一个RGB(221,217,195) --------------------编程问答-------------------- 全部清除后重画背景,重画圆——要“擦除”的圆跳过不画。
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,