Создание игры с помощью 2D-массива - как изменить цвет на части массива - PullRequest
1 голос
/ 11 ноября 2011

Я все еще новичок в Java, и я пытаюсь создать игру. Я только что создал доску 20 х 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);
        }
        }
  }

1 Ответ

1 голос
/ 11 ноября 2011

То есть вы хотите иметь логику в зависимости от того, какая строка или столбец?Давайте попробуем это структурированным образом.

Помните, что массивы индексируются 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);
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...