2016-12-23 4 views
-1

Добрый вечер и веселое рождество!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 и размеры такие же, как в приведенном выше примере.

У меня проблема в моем коде? Обычно стена должна быть вокруг комнаты ...

+0

Ах, намек: Вы хотите, чтобы тратить наши время, чтобы помочь вам. Так не было бы справедливо, если бы вы потратили эти 2 дополнительных минуты, которые требуется, чтобы правильно форматировать/отступать весь ваш код? И, вероятно, было бы легче читать/понимать, может ли ваш пример использовать 5x5 строк/столбцов; вместо 20x100 или около того? – GhostCat

ответ

0

я, наконец, получил решение, моя стена Algorythm была сломана, я написал новый:

// Vertical Walls 
    for(int y = (int) roomCornerDownLeft.y; y <= roomCornerDownLeft.y + roomHeigth; y++){ 

     dungeon[y][ (int) roomCornerDownLeft.x ] = 2; 

     dungeon[y][ (int) roomCornerDownLeft.x + roomWidth ] = 2; 

    } 

    // Horizontal Walls 
    for(int x = (int) roomCornerDownLeft.x; x <= roomCornerDownLeft.x + roomWidth; x++){ 

     dungeon[ (int) roomCornerDownLeft.y ][ x ] = 2; 

     dungeon[ (int) roomCornerDownLeft.y + roomHeigth][ x ] = 2; 

    } 
1

Во внутренней петле вашего метода setRoomFloor вы переворачиваете положение по оси x и по оси y.

должен быть

dungeon[xPos][yPos] = 1; 
+0

спасибо за ваш быстрый ответ! Но это не помогло:/Посмотрите на мое обновленное сообщение, спасибо :) – genaray

+0

Это не бесплатная служба отладки. – Raedwald