├── README.md ├── random.js ├── base.js ├── 30.html ├── ca.html ├── random.html ├── glidergun.html ├── glidergun.js ├── index.html ├── name.js ├── name.html ├── 30.js ├── ca.js └── game.js /README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /random.js: -------------------------------------------------------------------------------- 1 | var grid = new Array(50) 2 | for (var i = 0; i < 50; i++) { 3 | grid[i] = new Array(50) 4 | } 5 | 6 | for (var i = 0; i < 50; i++) { 7 | for (var j = 0; j < 50; j++) { 8 | if (i === 0 || j === 0 || i === 49 || j === 49) { 9 | grid[i][j] = 0 10 | } else { 11 | grid[i][j] = Math.floor(Math.random() * 2) 12 | } 13 | } 14 | } 15 | 16 | game = new Game(grid); 17 | -------------------------------------------------------------------------------- /base.js: -------------------------------------------------------------------------------- 1 | p5.disableFriendlyErrors = true; // disables FES 2 | 3 | var game = null; 4 | var gameCanvas = null; 5 | 6 | var screenProperties = { 7 | width: 640, 8 | height: 480, 9 | } 10 | 11 | function setup() { 12 | var size = min(windowWidth - 10, windowHeight - 10, 640) 13 | screenProperties.width = size; 14 | screenProperties.height = size; 15 | gameCanvas = createCanvas(screenProperties.width, screenProperties.height); 16 | gameCanvas.parent('sketch'); 17 | frameRate(10) 18 | } 19 | 20 | function draw() { 21 | game.run() 22 | } 23 | -------------------------------------------------------------------------------- /30.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /ca.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /random.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | -------------------------------------------------------------------------------- /glidergun.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | -------------------------------------------------------------------------------- /glidergun.js: -------------------------------------------------------------------------------- 1 | var text = ` 2 | # # 3 | # # # 4 | ## # 5 | ` 6 | 7 | function setupGameOnText() { 8 | var lines = text.split('\n'); 9 | var textRows = lines.length; 10 | var textCols = Math.max(...lines.map(x => x.length || 0)); 11 | 12 | var rows, cols; 13 | rows = cols = Math.max(textRows, textCols) + 2; 14 | 15 | var rowsOffset = Math.round((rows - textRows)/2); 16 | var colsOffset = Math.round((cols - textCols)/2); 17 | 18 | var grid = new Array(rows) 19 | for (var i = 0; i < rows; i++) { 20 | grid[i] = new Array(cols) 21 | } 22 | 23 | for (var i = 1; i < textRows; i++) { 24 | for (var j = 1; j < textCols; j++) { 25 | grid[i + rowsOffset][j + colsOffset] = lines[i].charAt(j) === '#' ? 1 : 0; 26 | } 27 | } 28 | 29 | game = new Game(grid); 30 | } 31 | 32 | setupGameOnText() 33 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

9 | Game of Life 10 |

11 |
12 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /name.js: -------------------------------------------------------------------------------- 1 | figlet.defaults({ 2 | fontPath: 'https://raw.githubusercontent.com/patorjk/figlet.js/master/fonts' 3 | }); 4 | figlet.preloadFonts(['Banner3']) 5 | 6 | var text = ` 7 | ###### ### ## ## ######## ####### ######## ## #### ######## ######## 8 | ## ## ## ## ### ### ## ## ## ## ## ## ## ## 9 | ## ## ## #### #### ## ## ## ## ## ## ## ## 10 | ## #### ## ## ## ### ## ###### ## ## ###### ## ## ###### ###### 11 | ## ## ######### ## ## ## ## ## ## ## ## ## ## 12 | ## ## ## ## ## ## ## ## ## ## ## ## ## ## 13 | ###### ## ## ## ## ######## ####### ## ######## #### ## ######## 14 | ` 15 | 16 | function setupGameOnText() { 17 | var lines = text.split('\n'); 18 | var textRows = lines.length; 19 | var textCols = Math.max(...lines.map(x => x.length || 0)); 20 | 21 | var rows, cols; 22 | rows = cols = Math.max(textRows, textCols) + 2; 23 | 24 | var rowsOffset = Math.round((rows - textRows)/2); 25 | var colsOffset = Math.round((cols - textCols)/2); 26 | 27 | var grid = new Array(rows) 28 | for (var i = 0; i < rows; i++) { 29 | grid[i] = new Array(cols) 30 | } 31 | 32 | for (var i = 1; i < textRows; i++) { 33 | for (var j = 1; j < textCols; j++) { 34 | grid[i + rowsOffset][j + colsOffset] = lines[i].charAt(j) === '#' ? 1 : 0; 35 | } 36 | } 37 | 38 | game = new Game(grid); 39 | } 40 | 41 | setupGameOnText() 42 | -------------------------------------------------------------------------------- /name.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 35 |
36 | 37 | 38 |
39 |
40 |
41 | 42 | 43 | -------------------------------------------------------------------------------- /30.js: -------------------------------------------------------------------------------- 1 | var bitBuffer = [1]; 2 | 3 | function get_state(a, b, c) { 4 | a = a || 0 5 | b = b || 0 6 | c = c || 0 7 | return a ^ (b | c); 8 | } 9 | 10 | function Game(grid) { 11 | this.grid = grid; 12 | 13 | this.rows = grid.length; 14 | this.cols = grid[0].length; 15 | this.current = 1; 16 | 17 | this.wx = screenProperties.width / this.cols; 18 | this.wy = screenProperties.height / this.rows; 19 | 20 | this.draw = function() { 21 | for (var i = 0; i < this.rows ; i++) { 22 | for(var j = 0 ; j < this.cols ; j++) { 23 | fill(this.grid[i][j] ? '#545454' : '#ffd1d1') 24 | rect(j * this.wy, i * this.wx, this.wy, this.wx); 25 | } 26 | } 27 | } 28 | 29 | this.move = function() { 30 | var parent = this.current - 1 31 | 32 | for (var i = 0; i < this.cols; i++) { 33 | this.grid[this.current][i] = get_state(this.grid[parent][i >= 1 ? i-1 : this.cols - 1], this.grid[parent][i], this.grid[parent][i+1 % this.cols]) 34 | } 35 | 36 | bitBuffer.push(this.grid[this.current][45]) 37 | if (bitBuffer.length === 8) { 38 | var v = 0; 39 | for (var j = 0; j < 8; j++) { 40 | v += bitBuffer[j] * (1 << 7 - j); 41 | } 42 | console.log(bitBuffer, v) 43 | bitBuffer = [] 44 | } 45 | 46 | this.current ++ 47 | if (this.current === this.rows) { 48 | this.current = this.rows - 1 49 | this.grid.shift() 50 | this.grid.push(new Array(this.cols)) 51 | } 52 | } 53 | 54 | this.run = function() { 55 | this.draw() 56 | this.move() 57 | } 58 | } 59 | 60 | 61 | var grid123 = new Array(161) 62 | for (var i = 0; i < 161; i++) { 63 | grid123[i] = new Array(161) 64 | } 65 | 66 | grid123[0][80] = 1; 67 | 68 | game = new Game(grid123); 69 | -------------------------------------------------------------------------------- /ca.js: -------------------------------------------------------------------------------- 1 | function getNeighbourXOR(g, i, j) { 2 | var value = 0; 3 | 4 | try { value ^= g[i-1][j] } catch (e) {} 5 | try { value ^= g[i][j-1] } catch (e) {} 6 | try { value ^= g[i+1][j] } catch (e) {} 7 | try { value ^= g[i][j+1] } catch (e) {} 8 | try { value ^= g[i-1][j-1] } catch (e) {} 9 | try { value ^= g[i+1][j+1] } catch (e) {} 10 | try { value ^= g[i-1][j+1] } catch (e) {} 11 | try { value ^= g[i+1][j-1] } catch (e) {} 12 | return value 13 | } 14 | 15 | function newGrid(r, c) { 16 | var g = new Array(r) 17 | for (var i = 0; i < r; i++) { 18 | g[i] = new Array(c) 19 | } 20 | 21 | for (var i = 0; i < r; i++) { 22 | for (var j = 0; j < c; j++) { 23 | g[i][j] = 0; 24 | } 25 | } 26 | return g 27 | } 28 | 29 | function Game(grid) { 30 | this.grid = grid; 31 | 32 | this.rows = grid.length; 33 | this.cols = grid[0].length; 34 | 35 | this.wx = screenProperties.width / this.cols; 36 | this.wy = screenProperties.height / this.rows; 37 | 38 | this.nextGrid = newGrid(this.rows, this.cols); 39 | 40 | this.draw = function() { 41 | for (var i = 0; i < this.rows ; i++) { 42 | for(var j = 0 ; j < this.cols ; j++) { 43 | fill(this.grid[i][j] ? '#545454' : '#ffd1d1') 44 | rect(j * this.wy, i * this.wx, this.wy, this.wx); 45 | } 46 | } 47 | } 48 | 49 | this.move = function() { 50 | for (var i = 0; i < this.rows; i++) { 51 | for (var j = 0; j < this.cols; j++) { 52 | this.nextGrid[i][j] = getNeighbourXOR(this.grid, i, j); 53 | } 54 | } 55 | var t = this.grid; 56 | this.grid = this.nextGrid; 57 | this.nextGrid = t; 58 | } 59 | 60 | this.run = function() { 61 | this.draw() 62 | this.move() 63 | } 64 | } 65 | 66 | 67 | var grid123 = new Array(50) 68 | for (var i = 0; i < 50; i++) { 69 | grid123[i] = new Array(50) 70 | } 71 | 72 | for (var i = 0; i < 50; i++) { 73 | for (var j = 0; j < 50; j++) { 74 | if (i === 0 || j === 0 || i === 49 || j === 49) { 75 | grid123[i][j] = 0 76 | } else { 77 | grid123[i][j] = Math.floor(Math.random() * 2) 78 | } 79 | } 80 | } 81 | 82 | game = new Game(grid123); 83 | -------------------------------------------------------------------------------- /game.js: -------------------------------------------------------------------------------- 1 | function getNeighbourCount(g, i, j) { 2 | var neighboursCount = 0; 3 | 4 | try { neighboursCount += g[i-1][j] ? 1 : 0; } catch (e) {} 5 | try { neighboursCount += g[i][j-1] ? 1 : 0; } catch (e) {} 6 | try { neighboursCount += g[i+1][j] ? 1 : 0; } catch (e) {} 7 | try { neighboursCount += g[i][j+1] ? 1 : 0; } catch (e) {} 8 | try { neighboursCount += g[i-1][j-1] ? 1 : 0; } catch (e) {} 9 | try { neighboursCount += g[i+1][j+1] ? 1 : 0; } catch (e) {} 10 | try { neighboursCount += g[i-1][j+1] ? 1 : 0; } catch (e) {} 11 | try { neighboursCount += g[i+1][j-1] ? 1 : 0; } catch (e) {} 12 | return neighboursCount 13 | } 14 | 15 | function newGrid(r, c) { 16 | var g = new Array(c) 17 | for (var i = 0; i < c; i++) { 18 | g[i] = new Array(r) 19 | } 20 | 21 | for (var i = 0; i < c; i++) { 22 | for (var j = 0; j < r; j++) { 23 | g[i][j] = 0; 24 | } 25 | } 26 | return g 27 | } 28 | 29 | function Game(grid) { 30 | this.grid = grid; 31 | 32 | this.rows = grid.length; 33 | this.cols = grid[0].length; 34 | 35 | this.wx = screenProperties.width / this.cols; 36 | this.wy = screenProperties.height / this.rows; 37 | 38 | this.nextGrid = newGrid(this.rows, this.cols); 39 | 40 | this.draw = function() { 41 | for (var i = 0; i < this.cols ; i++) { 42 | for(var j = 0 ; j < this.rows ; j++) { 43 | // stroke(255) 44 | fill(this.grid[i][j] ? 0 : 255) 45 | rect(i * this.wx, j * this.wy, this.wx, this.wy); 46 | } 47 | } 48 | } 49 | 50 | this.move = function() { 51 | for (var i = 0; i < this.rows; i++) { 52 | for (var j = 0; j < this.cols; j++) { 53 | let neighboursCount = getNeighbourCount(this.grid, i, j); 54 | if (this.grid[i][j] && (neighboursCount < 2 || neighboursCount > 3)) { 55 | this.nextGrid[i][j] = 0; 56 | } else if (!this.grid[i][j] && neighboursCount === 3) { 57 | this.nextGrid[i][j] = 1; 58 | } else { 59 | this.nextGrid[i][j] = this.grid[i][j]; 60 | } 61 | } 62 | } 63 | var t = this.grid; 64 | this.grid = this.nextGrid; 65 | this.nextGrid = t; 66 | } 67 | 68 | this.run = function() { 69 | this.draw() 70 | this.move() 71 | } 72 | } 73 | --------------------------------------------------------------------------------