通过2D阵列构建游戏 - 如何更改阵列部分的颜色?

时间:2011-11-11 06:24:03

标签: java multidimensional-array

我仍然是java的初学者,我正在尝试创建一个游戏。我刚刚创建了一个20 x 20的板,我将其添加到2D正方形阵列中。但是,我对某些语法感到困惑....我仍然很难写出适当的条件和算法,尤其是。

所以,我想做的是用黑色填充8X8内部正方形,然后在两边用2列和行划出不同颜色的红色。

我该如何解决这个问题?

到目前为止,我有两个用于行和列的for循环。

我知道我需要某种if语句我猜...就像if([row] == 1,2,19,20(最顶行和最底行)......同样适用于列

_gameSquares = new Square[GameConstants._numCol][GameConstants._numRow]; 
    for (int col=0; col<GameConstants.numCol; col++) {
        for (int row=0; row<GameConstants.numRow; row++) {
            Square square;
        //  if (row == 1) {
        //  square = new Square(this, java.awt.Color.RED);
        //  }
        //  else
            square = new Square(this, java.awt.Color.BLACK);
            tile.setLocation(col*GameConstants.squareWidth,row*GameConstants.squareHeight);
        _gameSquares[col][row] = square;

        }
    }

        public void paintComponent(java.awt.Graphics g) {
    super.paintComponent(g); 
    java.awt.Graphics2D brush = (java.awt.Graphics2D) g;
    for (int col=0; col<GameConstants.numCol; col++) {
        for (int row=0; row<GameConstants.numRow; row++) {
            _gameSquares[col][row].paint(brush);
        }
        }
  }

1 个答案:

答案 0 :(得分:1)

所以你想根据哪一行或哪一列得到逻辑?让我们以结构化的方式尝试。

请记住,数组是0索引的,所以如果你有一个包含20个插槽的数组,那么它们的编号为0,1,2 ...... 18,19。

在这种情况下,如果您处于前两行或最后两行中的一行或前两列中的一列或最后两列中的一列(长句),则需要不同的颜色。

Color color = Color.BLACK; // Default color
if ( (row >= 0 && row <= 1) || (row >= 18 && row <= 19)  (col >= 0 && col <= 1) || (col >= 18 && col <= 19)) {
    color = Color.RED;
}
square = new Square(...

但为了维护这一点,你应该把逻辑分解成一个单独的方法来获得更可读的代码,这是一个例子:

Color color = Color.BLACK; // Default color
if ( isBorder(col, row)) {
    color = Color.RED;
}
...

private boolean isBorder(int col, int row) {
  return (row >= 0 && row <= 1) || (row >= 18 && row <= 19)  (col >= 0 && col <= 1) || (col >= 18 && col <= 19);
}

当然这可以进一步清理,但这是一个开始,现在更容易阅读你的电路板的创建逻辑。