Если вы думаете, что проблема в строках с такой логикой:
if (worldX < WorldWidth) {
if (world[worldX+1, worldY] == 1) { world[worldX, worldY] = 1; }
}
Здесь вы проверяете, меньше ли worldX
WorldWidth
, а затем используете worldX + 1
.Но это не безопасно.Рассмотрим случай, когда WorldWidth
равен 6, а worldX
равен 5. Тогда проверка проходит нормально, но worldX + 1
равна 6 и приводит к IndexOutOfBoundsException
.
Правильный способ справиться с этимтогда будет:
if ((worldX + 1) < WorldWidth) {
if (world[worldX+1, worldY] == 1) { world[worldX, worldY] = 1; }
}
Одна и та же проблема присутствует дважды в вашем коде, поэтому, как только вы исправите эти случаи, она должна работать как ожидалось.
Также в качестве предложения я бы предложилиспользуя while (index < length)
вместо while (index != length)
.Несмотря на то, что оба работают в этом случае, если позже вы по какой-то причине решили увеличить индекс на два, вы можете попасть в бесконечный цикл, если индекс просто пропустил точное значение длины.