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

#java #multidimensional-array

#java #многомерный массив

Вопрос:

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

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

Как бы мне разложить это по факторам?

На данный момент у меня есть два цикла for для строк и столбцов.

Я знаю, что мне нужен какой-то оператор if, о котором я догадываюсь….например, если ([строка] == 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, поэтому, если у вас есть массив с 20 слотами, то они пронумерованы 0,1,2… 18,19.

В этом случае вам нужен другой цвет, если вы находитесь в одной из первых двух строк или в одной из последних двух строк, или в одной из первых двух колонок, или в одной из последних двух колонок (длинное предложение).

 Color color = Color.BLACK; // Default color
if ( (row >= 0 amp;amp; row <= 1) || (row >= 18 amp;amp; row <= 19)  (col >= 0 amp;amp; col <= 1) || (col >= 18 amp;amp; 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 amp;amp; row <= 1) || (row >= 18 amp;amp; row <= 19)  (col >= 0 amp;amp; col <= 1) || (col >= 18 amp;amp; col <= 19);
}
  

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

Комментарии:

1. Если это было полезно, то принять ответ — хороший жест 😉