如何显示8x8棋盘?

yizd12fk  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(399)

我想显示一个8x8的棋盘,但对于下面的代码,我只能得到交替颜色的水平线。

Color color = Color.gray;
for (int row = 0; row < 8; row++)
{
    for (int col = 0; col < 8; col++)
    {
        if (color == Color.gray)
        {
            color = Color.lightGray;
        }
        else
        {
            color = Color.gray;
        }
        g.setColor(color);
        g.fillRect(row*80, col*80, 80, 80);
    }
}

3okqufwl

3okqufwl1#

您对每条垂直线使用相同的图案(意味着从相同的颜色和切换开始)。

BBBBBBBB
WWWWWWWW
BBBBBBBB
WWWWWWWW
BBBBBBBB
WWWWWWWW
BBBBBBBB
WWWWWWWW

但是您需要切换每一条垂直线的起点,以便两条连续垂直线的起点不相同。

BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB

所以在你的代码中也需要改变每一行的颜色,因为每一行结束后的颜色和下一行开始时的颜色是一样的。

for (int row = 0; row < 8; row++) {
      for (int col = 0; col < 8; col++) {
        if (color == Color.gray) {
          color = Color.lightGray;
        } else {
          color = Color.gray;
        }
        g2.setColor(color);
        g2.fillRect(row * 80, col * 80, 80, 80);
      }
      if (color == Color.gray) {
        color = Color.lightGray;
      } else {
        color = Color.gray;
      }
    }
wyyhbhjk

wyyhbhjk2#

一个典型的方法是设置 Color 基于列索引的值。也就是说,如果索引是偶数,则使用一个 Color ,如果是奇怪的,你可以用另一个 Color 基于列。

Color color = col % 2 == 0 ? Color.GRAY : Color.LIGHT_GRAY;
g.setColor(color);

但是,您将遇到相同的问题,因为这将只是交替的列值。当您开始一个新行时,您将得到与上面列相同的颜色,这样您就可以看到相同颜色的垂直列。
因此,解决方案是在确定颜色时同时使用行/列索引:

Color color = (row + col) % 2 == 0 ? Color.GRAY : Color.LIGHT_GRAY;
g.setColor(color);

另外,请注意,应该使用大写颜色变量,因为它们遵循命名“static final”变量的约定。小写变量的存在只是为了向后兼容,可以随时删除。

eanckbw9

eanckbw93#

你创建你的董事会列明智的,每列去垂直。
切换每个字段的颜色,没有错。
在列的末尾,您得到的颜色与列的开头不同,这是正确的。
然后切换颜色并开始下一列,这意味着您使用与前一列相同的颜色开始下一列。i、 你总是在同一行中使用相同的颜色。
若要解决此问题,请在每列之后再次切换,或不切换每列的第一个字段。

相关问题