填颜色间隔 是有效的,解析一下第1个过程的原理
vbnet
Sub 画双色(ByVal X As Long, ByVal Y As Long, ByVal 宽度 As Long, ByVal 高度 As Long, ByVal VB颜色1 As Long, ByVal VB颜色2 As Long)
填颜色间隔 X, Y, 宽度, 高度, VB颜色1, 2, 2
填颜色间隔 X + 1, Y, 宽度 - 2, 高度, VB颜色2, 2, 2
填颜色间隔 X, Y + 1, 宽度, 高度 - 2, VB颜色2, 2, 2
填颜色间隔 X + 1, Y + 1, 宽度 - 2, 高度 - 2, VB颜色1, 2, 2
End Sub
Sub 填颜色间隔(ByVal X As Long, ByVal Y As Long, ByVal 宽度 As Long, ByVal 高度 As Long _
, ByVal VB颜色 As Long, Optional ByVal 水平步进 As Long = 1, Optional ByVal 竖直步进 As Long = 1)
极简原理解析(无多余代码)
你这个 画双色 过程 = 用 4 次间隔填色,拼出标准的【双色棋盘格】 核心依赖:填颜色间隔 的 水平步进=2,竖直步进=2(每 2 个像素画 1 个)
逐行拆解(你写的 4 行调用)
-
第一行
填颜色间隔 X,Y,宽度,高度,颜色1,2,2→ 铺满整个矩形 ,每隔 1 格画 1 个 颜色 1(棋盘格的基础点阵) -
第二行
填颜色间隔 X+1,Y,宽度-2,高度,颜色2,2,2→ X 右移 1 格 ,宽度缩 2,画 颜色 2(右侧交错点阵) -
第三行
填颜色间隔 X,Y+1,宽度,高度-2,颜色2,2,2→ Y 下移 1 格 ,高度缩 2,画 颜色 2(下侧交错点阵) -
第四行
填颜色间隔 X+1,Y+1,宽度-2,高度-2,颜色1,2,2→ X+1、Y+1 ,宽高都缩 2,画回 颜色 1(中心交错点阵)
最终效果
组合后形成:
plaintext
颜色1 颜色2 颜色1 颜色2
颜色2 颜色1 颜色2 颜色1
颜色1 颜色2 颜色1 颜色2
颜色2 颜色1 颜色2 颜色1
标准双色交错棋盘格,就是你看到的「混色假象」的来源
双色棋盘格最标准、最简单的画法就是:一行循环直接画完,每行开头颜色交替,整屏一次性画完。
我给你用最简单、最容易理解、最通用的方式讲清楚,你一看就会。
一、棋盘格画法核心规则(就 3 条)
假设两种颜色:颜色 A、颜色 B 格子大小:32px(随便你设)
- 第 1 行开头用 颜色 A画一格 A → 一格 B → 一格 A → 一格 B......
- 第 2 行开头用 颜色 B画一格 B → 一格 A → 一格 B → 一格 A......
- 第 3 行又回到 颜色 A 第 4 行 B......行号奇数 = A 开头,偶数 = B 开头
就是你说的:第二行开始用颜色 2 开始,然后交错。
二、最简洁的实现公式(万能公式)
判断当前格子颜色,只需要算一个:
plaintext
(行号 + 列号) % 2 == 0 → 颜色1
否则 → 颜色2
这一条公式就能画出完美棋盘格,不需要任何复杂逻辑。
三、纯 VB6 代码(一行循环画完整个棋盘)
我给你写最精简、最标准的 VB6 画法,直接复制就能用:
vb
Private Sub DrawCheckerBoard()
Dim x As Integer, y As Integer
Dim cellSize As Integer
Dim color1 As Long, color2 As Long
' 格子大小 & 颜色
cellSize = 32
color1 = vbWhite
color2 = vbLightGray
' 双层循环画满屏幕(或Picture框)
For y = 0 To ScaleHeight Step cellSize
For x = 0 To ScaleWidth Step cellSize
' 核心公式:奇偶判断 → 自动交错
If (x \ cellSize + y \ cellSize) Mod 2 = 0 Then
Line (x, y)-Step(cellSize, cellSize), color1, BF
Else
Line (x, y)-Step(cellSize, cellSize), color2, BF
End If
Next x
Next y
End Sub
四、这个代码是怎么工作的?(超简单)
x \ cellSize= 当前是第几列y \ cellSize= 当前是第几行(列+行) Mod 2- =0 → 颜色 1
- =1 → 颜色 2
自动形成:
plaintext
A B A B A B
B A B A B A
A B A B A B
B A B A B A
五、你最关心的问题:
能不能一个循环直接画完?
能!但没必要,双层循环更清晰、更快、更好维护。
如果你非要单循环,原理一样:
plaintext
总索引 i
行 = i \ 列数
列 = i mod 列数
颜色 = (行+列) mod 2
本质还是同一个公式。
六、最终总结(你记住这一句就够)
棋盘格 = (行号 + 列号) 奇偶判断,奇数行颜色 1 开头,偶数行颜色 2 开头。
你一开始理解的完全正确:第二行就是用颜色 2 开始,然后交错。