导入
子任务解决方案:创建迷宫
子任务:“生成迷宫”在“迷宫求解器”项目中的解决方案。
创建迷宫
任务分为两个部分:复制 arr 并将其 赋值 给 grid 属性。但如果 arr 为 undefined,则直接将 grid 赋值为一个 随机生成的 数组。解决方案如下。
1class Grid { 2 constructor(arr) { 3 if (arr === undefined) { 4 // 创建一个 6x6 的随机网格 5 var temp = new Array(6); 6 for (var i = 0; i < temp.length; i++) { 7 temp[i] = new Array(6); 8 for (var j = 0; j < temp[i].length; j++) { 9 // 生成 0 到 1 之间的随机数 10 temp[i][j] = Math.round(Math.random()); 11 } 12 } 13 this.grid = temp; 14 } else { 15 this.grid = new Array(arr.length); 16 for (var i = 0; i < arr.length; i++) { 17 // 复制数组元素 18 this.grid[i] = arr[i].slice(); 19 } 20 } 21 } 22 23 // 辅助函数用于打印网格 24 printArray() { 25 // 遍历网格 26 for (var i = 0; i < this.grid.length; i++) { 27 for (var j = 0; j < this.grid[i].length; j++) { 28 // 输出 X 或 O 29 if (this.grid[i][j] === 0) 30 process.stdout.write(`X `); 31 else 32 process.stdout.write(`O `); 33 } 34 console.log(''); 35 } 36 } 37} 38 39var arr = [ 40 [0, 1, 1, 1, 0], 41 [0, 1, 1, 1, 0], 42 [0, 1, 1, 1, 0], 43 [0, 1, 1, 1, 0], 44 [0, 1, 1, 1, 0], 45]; 46 47var maze = new Grid(arr); 48console.log("从数组 arr 创建的迷宫:"); 49maze.printArray(); 50 51var maze2 = new Grid(); 52console.log("随机生成的迷宫:"); 53maze2.printArray();
如上代码所示,构造函数 接受一个参数:arr。第 3 行的 条件判断 检查其值是否为 undefined。如果条件为 true,则生成一个固定尺寸的 随机数组,其中 Math.round(Math.random()) 用于生成 0 或 1 的随机数(第 4 至 12 行)。如果 arr 不为 undefined,则通过遍历并使用 slice 方法 复制内部数组来创建数组的 副本(第 15 至 21 行)。在两种情况下,生成或复制后的数组都会被 赋值 给 this.grid,使其成为构造对象的 属性。