code.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. var pause = false;
  2. document.getElementById('pause').onclick = function(){
  3. pause = !pause;
  4. };
  5. var canvas = document.getElementById('canvas');
  6. var context = canvas.getContext('2d');
  7. function resize() {
  8. canvas.width = window.innerWidth;
  9. canvas.height = window.innerHeight;
  10. }
  11. window.addEventListener('resize', resize);
  12. resize();
  13. var dim = 100; // 10x10
  14. var sq = []
  15. for(var i = 0; i < dim*dim; i++) {
  16. if(i % dim < dim/2) {
  17. sq.push(true)
  18. } else {
  19. sq.push(false)
  20. }
  21. }
  22. var t0 = performance.now();
  23. function loop(t)
  24. {
  25. var dt = (t - t0) / 1000; // delta t, in seconds
  26. t0 = t;
  27. var fy = 0;
  28. var size = Math.min(canvas.height, canvas.width) / dim;
  29. let newArray = []; newArray.length = dim*dim
  30. if (!pause) {
  31. for(var i = 0; i < sq.length; i++) {
  32. newArray[i] = decideOutcome(i)
  33. context.fillStyle = newArray[i] ? 'red' : 'blue'
  34. context.fillRect((i % dim)*size+2, Math.floor(i/dim) * size, size-4, size-4);
  35. }
  36. sq = newArray;
  37. }
  38. window.requestAnimationFrame(loop);
  39. }
  40. function decideOutcome(i) {
  41. score = 0; // probability of true gaining control of this square
  42. divisor = 0;
  43. function op(b) {
  44. divisor += 1;
  45. if(b) {
  46. score += 1;
  47. }
  48. }
  49. op(sq[i])
  50. if(i % dim == 0) {
  51. // first column
  52. op(sq[i+1]) // search right
  53. }
  54. else if(i % dim == dim-1) {
  55. //last column
  56. op(sq[i-1]) // search left
  57. }
  58. else {
  59. op(sq[i+1]) // search right
  60. op(sq[i-1]) // search left
  61. }
  62. if(i < dim) {
  63. // first row
  64. op(sq[i+dim]) // search down
  65. }
  66. else if(i >= sq.length - dim) {
  67. // last row
  68. op(sq[i-dim]) // search up
  69. }
  70. else {
  71. op(sq[i+dim]) // search down
  72. op(sq[i-dim]) // search up
  73. }
  74. return (Math.random() < (score/divisor))
  75. }
  76. window.requestAnimationFrame(loop);