棋盘使用图形库

时间:2013-03-28 03:26:02

标签: c++ graphics

我正在尝试创建一个交替颜色的棋盘格。我正在使用矩形矢量并为每个矩形着色。

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。我知道这是一个数学问题,希望有人能帮助我理解我哪里出错了。

2 个答案:

答案 0 :(得分:0)

你真的很亲密。问题是您的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));
        }
    }
}

答案 1 :(得分:0)

对于初学者使用括号和空格,它使你的代码对其他人更具可读性,我认为如果你没有改变网格,这将解决你的问题:

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)&amp;&amp; ((j%2)== 1)//两个奇数
  2. ((i%2)== 1)&amp;&amp; ((j%2)== 0)//奇数行,偶数列
  3. ((i%2)== 0)&amp;&amp; ((j%2)== 1)//偶数行,奇数列
  4. ((i%2)== 0)&amp;&amp; ((j%2)== 0)//两者都是
  5. 现在你出错的地方是你没有同时检查Row AND 列。您当前的逻辑是:

    • 是Odd Row
    • Else Is Odd Column
    • 是奇数列
    • Is Even Column

    它需要

    • 奇数行和奇数列
    • Else Is Odd Row AND Even Column
    • Else Is Even Row and Odd Column
    • Else is Even Row AND Even Column