- Home /
Question by
ixtermanator · Apr 04, 2013 at 10:53 PM ·
javascriptgenerationalgorithmcave
Cave Algorithm Help
I am trying to optimize my cave algorithm so there are no blocks in the same place, but the console will give me errors about the lists, memory, or it will not work. So if any of you can help me with this problem in any way possible.
I am also trying to find how I can add walls to this algorithm, so if you know how I can implement walls too even a hint would be appreciated.
Here is the code I have marked where I think the trouble area is:
import System.Collections.Generic;
var segments : GameObject;
var boss : GameObject;
var enemy : GameObject[];
var tiny : boolean;
var small : boolean;
var med : boolean;
var large : boolean;
var huge : boolean;
var EPICLY_HUGE: boolean;
private var size : int;
private var RandomNum : int;
private var XPos : int;
private var ZPos : int;
private var XList = new List.<int>();
private var ZList = new List.<int>();
private var XNum : int;
private var ZNum : int;
private var XCon : int;
private var ZCon : int;
private var CurEnemy : GameObject;
private var EnemyNum : int;
private var num : int;
function Start(){
num = 0;
XCon = 0;
ZCon = 0;
XList.Add(0);
XCon = XList.Count - 1;
XNum = XList.Item[XCon];
ZList.Add(0);
ZCon = ZList.Count - 1;
ZNum = ZList.Item[ZCon];
num = XList.Count - 1;
if(tiny == true){
size = 256;
}
if(small == true){
size = 512;
}
if(med == true){
size = 1024;
}
if(large == true){
size = 2048;
}
if(huge == true){
size = 4096;
}
if(EPICLY_HUGE == true){
size = 8192;
}
GenDungeon();
}
function GenDungeon(){
for(var b : int = 0; b < 4; b++){
XPos = 0;
ZPos = 0;
for(var x : int = 0; x <= size; x++){
EnemyNum = Random.Range(0, enemy.Length);
CurEnemy = enemy[EnemyNum];
RandomNum = Random.Range(1,5);
// The 10 and -10 is scale of the cube.
if(RandomNum == 1){
XPos = 10 + XPos;
}
if(RandomNum == 2){
XPos = -10 + XPos;
}
if(RandomNum == 3){
ZPos = 10 + ZPos;
}
if(RandomNum == 4){
ZPos = -10 + ZPos;
}
num = 0;
/**
This is the problem section to as far as I can see
**/
/** for(var y : int = 0; y < XCon + 1; y++){
if(XPos == XList.Item[num]){
if(ZPos == ZList.Item[num]){
if(num <= XCon){
num = 1 + num;
}
Debug.Log("dup!!!");
}
}
else{
XList.Add(XPos);
ZList.Add(ZPos);
XCon = XList.Count - 1;
ZCon = ZList.Count - 1;
XNum = XList.Item[XCon];
ZNum = ZList.Item[ZCon];
}
}**/
Instantiate(segments, Vector3 (0 + XPos, 0, 0 + ZPos), Quaternion.identity);
Instantiate(CurEnemy, Vector3 (0 + XPos, 7, 0 + ZPos), Quaternion.identity);
if(x == size){
Instantiate(boss, Vector3 (0 + XPos, 10, 0 + ZPos), Quaternion.identity);
}
}
}
}
Comment