2016-12-23 11 views
-1

おはようとメリークリスマス!2D配列 - 「壁」配置が間違っていますか?

自分のDungeon Generatorを作りたかったのです。だから私は最初に同じステップで壁を置いていくつかの空の部屋にスポーンすることにしました。

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。 位置= 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; 位置= 25;

幅= 10; 高さ= 5;

ご覧のとおり、アライメントはもう正しいです。壁は部屋そのものよりも完全に別の位置にあります。奇妙な部分は、値(xpos、ypos、width、height)が互いに異なる場合にのみ発生するということです。

--- UPDATE --- iはxおよびy軸を反転する場合

私はこれを取得:

 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

関連する問題