Wireworld: Difference between revisions
Content added Content deleted
(added ceylon) |
No edit summary |
||
Line 2,772: | Line 2,772: | ||
=={{header|Java}}== |
=={{header|Java}}== |
||
See: [[Wireworld/Java]] |
See: [[Wireworld/Java]] |
||
=={{header|JavaScript}}== |
|||
You have to search and open the file manually.<br /> |
|||
This is the HTML you need to test. |
|||
<pre> |
|||
<!DOCTYPE html><html><head><meta charset="UTF-8"> |
|||
<title>Wireworld</title> |
|||
<script src="wireworld.js"></script></head><body> |
|||
<input type='file' accept='text/plain' onchange='openFile( event )' /> |
|||
<br /></body></html></pre> |
|||
<lang javascript> |
|||
var ctx, sizeW, sizeH, scl = 10, map, tmp; |
|||
function getNeighbour( i, j ) { |
|||
var ii, jj, c = 0; |
|||
for( var b = -1; b < 2; b++ ) { |
|||
for( var a = -1; a < 2; a++ ) { |
|||
ii = i + a; jj = j + b; |
|||
if( ii < 0 || ii >= sizeW || jj < 0 || jj >= sizeH ) continue; |
|||
if( map[ii][jj] == 1 ) c++; |
|||
} |
|||
} |
|||
return ( c == 1 || c == 2 ); |
|||
} |
|||
function simulate() { |
|||
drawWorld(); |
|||
for( var j = 0; j < sizeH; j++ ) { |
|||
for( var i = 0; i < sizeW; i++ ) { |
|||
switch( map[i][j] ) { |
|||
case 0: tmp[i][j] = 0; break; |
|||
case 1: tmp[i][j] = 2; break; |
|||
case 2: tmp[i][j] = 3; break; |
|||
case 3: |
|||
if( getNeighbour( i, j ) ) tmp[i][j] = 1; |
|||
else tmp[i][j] = 3; |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
[tmp, map] = [map, tmp]; |
|||
setTimeout( simulate, 200 ); |
|||
} |
|||
function drawWorld() { |
|||
ctx.fillStyle = "#000"; ctx.fillRect( 0, 0, sizeW * scl, sizeH * scl ); |
|||
for( var j = 0; j < sizeH; j++ ) { |
|||
for( var i = 0; i < sizeW; i++ ) { |
|||
switch( map[i][j] ) { |
|||
case 0: continue; |
|||
case 1: ctx.fillStyle = "#03f"; break; |
|||
case 2: ctx.fillStyle = "#f30"; break; |
|||
case 3: ctx.fillStyle = "#ff3"; break; |
|||
} |
|||
ctx.fillRect( i, j, 1, 1 ); |
|||
} |
|||
} |
|||
} |
|||
function openFile( event ) { |
|||
var input = event.target; |
|||
var reader = new FileReader(); |
|||
reader.onload = function() { |
|||
createWorld( reader.result ); |
|||
}; |
|||
reader.readAsText(input.files[0]); |
|||
} |
|||
function createWorld( txt ) { |
|||
var l = txt.split( "\n" ); |
|||
sizeW = parseInt( l[0] ); |
|||
sizeH = parseInt( l[1] ); |
|||
map = new Array( sizeW ); |
|||
tmp = new Array( sizeW ); |
|||
for( var i = 0; i < sizeW; i++ ) { |
|||
map[i] = new Array( sizeH ); |
|||
tmp[i] = new Array( sizeH ); |
|||
for( var j = 0; j < sizeH; j++ ) { |
|||
map[i][j] = tmp[i][j] = 0; |
|||
} |
|||
} |
|||
var t; |
|||
for( var j = 0; j < sizeH; j++ ) { |
|||
for( var i = 0; i < sizeW; i++ ) { |
|||
switch( l[j + 2][i] ) { |
|||
case " ": t = 0; break; |
|||
case "H": t = 1; break; |
|||
case "t": t = 2; break; |
|||
case ".": t = 3; break; |
|||
} |
|||
map[i][j] = t; |
|||
} |
|||
} |
|||
init(); |
|||
} |
|||
function init() { |
|||
var canvas = document.createElement( "canvas" ); |
|||
canvas.width = sizeW * scl; |
|||
canvas.height = sizeH * scl; |
|||
ctx = canvas.getContext( "2d" ); |
|||
ctx.scale( scl, scl ); |
|||
document.body.appendChild( canvas ); |
|||
simulate(); |
|||
} |
|||
</lang> |
|||
=={{header|jq}}== |
=={{header|jq}}== |