// title: game of life // author: Simon Cambier // desc: short description // script: js const width = 240; const height = 136; let state: boolean[][] = []; let next: boolean[][] = []; let generation = 0; function BOOT() { for (let i = 0; i < width; i++) { state[i] = []; next[i] = []; for (let j = 0; j < height; j++) { state[i][j] = Math.random() > 0.5; next[i][j] = false; } } } function TIC() { cls(13); for (let i = 0; i < width; i++) { for (let j = 0; j < height; j++) { let count = 0; // Use modulo to wrap around the edges if (state[(i - 1 + width) % width][(j - 1 + height) % height]) count++; // top left if (state[(i - 1 + width) % width][j]) count++; // top if (state[(i - 1 + width) % width][(j + 1) % height]) count++; // top right if (state[i][(j - 1 + height) % height]) count++; // left if (state[i][(j + 1) % height]) count++; // right if (state[(i + 1) % width][(j - 1 + height) % height]) count++; // bottom left if (state[(i + 1) % width][j]) count++; // bottom if (state[(i + 1) % width][(j + 1) % height]) count++; // bottom right // Currently alive if (state[i][j]) { if (count < 2) { next[i][j] = false; } else if (count > 3) { next[i][j] = false; } else { next[i][j] = true; } } // Currently dead else { if (count === 3) { next[i][j] = true; } else { next[i][j] = false; } } } } // Swap state and next // Use a temp var, otherwise state and next will be the same object let temp = state; state = next; next = temp; for (let i = 0; i < width; i++) { for (let j = 0; j < height; j++) { if (state[i][j]) { pix(i, j, 7); } } } print(`Generation: ${++generation}`, 1, 1, 0); }