code.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 = 128
  14. var sq = []
  15. for(var i = 0; i < dim*dim; i++) {
  16. if(i % dim < dim/2) {
  17. sq.push(0)
  18. } else {
  19. sq.push(240)
  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 = 'hsl(' + newArray[i] + ', 90%, 60%)'
  34. context.fillRect((i % dim)*size, Math.floor(i/dim) * size, size, size);
  35. }
  36. sq = newArray;
  37. }
  38. window.requestAnimationFrame(loop);
  39. }
  40. function decideOutcome(i) {
  41. opts = []
  42. function op(b) {
  43. opts.push(b)
  44. }
  45. op(sq[i])
  46. if(i % dim == 0) {
  47. // first column
  48. op(sq[i+1]) // search right
  49. }
  50. else if(i % dim == dim-1) {
  51. //last column
  52. op(sq[i-1]) // search left
  53. }
  54. else {
  55. op(sq[i+1]) // search right
  56. op(sq[i-1]) // search left
  57. }
  58. if(i < dim) {
  59. // first row
  60. op(sq[i+dim]) // search down
  61. }
  62. else if(i >= sq.length - dim) {
  63. // last row
  64. op(sq[i-dim]) // search up
  65. }
  66. else {
  67. op(sq[i+dim]) // search down
  68. op(sq[i-dim]) // search up
  69. }
  70. end = opts[Math.floor(Math.random() * opts.length)]
  71. return (end - sq[i]) * 0.99 + sq[i];
  72. }
  73. window.requestAnimationFrame(loop);