Создание игры через 2D-массив — как изменить цвет части массива?

Я все еще новичок в java, и я пытаюсь создать игру. Я только что создал доску 20 x 20, которую добавил к двумерному массиву квадратов. Но я запутался в синтаксисе... Мне все еще трудно писать правильные условия и алгоритмы, особенно.

Итак, что я хочу сделать, это заполнить внутренние квадраты 8X8 черным цветом, а затем внешние границы двух столбцов и строк с обеих сторон красным цветом.

Как я могу это учесть?

Пока у меня есть два цикла 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);
        }
        }
  }

person Susie    schedule 11.11.2011    source источник


Ответы (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);
}

Конечно, это можно было бы еще почистить, но это только начало, и теперь легче читать логику создания вашей доски.

person Roger Lindsjö    schedule 11.11.2011
comment
Благодарю вас! Это было очень полезно! - person Susie; 02.12.2011
comment
Если это было полезно, это хороший жест, чтобы принять ответ ;-) - person Roger Lindsjö; 03.12.2011