双色交错棋盘格,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 开始,然后交错。

相关推荐
徐小夕1 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
kyriewen2 小时前
别再乱用useEffect了——你写的10个里有8个不该存在
前端·javascript·react.js
Ivanqhz2 小时前
Rust &‘static str浅析
java·前端·javascript·rust
IT_陈寒3 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱3 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端
zandy10114 小时前
衡石 Agentic BI的ReAct 推理框架在 Agentic BI 中的工程化实践
前端·javascript·react.js
罗超驿4 小时前
JavaEE进阶之路:从Web架构原理到HTML标签全解析
前端·html·web·javaee
西安小哥4 小时前
从前端到AI工程师:一场跨越鸿沟的真实蜕变之旅
前端
Prince4184 小时前
侧边栏收起缩放适配方案
前端
用户7783366132114 小时前
serpbase + Cloudflare R2 边缘持久化实战
前端·人工智能