|
5 | 5 | <button id="run">Auto run</button> |
6 | 6 |
|
7 | 7 | <script> |
8 | | - var width = 30, height = 15; |
| 8 | + const width = 30, height = 15; |
9 | 9 |
|
10 | 10 | // I will represent the grid as an array of booleans. |
11 | 11 |
|
12 | | - var gridNode = document.querySelector("#grid"); |
| 12 | + let gridNode = document.querySelector("#grid"); |
13 | 13 | // This holds the checkboxes that display the grid in the document. |
14 | | - var checkboxes = []; |
15 | | - for (var y = 0; y < height; y++) { |
16 | | - for (var x = 0; x < width; x++) { |
17 | | - var box = document.createElement("input"); |
| 14 | + let checkboxes = []; |
| 15 | + for (let y = 0; y < height; y++) { |
| 16 | + for (let x = 0; x < width; x++) { |
| 17 | + let box = document.createElement("input"); |
18 | 18 | box.type = "checkbox"; |
19 | 19 | gridNode.appendChild(box); |
20 | 20 | checkboxes.push(box); |
|
23 | 23 | } |
24 | 24 |
|
25 | 25 | function gridFromCheckboxes() { |
26 | | - return checkboxes.map(function(box) { return box.checked; }); |
| 26 | + return checkboxes.map(box => box.checked); |
27 | 27 | } |
28 | 28 | function checkboxesFromGrid(grid) { |
29 | | - return grid.forEach(function(value, i) { checkboxes[i].checked = value; }); |
| 29 | + return grid.forEach((value, i) => checkboxes[i].checked = value); |
30 | 30 | } |
31 | 31 | function randomGrid() { |
32 | | - var result = []; |
33 | | - for (var i = 0; i < width * height; i++) |
| 32 | + let result = []; |
| 33 | + for (let i = 0; i < width * height; i++) { |
34 | 34 | result.push(Math.random() < 0.3); |
| 35 | + } |
35 | 36 | return result; |
36 | 37 | } |
37 | 38 |
|
|
42 | 43 | // center field. |
43 | 44 | function countNeighbors(grid, x, y) { |
44 | 45 | var count = 0; |
45 | | - for (var y1 = Math.max(0, y - 1); y1 <= Math.min(height - 1, y + 1); y1++) { |
46 | | - for (var x1 = Math.max(0, x - 1); x1 <= Math.min(width - 1, x + 1); x1++) { |
47 | | - if ((x1 != x || y1 != y) && grid[x1 + y1 * width]) |
48 | | - count += 1; |
| 46 | + for (let y1 = Math.max(0, y - 1); y1 <= Math.min(height - 1, y + 1); y1++) { |
| 47 | + for (let x1 = Math.max(0, x - 1); x1 <= Math.min(width - 1, x + 1); x1++) { |
| 48 | + if ((x1 != x || y1 != y) && grid[x1 + y1 * width]) { |
| 49 | + count++; |
| 50 | + } |
49 | 51 | } |
50 | 52 | } |
51 | 53 | return count; |
52 | 54 | } |
53 | 55 |
|
54 | 56 | function nextGeneration(grid) { |
55 | | - var newGrid = new Array(width * height); |
56 | | - for (var y = 0; y < height; y++) { |
57 | | - for (var x = 0; x < width; x++) { |
58 | | - var neighbors = countNeighbors(grid, x, y); |
59 | | - var offset = x + y * width; |
60 | | - if (neighbors < 2 || neighbors > 3) |
| 57 | + let newGrid = new Array(width * height); |
| 58 | + for (let y = 0; y < height; y++) { |
| 59 | + for (let x = 0; x < width; x++) { |
| 60 | + let neighbors = countNeighbors(grid, x, y); |
| 61 | + let offset = x + y * width; |
| 62 | + if (neighbors < 2 || neighbors > 3) { |
61 | 63 | newGrid[offset] = false; |
62 | | - else if (neighbors == 2) |
| 64 | + } else if (neighbors == 2) { |
63 | 65 | newGrid[offset] = grid[offset]; |
64 | | - else |
| 66 | + } else { |
65 | 67 | newGrid[offset] = true; |
| 68 | + } |
66 | 69 | } |
67 | 70 | } |
68 | 71 | return newGrid; |
|
74 | 77 |
|
75 | 78 | document.querySelector("#next").addEventListener("click", turn); |
76 | 79 |
|
77 | | - var running = null; |
78 | | - document.querySelector("#run").addEventListener("click", function() { |
| 80 | + let running = null; |
| 81 | + document.querySelector("#run").addEventListener("click", () => { |
79 | 82 | if (running) { |
80 | 83 | clearInterval(running); |
81 | 84 | running = null; |
|
0 commit comments