Мой код, кажется, компилируется правильно, но GUI не появляется (да, GUI был разработан правильно) - PullRequest
0 голосов
/ 02 июня 2019

Я создаю простой сканер подземелий для финального проекта 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--;
                }
            }
        }
    }
}

1 Ответ

1 голос
/ 02 июня 2019

Во внутреннем цикле for вы увеличиваете переменную i вместо j, что приводит к бесконечному циклу, потому что ваш j никогда не изменится.

Кстати, "j <9 && j <= 1" довольнобесполезно. </p>

у.е. лукас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...