This is a basic piece of code I've created that generates a random two-coloured level:
var map:Array = new Array();
var mLength:int = 28;
var mHeight:int = 16;
var mArea:int = mLength * mHeight;
var tileWidth:int = 20;
var tileHeight:int = 20;
var tileX:int = 0 - tileWidth;
var tileY:int = 0;
var genTile:int;
var genDone:Boolean = false;
var waterChance:int = 10;
var grassChance:int = 33;
var tile:Sprite = new Sprite();
var waterTile:Sprite = new Sprite();
var waterHolder:Sprite = new Sprite();
var genericTileHolder:Sprite = new Sprite();
var hitting:Boolean = false;
var i:int = 0;
for (i = 0; i < mArea; i++) {
if (map[i - 27] == 1) {
waterChance * 8;
grassChance / 2;
}
if (map[i - 28] == 1) {
waterChance * 8;
grassChance / 2;
}
if (map[i - 29] == 1) {
waterChance * 8;
grassChance / 2;
}
if (map[i - 1] == 1) {
waterChance * 8;
grassChance / 2;
}
tileX += tileWidth;
if (tileX >= mLength * tileWidth) {
tileX = 0;
tileY += tileHeight;
}
genTile = (Math.round((Math.random()*(waterChance+grassChance))));
if (0 < genTile < waterChance) {
waterTile.graphics.beginFill(0x0033CC);
waterTile.graphics.drawRect(tileX,tileY,tileWidth,tileHeight);
waterHolder.addChildAt(waterTile, 0);
map.push("1");
}
if ((waterChance + 1) < genTile && genTile < (waterChance + grassChance)) {
tile.graphics.beginFill(0x216B18);
tile.graphics.drawRect(tileX,tileY,tileWidth,tileHeight);
genericTileHolder.addChildAt(tile, 0);
map.push("2");
}
grassChance = 33;
waterChance = 10;
}
stage.addChildAt(waterHolder, 0);
stage.addChildAt(genericTileHolder, 1);
The problem is two-fold. One, whenever the array generates, the length seems to have a random bit of variation- using trace(map.length) I get a lot of different lengths, from 750 to 780, when it should only be 400 at most.
Secondly, whenever I trace the level itself, using trace(map) I find that the first element seems to be set by default to 1. I can't figure out why it's doing this, as it should be 2 at least once after 20 tries.