|
| 1 | +//放雷 |
| 2 | + |
| 3 | +//初始化大小数组 |
| 4 | +function makeinitarray(num,lei){ |
| 5 | + var arr = []; |
| 6 | + arr[lei-1] = void 0; |
| 7 | + arr.fill(1); |
| 8 | + arr = arr.concat((new Array(num-lei)).fill(0)); |
| 9 | + return arr; |
| 10 | +} |
| 11 | +// console.log(makeinitarray(16,5)) |
| 12 | +// 随机处理数组数据 |
| 13 | +function random_arr(arr){ |
| 14 | + var temp,rand,len,i; |
| 15 | + len = arr.length; |
| 16 | + for(i = 0;i<len;i++){ |
| 17 | + rand = Math.floor(Math.random()*(i+1)); |
| 18 | + if(rand!==i){ |
| 19 | + temp = arr[i]; |
| 20 | + arr[i] = arr[rand]; |
| 21 | + arr[rand] = temp; |
| 22 | + } |
| 23 | + } |
| 24 | + return arr ; |
| 25 | +} |
| 26 | +// var a = calc(initlei(random_arr(makeinitarray(16,3)))); |
| 27 | +var arr = makeinitarray(16,3); |
| 28 | +var ramdom = random_arr(arr); |
| 29 | +var init = initlei(arr); |
| 30 | +// var a = calc(init); |
| 31 | +// console.log(render(a),a) |
| 32 | +a = [ [ { value: 1, show: false }, |
| 33 | + { value: 1, show: false }, |
| 34 | + { value: 1, show: false }, |
| 35 | + { value: 1, show: false } ], |
| 36 | + [ { value: 1, show: false }, |
| 37 | + { value: 1, show: false }, |
| 38 | + { value: 2, show: false }, |
| 39 | + { value: 2, show: false } ], |
| 40 | + [ { value: 0, show: false }, |
| 41 | + { value: 0, show: false }, |
| 42 | + { value: 2, show: false }, |
| 43 | + { value: 2, show: false } ], |
| 44 | + [ { value: 0, show: false }, |
| 45 | + { value: 0, show: false }, |
| 46 | + { value: 1, show: false }, |
| 47 | + { value: 1, show: false } ] ]; |
| 48 | +a = cailei(3,0,a); |
| 49 | +setTimeout(()=>{ |
| 50 | + console.log(render(a)) |
| 51 | +}) |
| 52 | + |
| 53 | +// 初始化埋雷操作。 |
| 54 | +function initlei(arr){ |
| 55 | + var cache = [],len,i,num; |
| 56 | + var arrlen = Math.sqrt(arr.length); |
| 57 | + var len = arr.length; |
| 58 | + for(i=0;i<len;i++){ |
| 59 | + num = Math.floor(i/arrlen); |
| 60 | + if(!cache[num]){ |
| 61 | + cache[num] = []; |
| 62 | + } |
| 63 | + cache[num][i%arrlen] = arr[i]; |
| 64 | + } |
| 65 | + return cache; |
| 66 | +} |
| 67 | +function quyudefen(x,y,arr){ |
| 68 | + var len = arr.length; |
| 69 | + var rowlen = arr[0].length; |
| 70 | + var start = { |
| 71 | + x:Math.max(x-1,0), |
| 72 | + y:Math.max(y-1,0) |
| 73 | + } |
| 74 | + var end = { |
| 75 | + x:Math.min(x+1,rowlen-1), |
| 76 | + y:Math.min(y+1,len-1) |
| 77 | + } |
| 78 | + var sum = 0; |
| 79 | + var num = 0; |
| 80 | + // console.log('------------',start,end,'-------------') |
| 81 | + for(var i = start.x;i<=end.x;i++){ |
| 82 | + for(var j = start.y;j<=end.y;j++){ |
| 83 | + // console.log(i,j) |
| 84 | + sum += Number(arr[i][j]['value']) |
| 85 | + num++ |
| 86 | + } |
| 87 | + } |
| 88 | + // console.log(x,y,num,sum,start,end,arr[0][0]) |
| 89 | + return { |
| 90 | + value:sum, |
| 91 | + show:false |
| 92 | + }; |
| 93 | +} |
| 94 | +function calc(arr){ |
| 95 | + var cache = arr.slice(); |
| 96 | + var len = arr.length; |
| 97 | + var rowlen = arr[0].length; |
| 98 | + cache = cache.map((v)=>{ |
| 99 | + return v.map((v)=>{ |
| 100 | + return { |
| 101 | + show:false, |
| 102 | + value:v |
| 103 | + } |
| 104 | + }) |
| 105 | + }) |
| 106 | + a = JSON.parse(JSON.stringify(cache)) |
| 107 | + |
| 108 | + cache = cache.map((vss,i,obj)=>{ |
| 109 | + return vss.map((vv,index)=>{ |
| 110 | + return quyudefen(index,i,a) |
| 111 | + }) |
| 112 | + }); |
| 113 | + return cache; |
| 114 | + |
| 115 | + // var start = {x:0,y:0} |
| 116 | + // var end = {x:rowlen,y:len} |
| 117 | + // quyudefen |
| 118 | + |
| 119 | +} |
| 120 | +// console.log(calc(initlei(random_arr(makeinitarray(36,6))))); |
| 121 | +// 填充站点 |
| 122 | +function calclei(arr){ |
| 123 | + // var a = makeinitarray(); |
| 124 | + // var arr = initlei(random_arr(a)); |
| 125 | + var cache = [],len = arr.length; |
| 126 | + // console.log(arr); |
| 127 | + var cc = count(arr); |
| 128 | + cc.len = arr.length; |
| 129 | + for(var c = 0;c<len;c++){ |
| 130 | + cache[c]=[]; |
| 131 | + for(var d = 0;d<len;d++){ |
| 132 | + cache[c][d] = cc(c,d); |
| 133 | + } |
| 134 | + } |
| 135 | + // console.log('\n') |
| 136 | + // console.log(cache); |
| 137 | + return cache; |
| 138 | +} |
| 139 | +function count(arr){ |
| 140 | + var arr = arr; |
| 141 | + return function foo(i,j){ |
| 142 | + var num = 0; |
| 143 | + if(arr[i][j]){ |
| 144 | + return 999; |
| 145 | + } |
| 146 | + for(var z = i-1;z<=i+1;z++){ |
| 147 | + for(var y = j-1;y<=j+1;y++){ |
| 148 | + if(z>=0&&y>=0&&y<foo.len&&z<foo.len){ |
| 149 | + if(arr[z][y]){ |
| 150 | + num++; |
| 151 | + } |
| 152 | + } |
| 153 | + } |
| 154 | + } |
| 155 | + return num; |
| 156 | + } |
| 157 | +} |
| 158 | +// calclei(); |
| 159 | + |
| 160 | +function render(arr) |
| 161 | +{ |
| 162 | + console.log(arr) |
| 163 | + return arr.map((v,index)=>{ |
| 164 | + return v.reduce((a,b)=>{ |
| 165 | + if(b['show']&&b['value']==0){ |
| 166 | + return `${a} x` |
| 167 | + } |
| 168 | + if(b['show']){ |
| 169 | + // return `${a}<td>m</td>` |
| 170 | + return `${a} ${b['value']}` |
| 171 | + } |
| 172 | + return `${a} @`; |
| 173 | + },'') |
| 174 | + }).join('\n'); |
| 175 | + // return html; |
| 176 | +} |
| 177 | + |
| 178 | +function cailei(x,y,arr){ |
| 179 | + var len = arr.length;//4 |
| 180 | + var rowLen = arr[0].length;//4 |
| 181 | + var start = { |
| 182 | + x:Math.max(x-1,0), |
| 183 | + y:Math.max(y-1,0) |
| 184 | + } |
| 185 | + var end = { |
| 186 | + x:Math.min(x+1,rowLen-1), |
| 187 | + y:Math.min(y+1,len-1) |
| 188 | + } |
| 189 | + if(arr[x][y]['value']!==0){ |
| 190 | + arr[x][y]['show'] = true; |
| 191 | + return arr; |
| 192 | + } |
| 193 | + for(var i = start.x;i<=end.x;i++){ |
| 194 | + for(var j = start.y;j<=end.y;j++){ |
| 195 | + // console.log('===---====') |
| 196 | + if(arr[i][j]['value'] == 0 && arr[i][j]['show'] === false&& i!=x&&j!=y){ |
| 197 | + cailei(i,j,arr); |
| 198 | + }else{ |
| 199 | + arr[i][j]['show'] = true; |
| 200 | + } |
| 201 | + } |
| 202 | + } |
| 203 | + return arr; |
| 204 | +} |
0 commit comments