双色交错棋盘格,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 天前
从零开始!VMware安装Fedora Workstation 44桌面系统完整教程
前端
小码哥_常1 天前
安卓黑科技:实现多平台商品详情页一键跳转APP
前端
killerbasd1 天前
还是迷茫 5.3
前端·react.js·前端框架
不会敲代码11 天前
TCP/IP 与前端性能:从数据包到首次渲染的底层逻辑
前端·tcp/ip
kyriewen1 天前
奥特曼借GPT-5.5干杯,而你的Copilot正按Token收钱
前端·github·openai
AC赳赳老秦1 天前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
kyriewen1 天前
代码写成一锅粥?3个设计模式让你的项目“起死回生”
前端·javascript·设计模式
千寻girling1 天前
《 Git 详细教程 》
前端·后端·面试
之歆1 天前
DAY08_CSS浮动与行内块布局实战指南(下)
前端·css
yqcoder1 天前
CSS Position 全解析:5 种定位模式详解
前端·css