window.onload = ->
[md,data,pat,maze] = [0,[],[],[
0,2,3,6,7,8,9,12,16,18,19,22,23,24,25,26,30,32,33,36,42,48, 50,51,52,56,57,58,60,61,66,72,73,88,89,90,96,
105,108,120,121,124,125,128,129,132,135,138,144,146,147,150,151,152,153,154,162,168,176,178,180,184,186,192,198,
208,210,211,214,215,240, 258,264,288,292,297, 300,304,306,308,312,313,316,317, 376,377,380,381,384,387,
400,402,403,406,407,408,448, 450,464,466,467,470,471
]]
maze.map -> pat[it]=1
neb = (x,y) -> [[i,j] for i in [-1 0 1] for j in [-1 0 1]].filter ([i,j]) ->
((x + i) in [0 til 20] and (y + j) in [0 til 20])
.map ([i,j]) -> [2 ** (4 + i + j * 3), x + i + (y + j)*20]
data = [{x, y, d: if parseInt(Math.random!*7)== 0 then 1 else 0, n: neb x, y }
for y from 0 til 20 for x from 0 til 20]
nodes = d3.select \body .selectAll \div.cell .data data .enter!append \div .attr \class \cell
nodes.style \top (d,i) -> 20 + 30 * parseInt(i/20) + "px"
.style \left (d,i) -> 20 + 30 * (i%20) + "px"
<- setInterval _, 80
nodes
.style \opacity -> if it.d then 1 else 0.2
.each (d,i) ->
c = d.n.map(-> data[it.1].d * it.0)reduce (+)
d.d = if pat[c] then 1 else 0
Maze Generator
13年8月4日星期日