Я создаю простой сканер подземелий для финального проекта APCS, основанный на графическом интерфейсе классической программы AP gridworld. Я пытаюсь создать каменные стены, которые будут рандомизированы при запуске программы. Для этого я расширил класс рок. Когда я запускаю бегун, кажется, что код компилируется правильно, но графический интерфейс не отображается (хотя на моем доке появляется значок java).
Если вам это нужно, вот код gridworld:
https://apcentral.collegeboard.org/courses/ap-computer-science-a/classroom-resources/gridworld-case-study
Я на 100% уверен, что проблема связана с моим классом RockWalls, потому что драйвер работает нормально, без добавления стены. Возможно, проблема заключается в том, что я игнорирую местоположение из метода .add () объекта ActorWorld (размещение рандомизировано в конструкторе RockWalls).
Мой текущий тестовый драйвер
import info.gridworld.actor.ActorWorld;
import info.gridworld.actor.Rock;
import info.gridworld.grid.Location;
import java.util.ArrayList;
public class GameRunner
{
public static void main(String[] args)
{
ActorWorld world = new ActorWorld();
world.add(new Location(5, 5), new RockWalls(3, world.getGrid()));
world.show();
}
}
Класс RockWalls
import info.gridworld.actor.Rock;
import info.gridworld.grid.Location;
import info.gridworld.grid.Grid;
public class RockWalls extends Rock {
RockWalls(int numWalls, Grid gameGrid) {
for (int i = 0; i < numWalls; i++) {
int length = (int) (Math.random() * 5) + 1;
int startX = (int) (Math.random() * 10) + 1;
int startY = (int) (Math.random() * 10) + 1;
boolean isVertical = false;
if (Math.random() > .5) {
isVertical = true;
}
for (int j = 0; j < length && j < 10 && j >= 0; i++) {
if (isVertical == true && j < 9 && j <= 1
&& gameGrid.get(new Location(startX + j, startY)) == null
&& gameGrid.get(new Location(startX - j, startY)) == null) {
gameGrid.put(new Location(startX + j, startY), new Rock());
gameGrid.put(new Location(startX - j, startY), new Rock());
} else if (isVertical == false && j < 9 && j <= 1
&& gameGrid.get(new Location(startX, startY + j)) == null
&& gameGrid.get(new Location(startX, startY - j)) == null) {
gameGrid.put(new Location(startX, startY + j), new Rock());
gameGrid.put(new Location(startX, startY - j), new Rock());
} else {
i--;
}
}
}
}
}