大神们,帮助解释下呗



程序代码:Option Explicit
Const StartX = 0 '格子起始坐标
Const StartY = 0
Const StartH = 600 '格子高
Const StartW = 720 '格子宽
Const m = 12 '格子横向数
Const n = 12 '格子纵向数
Dim a(1 To m, 1 To n)
Dim SelIndex As Long
Public Sub view()
'显示函数
Dim i As Long
Dim j As Long
For i = 1 To m
For j = 1 To n
If a(i, j) = 0 Then '无色
Picture1.Line (StartX + (i - 1) * StartW, StartY + (j - 1) * StartH)-(StartX + i * StartW, StartY + j * StartH), Picture1.BackColor, BF
Picture1.Line (StartX + (i - 1) * StartW, StartY + (j - 1) * StartH)-(StartX + i * StartW, StartY + j * StartH), , B
ElseIf a(i, j) > 0 And a(i, j) < 5 Then '对应四色
Picture1.Line (StartX + (i - 1) * StartW, StartY + (j - 1) * StartH)-(StartX + i * StartW, StartY + j * StartH), Label1(a(i, j)).BackColor, BF
Picture1.Line (StartX + (i - 1) * StartW, StartY + (j - 1) * StartH)-(StartX + i * StartW, StartY + j * StartH), , B
End If
Next j
Next i
End Sub
Private Sub Form_Load()
Call view
End Sub
Private Sub Label1_Click(Index As Integer)
'选色
If Index > 0 Then
SelIndex = Index
Label1(0).BackColor = Label1(SelIndex).BackColor
End If
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
'单击单元格
Dim i As Long, j As Long
i = Int((X - StartX) / StartW) + 1
j = Int((Y - StartY) / StartH) + 1
If a(i, j) = SelIndex Then
a(i, j) = 0
Else
a(i, j) = SelIndex
End If
Call view
End Sub

程序代码:Option Explicit
Dim pattern(7) As Byte
Private Sub Command1_Click()
Call DrawPattern(100, 70, vbRed)
End Sub
Private Sub Form_Load()
Dim pattern_x As Integer
Dim pattern_y As Integer
Form1.ScaleMode = 3
IniPattern
Form1.AutoRedraw = True
End Sub
Sub IniPattern()
pattern(0) = &H0
pattern(1) = &H78
pattern(2) = &H76
pattern(3) = &H66
pattern(4) = &H26
pattern(5) = &H1C
pattern(6) = &H36
pattern(7) = &H0
End Sub
Sub DrawPattern(x As Integer, y As Integer, c As Long)
Dim temp_x As Integer
Dim temp_y As Integer
Form1.ForeColor = c
For temp_y = 0 To 7
For temp_x = 0 To 7
If (pattern(temp_y) And (2 ^ (7 - temp_x))) <> 0 Then Form1.PSet (x + temp_x, y + temp_y)
Next
Next
End Sub

程序代码:Option Explicit
Const StartX = 0 '格子起始坐标
Const StartY = 0
Const StartH = 300 '格子高
Const StartW = 360 '格子宽
Const m = 24 '格子横向数
Const n = 24 '格子竖向数
Dim a(1 To m, 1 To n) '网格数组
Dim SelIndex As Long '选择的颜色索引,颜色表,放在 lable1 的控件数组中,0号用于显示选中的颜色,1-4为可选的颜色
Dim fz As Long '进入仿真的按钮
Public Sub view()
'显示函数
Dim i As Long
Dim j As Long
For i = 1 To m
For j = 1 To n
If a(i, j) = 0 Then '无色
'先画色块
Picture1.Line (StartX + (i - 1) * StartW, StartY + (j - 1) * StartH)-(StartX + i * StartW, StartY + j * StartH), Picture1.BackColor, BF
'再画网格线
Picture1.Line (StartX + (i - 1) * StartW, StartY + (j - 1) * StartH)-(StartX + i * StartW, StartY + j * StartH), , B
ElseIf a(i, j) > 0 And a(i, j) < Label1.Count Then '对应四色
'先画色块,再画网络线
Picture1.Line (StartX + (i - 1) * StartW, StartY + (j - 1) * StartH)-(StartX + i * StartW, StartY + j * StartH), Label1(a(i, j)).BackColor, BF
Picture1.Line (StartX + (i - 1) * StartW, StartY + (j - 1) * StartH)-(StartX + i * StartW, StartY + j * StartH), , B
End If
Next j
Next i
End Sub
Private Sub Command1_Click()
'进入仿真模式
fz = 1 '一号图案,如果有多个按钮,可以继续写出 二号图案,三号图案。等等,需要在对应判断中补充图案的坐标
End Sub
Private Sub Label1_Click(Index As Integer)
'选色
If Index > 0 Then '0号是显示选中色,所以不能被选
SelIndex = Index '设置选定几号色
Label1(0).BackColor = Label1(SelIndex).BackColor '显示选中色
End If
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
'单击单元格
Dim i As Long, j As Long
i = Int((x - StartX) / StartW) + 1
j = Int((y - StartY) / StartH) + 1
Select Case fz
Case 0 '0,无图案,单点
Call fztc(i, j) '直接给色
Case 1 '一号图案,可以照此扩展出二号图案,三号图案等等
'仿真,按图案坐标给色,注意,如果原来有这个色,会把这个色给清掉
Call fztc(i + 1, j)
Call fztc(i + 2, j)
Call fztc(i + 3, j)
Call fztc(i, j + 1)
Call fztc(i + 4, j + 1)
Call fztc(i, j + 2)
Call fztc(i + 4, j + 2)
Call fztc(i + 1, j + 3)
Call fztc(i + 2, j + 3)
Call fztc(i + 3, j + 3)
Call fztc(i + 2, j + 4)
Call fztc(i + 1, j + 5)
Call fztc(i + 2, j + 5)
Call fztc(i + 3, j + 5)
Call fztc(i, j + 6)
Call fztc(i + 4, j + 6)
Case Else '图案超范围,忽略掉
Call fztc(i, j) '直接给色
End Select
fz = 0 '清掉图案状态
Call view '绘制
End Sub
Private Sub fztc(x As Long, y As Long)
'因为绘制仿真时,需要大量重复判断及赋值,写成过程调用
If x > m Or y > n Or x < 1 Or y < 1 Then '超出边界忽略
Else
If a(x, y) = SelIndex Then '原来是这个色,清掉
a(x, y) = 0
Else
a(x, y) = SelIndex '否则给色
End If
End If
End Sub
Private Sub Picture1_Paint()
'当画图区域需要刷新时,重绘一下
Call view '加上这句,就不需要把 Picture1的 AutoRedraw 设为真了
End Sub

程序代码:
Private Sub Form_Load()
Label1(0).BackColor = vbBlack
Label1(1).BackColor = vbRed
Label1(2).BackColor = vbYellow
Label1(3).BackColor = vbBlue
Label2.BackColor = QBColor(0)
DrawState = False '画图状态标志初始化为False
Picture1.AutoRedraw = True
a = Val(Form1.Text1.Text)
b = Val(Form1.Text2.Text)
Picture1.Scale (0, 300)-(300, 0)
For i = 0 To a * 20 Step 20
For j = 0 To b * 20 Step 20
Picture1.Line (i, 0)-(i, j), vbBlack, BF
Picture1.Line (0, j)-(i, j), vbBlack, BF
Next j
Next i
End Sub
Private Sub Label1_Click(Index As Integer)
Label2.BackColor = Label1(Index).BackColor '在标签2显示颜色
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim m As Single
Dim n As Single
ReDim a(0 To m, 0 To n)
Picture1.AutoRedraw = True
If Button = 1 Then
Picture1.AutoRedraw = True
X = X \ 20 + 1
Y = Y \ 20 + 1
X = X * 20
Y = Y * 20
If Label2.BackColor = vbBlack Then
Picture1.Line (X - 20, Y - 20)-(X, Y), vbBlack, BF
ElseIf Label2.BackColor = vbRed Then
Picture1.Line (X - 20, Y - 20)-(X, Y), vbRed, BF
ElseIf Label2.BackColor = vbYellow Then
Picture1.Line (X - 20, Y - 20)-(X, Y), vbYellow, BF
ElseIf Label2.BackColor = vbBlue Then
Picture1.Line (X - 20, Y - 20)-(X, Y), vbBlue, BF
End If
End If
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim m As Single
Dim n As Single
ReDim a(0 To m, 0 To n)
b = Val(Form1.Text2.Text)
X = X \ 20
Y = Y \ 20
Text1.Text = X & " ," & Y
m = X
n = Y
End Sub
这是我自己写的
程序代码:Private Sub Picture1_paint() Dim r As Single Dim e As Single Dim h As Single Dim g As Single Dim d As Single Dim f As Single r = 250 h = 550 d = 2 * r / 3 Picture1.DrawWidth = 13 Picture1.Scale (-1900, 1900)-(1900, -1900) For e = h / 2 To h / 2 + r Step 1 c = Sqr(r ^ 2 - (e - h / 2) ^ 2) Picture1.PSet (c, e) c = -Sqr(r ^ 2 - (e - h / 2) ^ 2) Picture1.PSet (c, e) Next e For g = d / 2 To r Step 1 f = 4 * h * (g - d) ^ 3 / d ^ 3 Picture1.PSet (g, f) Next g For j = -r To -(d / 2) Step 1 i = -((4 * h) / (d ^ 3)) * (j + d) ^ 3 Picture1.PSet (j, i) Next j For y = -(r + h / 2) To -h / 2 Step 1 X = Sqr(r ^ 2 - (y + h / 2) ^ 2) - (r + d / 2) Picture1.PSet (X, y) Next y For b = -(r + h / 2) To -h / 2 Step 1 a = -Sqr(r ^ 2 - (b + h / 2) ^ 2) + r + d / 2 Picture1.PSet (a, b) Next b End Sub