迷路の幅と高さをそれぞれ width, height として設定し、
その数値にしたがって上下左右1マス間隔で内壁を設置する。
※迷路の幅と高さは5以上の奇数とする。
class Maze {
constructor(width, height) {
this.PATH = 0;
this.WALL = 1;
this.width = width;
this.height = height;
if (this.width < 5 || this.height < 5) {
return;
}
if (this.width%2 == 0) {
this.width++;
}
if (this.height%2 == 0) {
this.height++;
}
this.maze = Array.from(new Array(this.height), () => new Array(this.width).fill(this.PATH));
}
set_outer_wall() {
for (let y = 0; y < this.height; ++y) {
for (let x = 0; x < this.width; ++x) {
if (x == 0 || y == 0 || x == this.width-1 || y == this.height-1) {
this.maze[y][x] = this.WALL;
}
}
}
return this.maze;
}
set_inner_wall() {
for (let y = 2; y < this.height-1; y+=2) {
for (let x = 2; x < this.width-1; x+=2) {
this.maze[y][x] = this.WALL;
}
}
return this.maze;
}
print_maze() {
for (let col of this.maze) {
let arr = '';
for(let cell of col) {
if (cell == this.WALL) {
arr += '#';
} else if (cell == this.PATH) {
arr += ' ';
}
}
console.log(arr);
}
}
}
let maze1 = new Maze(15, 15);
maze1.set_outer_wall();
maze1.set_inner_wall();
maze1.print_maze();
今回は、以下のように出力される。
###############
# #
# # # # # # # #
# #
# # # # # # # #
# #
# # # # # # # #
# #
# # # # # # # #
# #
# # # # # # # #
# #
# # # # # # # #
# #
###############
Online editor and compiler
Paiza.IO is online editor and compiler. Java, Ruby, Python, PHP, Perl, Swift, JavaScript... You can use for learning pro...