#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. Если это было полезно, то принять ответ — хороший жест 😉