Я пытался запустить ваш проект в своей среде, но, к сожалению, я не смог воспроизвести вашу проблему.
Однако я столкнулся с исключением IndexOutOfBound
в методе generateMaze. Решая эту проблему, я понял, что в методе initBoudaries
есть проблема.
Действительно, когда вы устанавливаете логическое значение hasBeenVisited
в true, вы не используете правильную переменную в предложении IF. Вот версия, которую я попробовал вместо:
private void initBoundries()
{
// Initialize the border cells as visited so we don't go out of bounds
for (int i = 0; i < this.xSize; i++)
{
for (int j = 0; j < ySize; j++)
{
if (i == 0 || j == 0 || i == xSize - 1 || j == ySize - 1)
cellData[i][j].hasBeenVisited = true;
}
}
}
Теперь о emptyStackException
, я думаю, что если этот стек пуст, это означает, что больше нет ячейки для обработки (как вы упоминали в своем комментарии), и программа должна завершиться. Если я прав, просто убедитесь, что ваш стек пуст, прежде чем вызывать метод pop()
для него следующим образом:
// There are no unvisited neighbors
if (!cellStack.isEmpty()) {
tempCell = cellStack.pop();
generateMaze(tempCell.xPos, tempCell.yPos);
}
Надеюсь, это поможет.