繁体   English   中英

使用图形库的棋盘格

[英]Checkerboard using graphics library

我正在尝试创建具有交替颜色的棋盘格。 我正在使用矩形的向量,并为每个单独的矩形着色。

for (int i=0; i<8; ++i)
    for (int j=0; j<8; ++j)
    {
        grid.push_back(new Rectangle(Point(i*50,j*50),50,50));
        if (i%2==1)
            grid[grid.size()-1].set_fill_color(Color(lemon_chiffon));
        else if (j%2==1)
            grid[grid.size()-1].set_fill_color(Color(moss_green));

        if(j%2==1)
            grid[grid.size()-1].set_fill_color(Color(moss_green));
        else if (i%2==0)
            grid[grid.size()-1].set_fill_color(Color(lemon_chiffon));

我尝试使用不同的值来确定什么颜色,而我最接近棋盘的颜色是this 我知道这是一个数学问题,希望有人能帮助我了解我要去哪里。

你真的很亲密。 问题是您的if语句不太正确。 有一种稍微简单的方法可以执行您想要的操作。 您想知道您使用的行和列是偶数还是奇数。 当它们相同时,您想为一种颜色着色,而当它们不同时,您想为另一种颜色着色。 我会做这样的事情:

for (i = 0; i < 8; i++)
{
    for (j = 0; j < 8; j++)
    {
        bool rowIsEven = ((j % 2) == 0); // Is the row an even numbered row?
        bool colIsEven = ((i % 2) == 0); // Is the column an even one?
        grid.push_back(new Rectangle(Point(i*50,j*50),50,50));
        if (rowIsEven == colIsEven)
        {
            grid[grid.size()-1].set_fill_color(Color(lemon_chiffon));
        }
        else
        {
            grid[grid.size()-1].set_fill_color(Color(moss_green));
        }
    }
}

对于初学者来说,使用方括号和空格可以使您的代码对其他用户更具可读性,如果您没有其他改变网格的方式,那么我认为这将解决您的问题:

for (int i=0; i<8; ++i) {
    for (int j=0; j<8; ++j) {
        Rectangle gridSquare = new Rectangle(Point(i*50,j*50),50,50);
        if(((i % 2) == 1) == ((j % 2) == 1)) {
            gridSquare.set_fill_color(Color(moss_green));
        } else {
            gridSquare.set_fill_color(Color(lemon_chiffon));
        }
        grid.push_back(gridSquare);
    }
}

在执行方格图案时,需要为4种情况编写代码

  1. (((i%2)== 1)&&((j%2)== 1)//都是奇数
  2. ((i%2)== 1)&&((j%2)== 0)//奇数行,偶数列
  3. ((i%2)== 0)&&((j%2)== 1)//偶数行,奇数列
  4. (((i%2)== 0)&&((j%2)== 0)//均为偶数

现在,您出了问题的地方是您不必同时检查“行列”。 您当前的逻辑是:

  • 是奇怪的行
  • 其他是奇怪的专栏
  • 是奇数列
  • 是偶数列

它需要

  • 是奇数行和奇数列
  • 其他是奇数行和偶数列
  • 其他是偶数行和奇数列
  • 其他是偶数行和偶数列

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM