while (worldY != WorldHeight) { //3rd pass (Filling in rough terrain)
while (worldX != WorldWidth) {
if (worldY > 0) {
if (world[worldX, worldY-1] == 1) { world[worldX, worldY] = 1; }
if (worldX > 0) {
if (world[worldX-1, worldY-1] == 1) { world[worldX, worldY] = 1; }
}
if (worldX < WorldWidth) {
if (world[worldX+1, worldY-1] == 1) { world[worldX, worldY] = 1; }
}
}
if (worldX > 0) {
if (world[worldX-1, worldY] == 1) { world[worldX, worldY] = 1; }
}
if (worldX < WorldWidth) {
if (world[worldX+1, worldY] == 1) { world[worldX, worldY] = 1; }
}
worldX++;
}
worldX = 0;
worldY++;
}
Некоторое время я искал это, спрашивал об этом моих друзей и интернет, но почему каждый раз, когда он достигает здесь, он игнорирует мои первоначальные заявления if и подходит к тем, кого я не хочу, давая мне System.IndexOutOfRangeException
: Индекс находился за пределами массива. даже при том, что я помещаю код, который выглядит так, как будто это должно помешать этому.
какие-либо предложения? или альтернативный код?
Если подумать, что проблема в логике выглядит так:
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)
. Хотя оба работают в этом случае, если позже вы решили увеличить индекс на два по какой-то причине, вы можете попасть в бесконечный цикл, если только индекс просто пропустил точное значение длины.
if
s просто сделать его все более запутанной