You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术咨询:为何这段C#代码无法生成棋盘格图案?

问题分析与修正方案

你的这段代码无法生成棋盘格,核心问题出在颜色切换的逻辑错误,另外还有几个小细节需要调整,我来逐一拆解:

1. 颜色切换逻辑的核心问题

当前代码里,你每画一个像素就切换一次颜色,这会导致:

  • 第一行的颜色顺序是:黑→白→黑→白...
  • 第二行的第一个像素会因为第一行最后一个像素是白,所以切换成黑,最终第二行的顺序也是黑→白→黑→白...
  • 最终画出来的是竖条纹,而不是棋盘格。

棋盘格的正确逻辑应该是:每行的起始颜色和上一行相反,或者更简单的判断方式——根据(currentX + currentY)的奇偶性来选择颜色:当和为偶数时用一种颜色,奇数时用另一种。

2. 其他需要修正的小问题

  • 代码里的bitmapHeight和bitmapWidth没有定义,你应该直接使用Bitmap本身的Height和Width属性,或者直接写8(因为你创建的是8x8的图)。
  • 使用do-while循环在这里没必要,for循环会让逻辑更清晰易读。

修正后的代码

// 直接创建Bitmap并赋值给变量,避免类型转换的麻烦
Bitmap bmp = new Bitmap(8, 8);
pbImage.Image = bmp;

for (int currentX = 0; currentX < bmp.Width; currentX++)
{
    for (int currentY = 0; currentY < bmp.Height; currentY++)
    {
        // 根据x+y的奇偶性判断颜色,生成棋盘格
        Color color = (currentX + currentY) % 2 == 0 ? Color.Black : Color.White;
        bmp.SetPixel(currentX, currentY, color);
    }
}

pbImage.Refresh();

逻辑解释

  • 对于每个像素(currentX, currentY),当currentX + currentY是偶数时,我们用黑色;奇数时用白色。
  • 这样每一行的起始颜色都会和上一行相反:比如第一行x=0时,y从0到7,颜色是黑、白、黑...;第二行x=1时,y从0到7,颜色是白、黑、白...,完美符合棋盘格的样式。

内容的提问来源于stack exchange,提问作者user2257918

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:34:29