//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; } } }
public RoomMapSearchResult SearchRoom(int roomnumber, int col, int row, int dir) { // ONLY ALL is implemented RoomMapSearchResult searchresult = null; string key = ""; GameRoom gm = null; int search_col = 0; int search_row = 0; RoomMapSearchResult.SEARCH_TYPE searchtype = RoomMapSearchResult.SEARCH_TYPE.ALL_DIRECTION; if (roomnumber >= 1 && roomnumber <= NumberOfRooms) { search_col = col; search_row = row; gm = GameRoomList.ElementAt(roomnumber - 1); searchtype = (RoomMapSearchResult.SEARCH_TYPE)dir; searchresult = new RoomMapSearchResult(); if (searchtype == RoomMapSearchResult.SEARCH_TYPE.ALL_DIRECTION) { //North search_col = col; search_row = row; search_row--; key = search_col + "-" + search_row; if (gm.ItemsHashTable.ContainsKey(key) && ((IAvailable)gm.ItemsHashTable[key]).isAvailable) { searchresult.ItemFound++; searchresult.North_Item = gm.ItemsHashTable[key]; if (AutoAddToInventory(gm.ItemsHashTable[key], searchresult)) { gm.ItemsHashTable.Remove(key); } else { ProcessInventory(gm.ItemsHashTable[key], searchresult); } } //North East search_col = col; search_row = row; search_row--; search_col++; key = search_col + "-" + search_row; if (gm.ItemsHashTable.ContainsKey(key) && ((IAvailable)gm.ItemsHashTable[key]).isAvailable) { searchresult.ItemFound++; searchresult.NorthEast_Item = gm.ItemsHashTable[key]; if (AutoAddToInventory(gm.ItemsHashTable[key], searchresult)) { gm.ItemsHashTable.Remove(key); } else { ProcessInventory(gm.ItemsHashTable[key], searchresult); } } //North West search_col = col; search_row = row; search_row--; search_col--; key = search_col + "-" + search_row; if (gm.ItemsHashTable.ContainsKey(key) && ((IAvailable)gm.ItemsHashTable[key]).isAvailable) { searchresult.ItemFound++; searchresult.NorthWest_Item = gm.ItemsHashTable[key]; if (AutoAddToInventory(gm.ItemsHashTable[key], searchresult)) { gm.ItemsHashTable.Remove(key); } else { ProcessInventory(gm.ItemsHashTable[key], searchresult); } } //South search_col = col; search_row = row; search_row++; key = search_col + "-" + search_row; if (gm.ItemsHashTable.ContainsKey(key) && ((IAvailable)gm.ItemsHashTable[key]).isAvailable) { searchresult.ItemFound++; searchresult.South_Item = gm.ItemsHashTable[key]; if (AutoAddToInventory(gm.ItemsHashTable[key], searchresult)) { gm.ItemsHashTable.Remove(key); } else { ProcessInventory(gm.ItemsHashTable[key], searchresult); } } //South East search_col = col; search_row = row; search_row++; search_col++; key = search_col + "-" + search_row; if (gm.ItemsHashTable.ContainsKey(key) && ((IAvailable)gm.ItemsHashTable[key]).isAvailable) { searchresult.ItemFound++; searchresult.SouthEast_Item = gm.ItemsHashTable[key]; if (AutoAddToInventory(gm.ItemsHashTable[key], searchresult)) { gm.ItemsHashTable.Remove(key); } else { ProcessInventory(gm.ItemsHashTable[key], searchresult); } } //South West search_col = col; search_row = row; search_row++; search_col--; key = search_col + "-" + search_row; if (gm.ItemsHashTable.ContainsKey(key) && ((IAvailable)gm.ItemsHashTable[key]).isAvailable) { searchresult.ItemFound++; searchresult.West_Item = gm.ItemsHashTable[key]; if (AutoAddToInventory(gm.ItemsHashTable[key], searchresult)) { gm.ItemsHashTable.Remove(key); } else { ProcessInventory(gm.ItemsHashTable[key], searchresult); } } //East search_col = col; search_row = row; search_col++; key = search_col + "-" + search_row; if (gm.ItemsHashTable.ContainsKey(key) && ((IAvailable)gm.ItemsHashTable[key]).isAvailable) { searchresult.ItemFound++; searchresult.East_Item = gm.ItemsHashTable[key]; if (AutoAddToInventory(gm.ItemsHashTable[key], searchresult)) { gm.ItemsHashTable.Remove(key); } else { ProcessInventory(gm.ItemsHashTable[key], searchresult); } } //West search_col = col; search_row = row; search_col--; key = search_col + "-" + search_row; if (gm.ItemsHashTable.ContainsKey(key) && ((IAvailable)gm.ItemsHashTable[key]).isAvailable) { searchresult.ItemFound++; searchresult.East_Item = gm.ItemsHashTable[key]; if (AutoAddToInventory(gm.ItemsHashTable[key], searchresult)) { gm.ItemsHashTable.Remove(key); } else { ProcessInventory(gm.ItemsHashTable[key], searchresult); } } } } return(searchresult); }