迷路の生成
Maze Ganerator
棒倒し法での迷路生成です。
JavaScript置き場に置いてあるやつとやっていることは変わらないのですが、
「配列、pushもpopもできねえのかよ」とキレながら書いていました。
import java.util.*;
// geschrieben von Beliar698ma
class Maze {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = 0;
System.out.println("迷路のサイズを入力してください(数値1つ, 5以上の奇数):");
if (sc.hasNextInt()) {
num = sc.nextInt();
} else {
System.out.println("有効な値を入力してください。");
return;
}
if (num < 5 || num % 2 == 0) {
System.out.println("「5以上」の「奇数」を入力してください。");
return;
}
char[][] mazeBody = new char [num][num];
// 壁を作って棒を刺す
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
if (i == 0 || i == num - 1 || j == 0 || j == num - 1) {
mazeBody[i][j] = '■';
} else if (i % 2 == 0 && j % 2 == 0) {
mazeBody[i][j] = '■';
} else {
mazeBody[i][j] = ' ';
}
}
}
// 棒倒し
for (int i = 1; i < num - 1; i++) {
for (int j = 1; j < num - 1; j++) {
if (i % 2 == 0 && j % 2 == 0) {
int[][] dir = {
{0, 1},
{1, 0},
{0, -1},
{-1, 0}
};
boolean isTopRow = (i == 2);
int directionCount = isTopRow ? 4 : 3;
while(true) {
int idx = (int)Math.floor(Math.random() * directionCount);
int ny = i + dir[idx][0];
int nx = j + dir[idx][1];
if (mazeBody[ny][nx] == ' ') {
mazeBody[ny][nx] = '■';
break;
} else {
continue;
}
}
}
}
}
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
System.out.print(mazeBody[i][j]);
if(j == num - 1) System.out.print("\n");
else System.out.print(" ");
}
}
}
}