おはようとメリークリスマス!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及びサイズは、上記の例と同じです。
私のコードに問題がありますか?通常壁は部屋の周りにあるはずです...
ああ、ヒント:あなたは私たちが私たちを過ごしたいですあなたを助ける時間。それで、あなたのコードを正しくフォーマット/インデントするために必要な2分を費やすと、それは公正ではありませんか?あなたの例がおそらく5x5行/列を使用するのであれば、読んだり理解したりするほうが簡単でしょう。代わりに20x100かそれとも? – GhostCat