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

相关推荐
小李子呢02112 小时前
前端八股---axios封装
java·前端·javascript
zero15972 小时前
TypeScript 快速实战系列:核心进阶|接口(Interface) + 类型(Type):大模型开发神器
前端·typescript·大模型编程语言
万邦科技Lafite2 小时前
通过淘宝关键词API接口批量获取商品信息指南
java·前端·javascript
天天进步20152 小时前
[前端篇] 桌面端与 AI 的碰撞:Toonflow 基于 Electron 的高效交互实现
前端·人工智能·electron
J超会运2 小时前
OpenEuler24.03 LVS+Keepalived实战指南
linux·服务器·前端
sycmancia2 小时前
Qt——布局管理区(二)
开发语言·前端·qt
勇哥是也2 小时前
前端也能玩 AI:阿里云百炼流式对话开发
前端·人工智能·阿里云
夜影风2 小时前
Prompt Engineering(提示词工程) vs. Agent Skills(智能体技能):从“口头吩咐”到“标准化操作手册”的进化
前端·人工智能·prompt
落魄江湖行2 小时前
基础篇九 Nuxt4 插件系统:扩展 Nuxt 能力
前端·vue.js·typescript·nuxt4