双色交错棋盘格,vb6/vb.net ,c#

填颜色间隔 是有效的,解析一下第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 行调用)

  1. 第一行 填颜色间隔 X,Y,宽度,高度,颜色1,2,2→ 铺满整个矩形 ,每隔 1 格画 1 个 颜色 1(棋盘格的基础点阵)

  2. 第二行 填颜色间隔 X+1,Y,宽度-2,高度,颜色2,2,2X 右移 1 格 ,宽度缩 2,画 颜色 2(右侧交错点阵)

  3. 第三行 填颜色间隔 X,Y+1,宽度,高度-2,颜色2,2,2Y 下移 1 格 ,高度缩 2,画 颜色 2(下侧交错点阵)

  4. 第四行 填颜色间隔 X+1,Y+1,宽度-2,高度-2,颜色1,2,2X+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. 第 1 行开头用 颜色 A画一格 A → 一格 B → 一格 A → 一格 B......
  2. 第 2 行开头用 颜色 B画一格 B → 一格 A → 一格 B → 一格 A......
  3. 第 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 开始,然后交错。

相关推荐
小爷毛毛_卓寿杰11 小时前
给 Embedding 模型也加一块“游乐场“—— Xinference 是怎么把 vector 变成肉眼可见的体验的
前端
忆江南11 小时前
iOS 性能优化全面详解
前端
lichenyang45311 小时前
HAP / HAR / HSP 到底啥区别?顺带把「导入」那点疑惑讲清楚
前端
基德爆肝c语言11 小时前
MySQL表的操作
前端·数据库·mysql
秃头网友小李12 小时前
前端难点:Element Plus 样式覆盖 —— :deep()、CSS 变量与滚动状态类名
前端·vue.js
the_answer12 小时前
XSS 与 CSRF 深度解析
前端
打呵欠的猫12 小时前
AI 生成的代码你敢直接上线吗?我总结出 3 条铁律
前端·ai编程
极速蜗牛12 小时前
我在 Taro 小程序项目里实践的 API First + AI 编程方式
前端·人工智能·后端
锋行天下12 小时前
数据库安全并发控制详解:乐观锁 vs 悲观锁 vs 原子操作
前端·数据库·后端
搏博13 小时前
多传感器融合基础之一图像空间(Image Space)全面解析
图像处理·python·图像空间·融合感知