Я работаю над написанием генератора лабиринта. У меня есть «Cell» класс, который выглядит следующим образом:Как я могу очистить этот метод, который я написал на Java?
public class Cell {
public boolean northWall;
public boolean southWall;
public boolean eastWall;
public boolean westWall;
public Cell north;
public Cell south;
public Cell east;
public Cell west;
public boolean visited;
public Cell() {
northWall = true;
southWall = true;
eastWall = true;
westWall = true;
visited = false;
}
public boolean hasUnvisitedNeighbors() {
return ((north != null && !north.Visited)
|| (south != null && !south.Visited)
|| (east != null && !east.Visited) || (west != null && !west.Visited));
}
public Cell removeRandomWall() {
List<Cell> unvisitedNeighbors = new ArrayList<Cell>();
if (north != null && !north.Visited)
unvisitedNeighbors.add(north);
if (south != null && !south.Visited)
unvisitedNeighbors.add(south);
if (west != null && !west.Visited)
unvisitedNeighbors.add(west);
if (east != null && !east.Visited)
unvisitedNeighbors.add(east);
if (unvisitedNeighbors.size() == 0) {
return null;
} else {
Random randGen = new Random();
Cell neighbor = unvisitedNeighbors.get(randGen
.nextInt((unvisitedNeighbors.size())));
if (neighbor == north) {
northWall = false;
north.southWall = false;
return north;
} else if (neighbor == south) {
southWall = false;
south.northWall = false;
return south;
} else if (neighbor == west) {
westWall = false;
west.eastWall = false;
return west;
} else if (neighbor == east) {
eastWall = false;
east.westWall = false;
return east;
}
return null;
}
}
}
Лабиринт в моей программе является просто 2d одномерный массив ячеек. После создания массива я вручную вхожу и устанавливаю все ссылки на соседние ячейки (север, юг, восток, запад).
Что я пытаюсь убрать, это удалитьRandomWall(). Предполагается случайным образом выбирать соседнюю ячейку, для которой установлен флаг посещения, равный false, и удалять стену как в этой ячейке, так и в соседней соте, которая их связывает.
Таким образом, ему необходимо рассмотреть все соседние ячейки, которые не были посещены, случайным образом выбрать один, а затем установить в этой ячейке стену, а смежную - на ложную, так что теперь между ними есть путь. Я попытался сделать это выше, но это кажется очень неуклюжим.
Может ли кто-нибудь помочь мне?
Нет ответа на ваш вопрос, но полезный совет (IMO): используйте условные обозначения Java-кода! Таким образом, другим пользователям, знакомым с Java, будет легче помочь вам. Имена классов начинаются с заглавной буквы, имена переменных - в нижнем регистре. Дополнительная информация: http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html –
@Bart, я вижу. По какой-то причине я думал, что публичные участники начали с шапки. Я буду придерживаться конвенций. – Scorcher84
Теперь я попытался переключить его на java-соглашения. – Scorcher84