Добрый день! Не пойму вот что. Как сочетаются эти 2 строчки кода:
private GameObject[][] gameField = new GameObject[SIDE][SIDE]; (у нас же конструктор уже из 3х параметров, как возможно создать такой объект и
gameField[y][x] = new GameObject(x, y, isMine); (у нас уже существует каким то образом объект-массив с 2мя параметрами. Как можно еще добавить булевый?
package com.javarush.games.minesweeper;
import com.javarush.engine.cell.*;
public class MinesweeperGame extends Game {
private static final int SIDE = 9;
private GameObject[][] gameField = new GameObject[SIDE][SIDE];
private int countMinesOnField;
@Override
public void initialize() {
setScreenSize(SIDE, SIDE);
createGame();
}
private void createGame() {
for (int y = 0; y < SIDE; y++) {
for (int x = 0; x < SIDE; x++) {
int randomNumber = getRandomNumber(10);
boolean isMine = randomNumber < 1;
if (isMine) {
countMinesOnField++;
}
gameField[y][x] = new GameObject(x, y, isMine);
setCellColor(x, y, Color.ORANGE);
}
}
}
}
Олег
35 уровень
private GameObject[][] gameField
Решен
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
14 марта 2022, 11:54
У тебя gameField - это двумерный массив объектов типа GameObject.
gameField[y][x] - это элемент массива gameField с индексами y и x, один из множества.
Сам класс GameObject должен быть описан в другом файле, и в нём будут поля int x, int y, boolean isMine. Именно их ты заполняешь, создавая объект GameObject.
0
Олег
14 марта 2022, 14:22
Так а куда у нас isMine запоминается (присваивается)? Я думал для хранения чего то подобного нужна мапа. Типа ключ это x, y, а isMine - значение. Ну или наоборот.
0
Олег
14 марта 2022, 14:26
То есть массив класса GameObject я могу создать без оглядки на конструктор? Я объявляю этот класс только для того, чтобы суметь потом уже запихнуть в него конкретные объекты этого класса?
0
hidden #598481
14 марта 2022, 15:17решение
у тебя объект GameObject это и есть объект, который сопоставляет между собой три значения x, y и isMine. Таким образом вместо сложной вложенной коллекции типа мапы мап можно хранить просто список твоих объектов.
А для удобства их дальнейшего отображения из объединяют не в список, а в двумерный массив, чтобы не нужно было каждый раз лезть внутрь объекта, чтобы узнать, какие у него x и y, а определять их сразу по индексам в массиве, это служит как бы дублированием этой информации.
isMine запоминается внутрь каждого из объектов.
То есть массив класса GameObject я могу создать без оглядки на конструктор? Я объявляю этот класс только для того, чтобы суметь потом уже запихнуть в него конкретные объекты этого класса?
Ну не создав самого класса хотя бы в виде пустоготы не сможешь создать и массива элементов этого класса.
Но в целом да, неважно, что там будет в конструкторе этого класса, при создании массива объектов ссылочного типа, ты инициализируешь объекты значением null, а лишь затем создаёшь сами объекты, которыми заполняешь этот массив.
Для примитивов типа boolean массив заполняется значениями false, для остальных примитивов - нулём.
Например
Вместо String можешь подставить любой другой тип, принцип тот же. В твоём случае это GameObject
+3
rubikkubika
14 марта 2022, 18:20
Да. Массив ты создаешь, чтобы потом туда запихнуть объекты, которые создаешь по конструктору.
0
Олег
15 марта 2022, 10:40
Спасибо! Вы отлично объясняете!
0