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
--------------------编程问答-------------------- 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
用已经记录的坐标位置和颜色再画即可。
--------------------编程问答-------------------- 背景用了图片,不好再涂色。。
--------------------编程问答-------------------- 有没有人知道怎样自定义Brushes的颜色?想定一个RGB(221,217,195) --------------------编程问答-------------------- 全部清除后重画背景,重画圆——要“擦除”的圆跳过不画。
补充:VB , 网络编程