/// <summary> /// Generate new labirinth level /// </summary> /// <param name="stairsX">X Coordinate for stairs to up</param> /// <param name="stairsY">Y Coordinate for stairs to up</param> /// <returns></returns> public ILabyrinthLevel GenerateLevel(int stairsX = 0, int stairsY = 0, int levelNumber = 0) { //if (levelNumber % 2 == 0) //{ // Width++; //} //if (levelNumber % 3 == 0) //{ // Height++; //} LabLevel = new LabirinthLevel(Width, Height); for (int y = 0; y < LabLevel.Height; y++) { var row = new List <BaseCellObject>(); for (int x = 0; x < LabLevel.Width; x++) { var wall = new Wall(x, y); row.Add(wall); } LabLevel.Cells.Add(row); } GeneratePathes(stairsX, stairsY); GenerateCoins(levelNumber); GenerateGoldmine(levelNumber); var deadEnd = GetRandom( LabLevel.AllCells() .Where(x => x is Ground || x is Coin) .Where(groundCell => GetNearCells(groundCell) .Where(x => !(x is Wall)) .Count() == 1).ToList() ); if (deadEnd == null) { deadEnd = GetRandom(LabLevel.AllCells().Where(x => x is Ground || x is Coin).ToList()); } LabLevel[deadEnd.X, deadEnd.Y] = new StairsDown(deadEnd.X, deadEnd.Y); return(LabLevel); }
public ILabyrinthLevel GenerateStoreLevel(int levelNumber = 0) { LabLevel = new LabirinthLevel(Width, Height); for (int y = 0; y < LabLevel.Height; y++) { var row = new List <BaseCellObject>(); for (int x = 0; x < LabLevel.Width; x++) { var wall = new Wall(x, y); row.Add(wall); } LabLevel.Cells.Add(row); } LabLevel[0, 0] = new StairsDown(0, 0); return(LabLevel); }