1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- var pause = false;
- document.getElementById('pause').onclick = function(){
- pause = !pause;
- };
- var canvas = document.getElementById('canvas');
- var context = canvas.getContext('2d');
- function resize() {
- canvas.width = window.innerWidth;
- canvas.height = window.innerHeight;
- }
- window.addEventListener('resize', resize);
- resize();
- var dim = 100; // 10x10
- var sq = []
- for(var i = 0; i < dim*dim; i++) {
- if(i % dim < dim/2) {
- sq.push(true)
- } else {
- sq.push(false)
- }
- }
- var t0 = performance.now();
- function loop(t)
- {
- var dt = (t - t0) / 1000; // delta t, in seconds
- t0 = t;
- var fy = 0;
- var size = Math.min(canvas.height, canvas.width) / dim;
- let newArray = []; newArray.length = dim*dim
- if (!pause) {
- for(var i = 0; i < sq.length; i++) {
- newArray[i] = decideOutcome(i)
- context.fillStyle = newArray[i] ? 'red' : 'blue'
- context.fillRect((i % dim)*size+2, Math.floor(i/dim) * size, size-4, size-4);
- }
- sq = newArray;
- }
- window.requestAnimationFrame(loop);
- }
- function decideOutcome(i) {
- score = 0; // probability of true gaining control of this square
- divisor = 0;
- function op(b) {
- divisor += 1;
- if(b) {
- score += 1;
- }
- }
- op(sq[i])
- if(i % dim == 0) {
- // first column
- op(sq[i+1]) // search right
- }
- else if(i % dim == dim-1) {
- //last column
- op(sq[i-1]) // search left
- }
- else {
- op(sq[i+1]) // search right
- op(sq[i-1]) // search left
- }
- if(i < dim) {
- // first row
- op(sq[i+dim]) // search down
- }
- else if(i >= sq.length - dim) {
- // last row
- op(sq[i-dim]) // search up
- }
- else {
- op(sq[i+dim]) // search down
- op(sq[i-dim]) // search up
- }
- return (Math.random() < (score/divisor))
- }
-
- window.requestAnimationFrame(loop);
|