Добрый вечер и веселое рождество!2D Array - неправильное размещение "Wall"?
Я хотел создать свой собственный подземелье-генератор. Поэтому я решил сначала появиться в пустых комнатах, разместив стены на одном и том же шаге.
public void generateRoom(byte[][] dungeon){
if(roomCornerDownLeft.x + roomWidth < dungeon[0].length && roomCornerDownLeft.y + roomHeigth < dungeon.length){
setRoomFloor(dungeon);
setWalls(dungeon);
}
}
public void setRoomFloor(byte[][] dungeon){
origin = new Vector2(roomCornerDownLeft.x + roomWidth/2, roomCornerDownLeft.y + roomHeigth/2);
roomHeigth += 1; // +1 because of the WallBorders. So the Interior of the room is totally 5 tiles height
roomWidth += 1; // +1 because of the WallBorders. So the Interior of the room is totally 5 tiles width
roomCornerUpRight = new Vector2(roomCornerDownLeft.x + roomWidth, roomCornerDownLeft.y + roomHeigth);
for(int yPos = (int) roomCornerDownLeft.y; yPos <= roomCornerUpRight.y; yPos++){
for(int xPos = (int) roomCornerDownLeft.x; xPos <= roomCornerUpRight.x ; xPos++){
dungeon[yPos][xPos] = 1;
}
}
}
public void setWalls(byte[][] dungeon){
// Vertical walls
for (int i = (int) roomCornerDownLeft.x; i <= roomCornerDownLeft.x + roomHeigth; i++) {
dungeon[i][(int) roomCornerDownLeft.y] = 2; // North wall
dungeon[i][(int) roomCornerDownLeft.y + (roomWidth)] = 2; // South wall
}
// horizontal walls
for (int y = (int) roomCornerDownLeft.y; y <= roomCornerDownLeft.y + roomWidth; y++) {
dungeon[(int) roomCornerDownLeft.x][y] = 2; // North wall
dungeon[(int) (roomCornerDownLeft.x + (roomHeigth))][y] = 2; // South wall
}
}
Но я подошел к некоторым странным проблемам с ним. Размещение «пол комнаты» работает без проблем. Позиция и размер просто верны. Но когда я пытаюсь построить вокруг нее стену, она работает только иногда. Вот пример:
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000002222222000000000000000000
00000000000000000000000002111112000000000000000000
00000000000000000000000002111112000000000000000000
00000000000000000000000002111112000000000000000000
00000000000000000000000002111112000000000000000000
00000000000000000000000002111112000000000000000000
00000000000000000000000002222222000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
1 = 2 этаж = Стена
Xposition = 25; Yposition = 25;
ширина = 5; высота = 5;
Все нормально работает? Так что теперь давайте попробуем это с некоторыми другими значениями:
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000001111111111110000000000000
00000000000000000000000001111111111110000000000000
00000000000000000000000001111111111110000000000000
00000000000000000000000001111111111110000000000000
00000000000000000000000001111111111110000000000000
00000000000000000000222222222222111110000000000000
00000000000000000000200001111112111110000000000000
00000000000000000000200000000002000000000000000000
00000000000000000000200000000002000000000000000000
00000000000000000000200000000002000000000000000000
00000000000000000000200000000002000000000000000000
00000000000000000000222222222222000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
1 = 2 этаж = Стена
Xposition = 20; Yposition = 25;
ширина = 10; высота = 5;
Как вы можете видеть, выравнивание справа. Стена находится на совершенно другом месте, чем сама комната. Странная часть состоит в том, что это происходит только тогда, когда значения (xpos, ypos, width и height) отличаются друг от друга.
--- --- ОБНОВЛЕНИЕ
Когда я инвертировать оси х и у я получаю это:
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000222222222222000000000000000000
00000000000000000000211111100002000000000000000000
00000000000000000000211111100002000000000000000000
00000000000000000000211111100002000000000000000000
00000000000000000000211111100002000000000000000000
00000000000000000000211111100002000000000000000000
00000000000000000000222222222222000000000000000000
00000000000000000000111111100000000000000000000000
00000000000000000000111111100000000000000000000000
00000000000000000000111111100000000000000000000000
00000000000000000000111111100000000000000000000000
00000000000000000000111111100000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
В Coords и размеры такие же, как в приведенном выше примере.
У меня проблема в моем коде? Обычно стена должна быть вокруг комнаты ...
Ах, намек: Вы хотите, чтобы тратить наши время, чтобы помочь вам. Так не было бы справедливо, если бы вы потратили эти 2 дополнительных минуты, которые требуется, чтобы правильно форматировать/отступать весь ваш код? И, вероятно, было бы легче читать/понимать, может ли ваш пример использовать 5x5 строк/столбцов; вместо 20x100 или около того? – GhostCat