Skip to content

Instantly share code, notes, and snippets.

@rick4470
Last active August 29, 2015 14:26
Show Gist options
  • Select an option

  • Save rick4470/ba664907d964c25743db to your computer and use it in GitHub Desktop.

Select an option

Save rick4470/ba664907d964c25743db to your computer and use it in GitHub Desktop.
Game of Life in javascript
var grid = initGrid(30, 30);
printGrid(grid);
startGame();
function startGame() {
(function generation(generations) {
setTimeout(function() {
var tempGrid = initGrid(30, 30);
for (var i = 0; i < grid.length; i++) {
for (var j = 0; j < grid[i].length; j++) {
if (grid[i][j] == 1 || grid[i][j] == 0) {
var neighbors = countNeighbors(i, j);
if (grid[i][j] == 1 && (neighbors < 2 || neighbors > 3)) {
tempGrid[i][j] = 0; // DIE
} else if ((grid[i][j] == 0) && neighbors == 3) {
tempGrid[i][j] = 1; // LIVE
}
}
}
}
for (i = 0; i < grid.length; i++) {
for (j = 0; j < grid[i].length; j++) {
if (grid[i][j] != 2)
grid[i][j] = tempGrid[i][j];
}
}
printGrid(grid);
if (--generations) generation(generations);
}, 150)
})(30000);
function countNeighbors(row, col) {
var neighbors = 0;
for (var j = col - 1; j < (col + 2); j++) {
for (var i = row - 1; i < (row + 2); i++) {
if (i > 0 && j > 0 && j < grid.length && i < grid.length) {
if (grid[i][j] !== undefined)
neighbors += grid[i][j];
}
}
}
return neighbors;
}
}
function initGrid(rows, cols, randomNumbersQuantity) {
var grid = [];
var randomNumbers = getRandomNumbers(randomNumbersQuantity);
for (var i = 0; i < rows; i++) {
var row = [];
for (var j = 0; j < cols; j++) {
if (i == 0 || i == (rows - 1) || j == (cols - 1) || j == 0) {
row.push(2);
} else {
row.push(0);
}
}
grid.push(row);
}
if (randomNumbersQuantity > 0) {
for (var i = 0; i < randomNumbers.length; i++) {
var numbers = randomNumbers[i];
grid[numbers.x][numbers.y] = 1;
}
} else {
for (var i = 0; i < rows; i++) {
for (var j = 0; j < cols; j++) {
if (grid[i][j] == 0) {
/*
if (j == 15){
if (i >= 2 && i <= 15){
grid[i][j] = 1;
grid[i+9][j] = 1;
grid[i+15][j] = 1;
}
}
if (j == 10){
if (i >= 2 && i <= 15){
grid[i][j] = 1;
grid[i+9][j] = 1;
grid[i+15][j] = 1;
}
}
if (j == 5){
if (i >= 2 && i <= 15){
grid[i][j] = 1;
grid[i+9][j] = 1;
grid[i+15][j] = 1;
}
}
if (j == 20){
if (i >= 2 && i <= 15){
grid[i][j] = 1;
grid[i+9][j] = 1;
grid[i+15][j] = 1;
}
} */
/* Talking Face */
if (i == 14) {
if (j > 10 && j < 20) {
grid[i][j] = 1;
}
}
if (j == 10) {
if (i >= 8 && i <= 10) {
grid[i][j] = 1;
}
}
if (j == 15) {
if (i >= 8 && i <= 10) {
grid[i][j] = 1;
}
}
if (j == 20) {
if (i >= 8 && i <= 10) {
grid[i][j] = 1;
}
}
}
}
}
}
return grid;
function getRandomNumbers(numbers) {
var randomNumbers = [];
var size = 0;
while (size < numbers) {
var Numbers = {};
for (var i = 0; i < 2; i++) {
if (i == 0)
Numbers.x = Math.floor(Math.random() * 29) + 1;
else
Numbers.y = Math.floor(Math.random() * 29) + 1;
}
var repeated = false;
for (var i = 0; i < randomNumbers.length; i++) {
if (randomNumbers[i].x == Numbers.x && randomNumbers[i].y == Numbers.y) {
repeated = true;
}
}
if (!repeated) {
randomNumbers.push(Numbers);
size++;
}
}
return randomNumbers;
}
}
function printGrid(grid) {
for (var i = 0; i < grid.length; i++) {
var rowData;
for (var j = 0; j < grid[i].length; j++) {
if (rowData == undefined)
rowData = '';
if (grid[i][j] == 2) {
if (i == 0 || i == (grid.length - 1))
rowData += ' > ';
else
rowData += ' V ';
} else {
if (grid[i][j] == 0)
rowData += ' . ';
else
rowData += ' * ';
}
if (j == grid.length - 1) {
rowData += '\n'
}
}
}
console.log(rowData);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment