private void Inorder(LittleRoom room) { if (room.LeftChild != null && room.RightChild != null) { Inorder(room.LeftChild); Inorder(room.RightChild); SetDoor(room.Wall.PositionX, room.Wall.PositionY, room.Wall.Width, room.Wall.Height); } else { SetRoom(room.PositionX, room.PositionY, room.Width, room.Height); } }
private void GenerateLittleRoom(LittleRoom room) { //if (Random.Range(0, 2) == 0) //縱的 if (_wallAmount % 2 == 0) { int wallX = 0; if (GetRandomPosition(room.PositionX, room.Width, MinWidth, out wallX)) { room.LeftChild = new LittleRoom(room.PositionX, room.PositionY, wallX - room.PositionX, room.Height); room.RightChild = new LittleRoom(wallX + 1, room.PositionY, room.PositionX + room.Width - wallX - 1, room.Height); room.Wall = new LittleRoom(wallX, room.PositionY, 1, room.Height); } else { Inorder(_firstLittleRoom); //MapPainter.Instance.Generate(_array); } } else //橫的 { int wallY = 0; if (GetRandomPosition(room.PositionY, room.Height, MinHeight, out wallY)) { room.LeftChild = new LittleRoom(room.PositionX, room.PositionY, room.Width, wallY - room.PositionY); room.RightChild = new LittleRoom(room.PositionX, wallY + 1, room.Width, room.PositionY + room.Height - wallY - 1); room.Wall = new LittleRoom(room.PositionX, wallY, room.Width, 1); } else { Inorder(_firstLittleRoom); } } if (room.LeftChild != null && room.RightChild != null) { _wallAmount--; if (_wallAmount == 0) { Inorder(_firstLittleRoom); } else { _leafList.Remove(room); _leafList.Add(room.LeftChild); _leafList.Add(room.RightChild); LittleRoom cutRoom = _leafList[Random.Range(0, _leafList.Count)]; GenerateLittleRoom(cutRoom); } } }
private static int nbRooms; // nombre de salles principales, utile pour changer le nombre facilement pendant le dev du jeu public static void createMainRooms() { localPlace = new int[2]; localPlace[0] = -1;//hub localPlace[1] = 0; nbRooms = 9; mainRooms = new LittleRoom[nbRooms]; fightRooms = new LittleRoom[nbRooms][]; /*construction des salles : * organisation actuellle : 0 -> salle 1, ouverte ; 1:6 -> salle 2:7 -> fermées; * 8 -> salle boss -> fermée ; 9+ -> salles bonus -> ouvertes */ //construction de toutes les salles principales : //s01 : îles ( -> n') mainRooms[0] = new LittleRoom(0, null /**/); //marche pas pour le moment //s02 : n' ( -> eau) mainRooms[1] = new LittleRoom(1, null /**/); //marche pas pour le moment //s03 : eau ( -> rat) mainRooms[2] = new LittleRoom(2, null /**/); //marche pas pour le moment //s04 : rat ( -> nid (double salle partie 1)) mainRooms[3] = new LittleRoom(3, null /**/); //marche pas pour le moment //s05 : nid ( -> or) mainRooms[4] = new LittleRoom(4, null /**/); //marche pas pour le moment //s06 : or ( -> nid (double salle partie 2)) mainRooms[5] = new LittleRoom(5, null /**/); //marche pas pour le moment //s07 : nid ( -> argent) mainRooms[6] = new LittleRoom(6, null /**/); //marche pas pour le moment //s08 : argent ( -> Boss) mainRooms[7] = new LittleRoom(7, null /**/); //marche pas pour le moment //s09 : Boss mainRooms[8] = new LittleRoom(8, null /**/); //marche pas pour le moment } public static void createFightRooms() { for (int kiki = 0; kiki < nbRooms; kiki++) { fightRooms[kiki] = new LittleRoom[randomLength(kiki)]; for (int i = 0; i < fightRooms[kiki].Length; i++) { fightRooms[kiki][i] = new LittleRoom(kiki); } } } public static BoardManager redirect(bool up)//monte / descend depuis une fightRoom { int[] lP = localPlace; BoardManager direction; /* * Cas 1 : * il monte * Cas 1.1 : * vers une fightRoom (milieu de tableau) * * Cas 1.2 : * vers une mainRoom (fin de tableau) * * Cas 2 : * il descend * Cas 2.1 : * vers une fightRoom (milieu de tableau) * * Cas 2.2 : * vers le hub (début de tableau) */ if (up) { if (lP[1] == fightRooms[lP[0]].Length - 1) //avancé du chemin = à longueur du chemin -1 || dernière salle chemin { direction = mainRooms[lP[0]].getBoardM(); //donne le BoardM de la mainRoom associé à ce chemin } else { lP[1]++; direction = fightRooms[lP[0]][lP[1]].getBoardM(); } } else { if (lP[1] == 0) { direction = null /**/; //mettre le BoardM du hub } else { lP[1]--; direction = fightRooms[lP[0]][lP[1]].getBoardM(); } } return(direction); }
protected override void SetSpace() { _firstLittleRoom = new LittleRoom(0, 0, Width, Height); GenerateLittleRoom(_firstLittleRoom); }