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}}==