public Point GetRoomWorldMapCentrePos(int roomNumner) { RoomMap item = null; Point pos = new Point(0, 0); item = RoomMapList.ElementAt(roomNumner - 1); if (item != null) { pos = new Point( item.TopLeftCol + (item.BottomRightCol - item.TopLeftCol) / 2, item.TopLeftRow + (item.BottomRightRow - item.TopLeftRow) / 2 ); } return(pos); }
//Main Data Structure public GameWorldInfo() { RoomMapFileInfo rmmapInfo = null; WorldMapInfo = new WorldMap(); rmmapInfo = RoomInfoFileReader.ReadRoomMapInfo(ConfigManager.RoomInfoFile); RoomMapList = rmmapInfo.roomaplist; dropPointlist = rmmapInfo.dropPointlist; boundaryPointlist = rmmapInfo.boundaryPointlist; if (RoomMapList != null) { NumberOfRooms = RoomMapList.Count; } The_Player = new Player(0, 0); //Init the Player GameRoom rm = null; for (int roomindex = 0; roomindex < NumberOfRooms; roomindex++) { GameRoomList.Add(new GameRoom(RoomMapList.ElementAt(roomindex))); rm = GameRoomList.ElementAt(roomindex); rm.GenerateEnvrionemnt(); NumberOfMonster = NumberOfMonster + rm.MonsterList.Count; NumberOfGlobin = NumberOfGlobin + rm.GlobinList.Count; } //Generate item in room int maxnoitem = ConfigManager.MaxChestPerWorld; int rmindex = 0; Random random = ConfigManager.RandomGen; Dictionary <string, string> ItemsHashTable = new Dictionary <string, string>(); int col = 0; int row = 0; Chest chestobj = null; String key = null; //Chest First for (int item = 0; item < maxnoitem; item++) { while (true) { rmindex = random.Next(0, NumberOfRooms - 1); //Get a Random Room if (!ItemsHashTable.ContainsKey(Convert.ToString(rmindex))) { ItemsHashTable.Add(Convert.ToString(rmindex), Convert.ToString(rmindex)); rm = GameRoomList.ElementAt(rmindex); while (true) { col = random.Next( ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + 1, ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + RoomMap.RoomEffectiveWidth - 1); row = random.Next(0, RoomMap.RoomHeight - 1); if (!rm.IsLocationInRoomTaken(col, row) && rm.Room_Map.IsEmpty(col, row)) { key = col + "-" + row; chestobj = new Chest("Treasure Chest", col + PlayUIWorldMap.mapBoxColPos, row + PlayUIWorldMap.mapBoxRowPos, key); rm.ChestList.Add(chestobj); rm.ItemsHashTable.Add(key, chestobj); rm.TotalItem++; break; } } } break; } } //Key Next maxnoitem = ConfigManager.MaxKeyPerWorld; Key keyobj = null; ItemsHashTable = new Dictionary <string, string>(); for (int item = 0; item < maxnoitem; item++) { while (true) { rmindex = random.Next(0, NumberOfRooms - 1); //Get a Random Room if (!ItemsHashTable.ContainsKey(Convert.ToString(rmindex))) { ItemsHashTable.Add(Convert.ToString(rmindex), Convert.ToString(rmindex)); rm = GameRoomList.ElementAt(rmindex); while (true) { col = random.Next( ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + 1, ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + RoomMap.RoomEffectiveWidth - 1); row = random.Next(0, RoomMap.RoomHeight - 1); if (!rm.IsLocationInRoomTaken(col, row) && rm.Room_Map.IsEmpty(col, row)) { key = col + "-" + row; keyobj = new Key("Treasure Chest Key", col + PlayUIWorldMap.mapBoxColPos, row + PlayUIWorldMap.mapBoxRowPos, key); rm.KeyList.Add(keyobj); rm.ItemsHashTable.Add(key, keyobj); rm.TotalItem++; break; } } } break; } } //Iron Armour Next maxnoitem = ConfigManager.MaxIronArmourPerWorld; IronArmour amobj = null; ItemsHashTable = new Dictionary <string, string>(); for (int item = 0; item < maxnoitem; item++) { while (true) { rmindex = random.Next(0, NumberOfRooms - 1); //Get a Random Room if (!ItemsHashTable.ContainsKey(Convert.ToString(rmindex))) { ItemsHashTable.Add(Convert.ToString(rmindex), Convert.ToString(rmindex)); rm = GameRoomList.ElementAt(rmindex); while (true) { col = random.Next( ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + 1, ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + RoomMap.RoomEffectiveWidth - 1); row = random.Next(0, RoomMap.RoomHeight - 1); if (!rm.IsLocationInRoomTaken(col, row) && rm.Room_Map.IsEmpty(col, row)) { key = col + "-" + row; amobj = new IronArmour("Iron Armour", col + PlayUIWorldMap.mapBoxColPos, row + PlayUIWorldMap.mapBoxRowPos, key); rm.ArmourList.Add(amobj); rm.ItemsHashTable.Add(key, amobj); rm.TotalItem++; break; } } } break; } } //Wooden Armour Next maxnoitem = ConfigManager.MaxWoodenArmourPerWorld; WoodenArmour wmobj = null; ItemsHashTable = new Dictionary <string, string>(); for (int item = 0; item < maxnoitem; item++) { while (true) { rmindex = random.Next(0, NumberOfRooms - 1); //Get a Random Room if (!ItemsHashTable.ContainsKey(Convert.ToString(rmindex))) { ItemsHashTable.Add(Convert.ToString(rmindex), Convert.ToString(rmindex)); rm = GameRoomList.ElementAt(rmindex); while (true) { col = random.Next( ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + 1, ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + RoomMap.RoomEffectiveWidth - 1); row = random.Next(0, RoomMap.RoomHeight - 1); if (!rm.IsLocationInRoomTaken(col, row) && rm.Room_Map.IsEmpty(col, row)) { key = col + "-" + row; wmobj = new WoodenArmour("Wooden Armour", col + PlayUIWorldMap.mapBoxColPos, row + PlayUIWorldMap.mapBoxRowPos, key); rm.ArmourList.Add(wmobj); rm.ItemsHashTable.Add(key, wmobj); rm.TotalItem++; break; } } } break; } } //Iron Sword Next maxnoitem = ConfigManager.MaxIronSwordPerWorld; IronSword iswbj = null; ItemsHashTable = new Dictionary <string, string>(); for (int item = 0; item < maxnoitem; item++) { while (true) { rmindex = random.Next(0, NumberOfRooms - 1); //Get a Random Room if (!ItemsHashTable.ContainsKey(Convert.ToString(rmindex))) { ItemsHashTable.Add(Convert.ToString(rmindex), Convert.ToString(rmindex)); rm = GameRoomList.ElementAt(rmindex); while (true) { col = random.Next( ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + 1, ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + RoomMap.RoomEffectiveWidth - 1); row = random.Next(0, RoomMap.RoomHeight - 1); if (!rm.IsLocationInRoomTaken(col, row) && rm.Room_Map.IsEmpty(col, row)) { key = col + "-" + row; iswbj = new IronSword("Iron Sword", col + PlayUIWorldMap.mapBoxColPos, row + PlayUIWorldMap.mapBoxRowPos, key); rm.WeaponList.Add(iswbj); rm.ItemsHashTable.Add(key, iswbj); rm.TotalItem++; break; } } } break; } } //Wooden Sword Next maxnoitem = ConfigManager.MaxWoodenSwordPerWorld; WoodenSword wswbj = null; ItemsHashTable = new Dictionary <string, string>(); for (int item = 0; item < maxnoitem; item++) { while (true) { rmindex = random.Next(0, NumberOfRooms - 1); //Get a Random Room if (!ItemsHashTable.ContainsKey(Convert.ToString(rmindex))) { ItemsHashTable.Add(Convert.ToString(rmindex), Convert.ToString(rmindex)); rm = GameRoomList.ElementAt(rmindex); while (true) { col = random.Next( ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + 1, ((RoomMap.RoomWidth - RoomMap.RoomEffectiveWidth) / 2) + RoomMap.RoomEffectiveWidth - 1); row = random.Next(0, RoomMap.RoomHeight - 1); if (!rm.IsLocationInRoomTaken(col, row) && rm.Room_Map.IsEmpty(col, row)) { key = col + "-" + row; wswbj = new WoodenSword("Wooden Sword", col + PlayUIWorldMap.mapBoxColPos, row + PlayUIWorldMap.mapBoxRowPos, key); rm.WeaponList.Add(wswbj); rm.ItemsHashTable.Add(key, wswbj); rm.TotalItem++; break; } } } break; } } }