I see several issues with the initialization, aside from the obvious gigantic literal array.
Ambiguous element IDs: You concatenate x.toString() + y.toString()
for the element IDs. When you refer to ID 121, is that (12, 1) or (1, 21)?
Namespace pollution (global variables): alive
, counter
, xcor
, ycor
, and idAssign
do not need to be in the global scope. The simple fix is to initialize the board using an Immediately Invoked Function Expression (IIFE):
var board = (function(dim, min) {
var b = new Array(dim);
// TODO: initialize b
return b;
})(30, 5);
I would go a step further and change it to a constructor (see below).
Underpopulation: You use the following code to generate the initial alive cells:
//number of initial alive cells
var number = Math.floor((Math.random()*900)+5);
/* Some code here which should not have been placed
in an intervening position */
//generate coordinates for the cells that are alive
for (var i=0; i < number; i++) {
xcor = Math.floor((Math.random()*29)+0);
ycor = Math.floor((Math.random()*29)+0);
board[xcor][ycor] = "x";
}
You'll be breathing life into some cells twice, so number
is actually an upper bound, not an exact count, of the number of cells that are initially alive. Perhaps you don't care about the exact count, since it's random anyway, but at least the "number of initial alive cells" comment should be made more accurate.
To get an exact count, populate the first n cells, then do a shuffle.
"x"
as a boolean: You use "x"
to basically serve as a boolean value; true
would be more conventional.
Here's how I would write it:
function Board(dim, min) {
var b = new Array(dim);
for (var i = 0; i < b.length; i++) {
b[i] = new Array(dim);
}
// Give life to a random number of cells
var initPopulation = min + 1 + Math.floor(dim * dim * Math.random() - min);
for (var i = 0; i < initPopulation; i++) {
b[i / dim >> 0][i % dim] = true;
}
// Two-dimensional Fisher-Yates shuffle
for (var i = dim * dim - 1; i > 0; i--) {
var j = Math.floor((i + 1) * Math.random());
var swap = b[i / dim >> 0][i % dim];
b[j / dim >> 0][j % dim] = b[i / dim >> 0][i % dim];
b[i / dim >> 0][i % dim] = swap;
}
this.array = b;
}
var board = new Board(30, 5);