code.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. var hidden = true;
  2. document.getElementById('show').onclick = function(){
  3. if(hidden) {
  4. document.getElementById('side').style.width = '200px';
  5. } else {
  6. document.getElementById('side').style.width = '0';
  7. }
  8. hidden = !hidden;
  9. };
  10. document.getElementById('full').onclick = function(){
  11. if(!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement)
  12. {
  13. var elem = document.getElementsByTagName('body')[0];
  14. var requestFullScreen = elem.requestFullscreen || elem.msRequestFullscreen || elem.mozRequestFullScreen || elem.webkitRequestFullscreen;
  15. requestFullScreen.call(elem);
  16. }
  17. else {
  18. var exitFullScreen = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;
  19. exitFullScreen.call(document);
  20. }
  21. };
  22. var canvas = document.getElementById('canvas');
  23. var context = canvas.getContext('2d');
  24. function resize() {
  25. canvas.width = window.innerWidth;
  26. canvas.height = window.innerHeight;
  27. }
  28. window.addEventListener('resize', resize);
  29. resize();
  30. var dim = 100; // 10x10
  31. var sq = []
  32. for(var i = 0; i < dim*dim; i++) {
  33. if(i % dim < dim/2) {
  34. sq.push(true)
  35. } else {
  36. sq.push(false)
  37. }
  38. }
  39. var t0 = performance.now();
  40. function loop(t)
  41. {
  42. var dt = (t - t0) / 1000; // delta t, in seconds
  43. t0 = t;
  44. var fy = 0;
  45. var size = Math.min(canvas.height, canvas.width) / dim;
  46. let newArray = []; newArray.length = dim*dim
  47. for(var i = 0; i < sq.length; i++) {
  48. newArray[i] = decideOutcome(i)
  49. context.fillStyle = newArray[i] ? 'red' : 'blue'
  50. context.fillRect((i % dim)*size+1, Math.floor(i/dim) * size+1, size-2, size-2);
  51. }
  52. sq = newArray;
  53. window.requestAnimationFrame(loop);
  54. }
  55. function decideOutcome(i) {
  56. score = 0; // probability of true gaining control of this square
  57. divisor = 0;
  58. function op(b) {
  59. divisor += 1;
  60. if(b) {
  61. score += 1;
  62. }
  63. }
  64. if(i % dim == 0) {
  65. // first column
  66. op(sq[i+1]) // search right
  67. }
  68. else if(i % dim == dim-1) {
  69. //last column
  70. op(sq[i-1]) // search left
  71. }
  72. else {
  73. op(sq[i+1]) // search right
  74. op(sq[i-1]) // search left
  75. }
  76. if(i < dim) {
  77. // first row
  78. op(sq[i+dim]) // search down
  79. }
  80. else if(i > sq.length - dim) {
  81. // last row
  82. op(sq[i-dim]) // search up
  83. }
  84. else {
  85. op(sq[i+dim]) // search down
  86. op(sq[i-dim]) // search up
  87. }
  88. return (Math.random() < (score/divisor))
  89. }
  90. window.requestAnimationFrame(loop);