Hi! I'm having trouble with this level generator I'm making. Here it is:
package com
{
import flash.sampler.NewObjectSample;
import org.flixel.*;
/**
* ...
* @author
*/
public class Level extends FlxGroup
{
private var _numTilesX:uint;
private var _numTilesY:uint;
public var levelMap:FlxTilemap;
private var _levelArray1:Array;
private var _levelArray2:Array;
private const _tileEmpty:uint = 0;
private const _tileWall:uint = 1;
private var _diggers:Array;
private var _activeDiggers:Boolean;
//for debugging
private var numIterate:uint = 0;
[Embed(source = "../res/tileMap.png")] private const levelPNG:Class;
public function Level():void
{
_numTilesX = 40;
_numTilesY =30;
initLevelArrays();
digLevel();
generateMap();
}
public function initLevelArrays():void
{
_levelArray1 = new Array();
_levelArray2 = new Array();
for (var yi:uint = 0; yi < _numTilesY; yi++)
{
_levelArray1.push(new Array);
for (var xi:uint=0; xi < _numTilesX; xi++)
{
_levelArray1[yi].push(_tileWall);
}
}
}
public function generateMap():void
{
for (var yi:uint = 0; yi < _numTilesY; yi++)
{
for (var xi:uint = 0; xi < _numTilesX; xi++)
{
_levelArray2.push(_levelArray1[yi][xi]);
}
}
levelMap = new FlxTilemap();
levelMap.loadMap(FlxTilemap.arrayToCSV(_levelArray2, _numTilesX), levelPNG, 16, 16);
}
public function digLevel():void
{
_diggers = new Array();
//create first digger
_diggers.push(new Digger(_numTilesX / 2, _numTilesY / 2, _levelArray1));
_activeDiggers = checkActiveDiggers();
trace(_activeDiggers);
while (_activeDiggers && _diggers.length!=400)
{
for (var i:uint = 0; i < _diggers.length;i++)
{
var digger:Digger = _diggers;
if (digger.activeDigger)
{
digger.moveAndDig();
//trace(digger.x);
//trace(digger.y);
numIterate ++;
}
}
if (numIterate >= 30) digger.activeDigger = false;
_activeDiggers = checkActiveDiggers();
}
}
public function checkActiveDiggers():Boolean
{
//check if there are active diggers if none then finish digging level
for (var i:uint = 0; i < _diggers.length; i++)
{
if (_diggers.activeDigger) return true;
}
return false;
}
}
}
and here's for the digger class:
package com
{
import org.flixel.*;
/**
* ...
* @author
*/
public class Digger extends FlxObject
{
private const _tileEmpty:uint = 0;
private const _tileWall:uint = 1;
private var _levelArray:Array;
public var activeDigger:Boolean;
public function Digger(xInTiles:uint,yInTiles:uint,levelArray:Array):void
{
super(xInTiles, yInTiles);
trace(x);
trace(y);
_levelArray = levelArray;
activeDigger = true;
_levelArray[y]
}
public function moveAndDig():void
{
var targetLoc:FlxPoint = getTargetLoc();
//trace(targetLoc);
x = targetLoc.x;
y = targetLoc.y;
_levelArray[y]
}
public function getTargetLoc():FlxPoint
{
var availableSpaces:Array = new Array();
for (var i:int = -1; i < 1; i++)
{
for (var j:int = -1; j < 1; j++)
{
//trace(y);
//trace(i);
//trace("y+i=" + (y + i));
//trace("x+j=" + (x + j));
//if (Math.abs(y + i) == 1 || Math.abs(x + j) == 1) continue;
//if (i < 0 || j < 0 || i > _levelArray.length || j > _levelArray
.length) continue;
if (_levelArray[y + i][x + j] == _tileWall) availableSpaces.push(new FlxPoint(x + j, y + i));
}
}
var choice:uint = Math.floor(Math.random() * availableSpaces.length);
trace(choice);
if (!choice) choice = 0;
return availableSpaces[choice];
}
}
}anyway, the problem seems to be that choice is undefined. I can't find the problem to why that is. By the way this is what I'm trying to make:
http://www.noelberry.ca/category/tutorialsarticles/ .
Thanks!