public static void Trade(ref Player player, ref Vendor vendor) { if (player.treasures.Count < 1 && player.gold < 1000) { Console.WriteLine($"Sorry, {player.race}. You are too poor to trade."); SharedMethods.WaitForKey(); } else { if (player.treasures.Count > 0) { List <string> treasuresSold = new List <string>(); foreach (string item in player.treasures) { offerAmount = rand.Next(1, 5001); string question = $"Do you want to sell {item} for {offerAmount}"; Dictionary <char, string> choicesDict = new Dictionary <char, string> { { 'Y', "Yes" }, { 'N', "No" } }; string[] choice = vtMenu.Menu(question, choicesDict, ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)); if (choice[0] == "Y") { Console.WriteLine($"\nYou have accepted the Vendor's offer for {item}."); treasuresSold.Add(item); vendor.treasures.Add(item); player.gold += offerAmount; } } foreach (string item in treasuresSold) { player.treasures.Remove(item); } if (player.gold < 1000) { Console.WriteLine($"\nSorry, {player.race}. You are too poor to trade."); SharedMethods.WaitForKey(); } } if ((player.gold > 1499) && (player.armor != "Plate")) { Player.GetPlayerArmor(ref player, new int[] { 1500, 2000, 2500 }); } if ((player.gold > 1499) && (player.weapon != "Sword")) { Player.GetPlayerWeapon(ref player, new int[] { 1500, 2000, 2500 }); } if ((player.gold > 999) && (!player.lamp)) { Player.GetLamp(ref player, 1000); } if (player.gold > 999) { GetPlayerPotion(ref player, 1000); } } }
static void CheckCurses(ref Player player, ref string[,,] knownMap) { if (player.treasures.Contains("The Ruby Red") && player.lethargy == true) { player.lethargy = false; Console.BackgroundColor = ConsoleColor.DarkGray; Console.WriteLine("The Ruby Red cures your Lethargy!"); Console.BackgroundColor = ConsoleColor.Black; SharedMethods.WaitForKey(); } if (player.treasures.Contains("The Pale Pearl") && player.leech == true) { player.leech = false; Console.BackgroundColor = ConsoleColor.DarkGray; Console.WriteLine("The Pale Pearl heals the curse of the Leech!"); Console.BackgroundColor = ConsoleColor.Black; SharedMethods.WaitForKey(); } if (player.leech == true) { player.DecStrength(new Random().Next(0, 3)); } if (player.treasures.Contains("The Green Gem") && player.forgetfulness == true) { player.forgetfulness = false; Console.BackgroundColor = ConsoleColor.DarkGray; Console.WriteLine("The Green Gem cures your forgetfulness!"); Console.BackgroundColor = ConsoleColor.Black; SharedMethods.WaitForKey(); } if (player.forgetfulness == true) { int[] forgetRoom = Map.ForgetMapRoom(knownMap); knownMap[forgetRoom[0], forgetRoom[1], forgetRoom[2]] = "X"; } if (player.treasures.Contains("The Opal Eye") && player.blind == true) { player.blind = false; Console.BackgroundColor = ConsoleColor.DarkGray; Console.WriteLine("The Opal Eye cures your blindness!"); Console.BackgroundColor = ConsoleColor.Black; SharedMethods.WaitForKey(); } if (player.treasures.Contains("The Blue Flame") && player.bookStuck == true) { player.bookStuck = false; Console.BackgroundColor = ConsoleColor.DarkGray; Console.WriteLine("The Blue Flame burns the book off your hands!"); Console.BackgroundColor = ConsoleColor.Black; SharedMethods.WaitForKey(); } }
public static void GetPlayerPotion(ref Player player, int cost) { Console.WriteLine(); Dictionary <char, string> choicesDict = new Dictionary <char, string>(); for (int i = 0; i < GameCollections.Abilities.Count; i++) { choicesDict.Add(i.ToString()[0], $"{GameCollections.Abilities[i]}, {cost} Gold Pieces"); } choicesDict.Add(choicesDict.Count.ToString()[0], $"None, 0 Gold Pieces"); string[] choice; string numberOnly; do { choice = vtMenu.Menu($"You have {player.gold} Gold Pieces to buy items, what type of Potion do you want to purchase", choicesDict, ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)); numberOnly = Regex.Replace(choice[1], "[^0-9]", ""); if (!(Convert.ToInt32(numberOnly) > player.gold) && !(choice[1].Split(',')[0] == "None")) { switch (choice[1].Split(',')[0]) { case "Dexterity": player.IncDexterity(rand.Next(1, 6)); Console.WriteLine($"\nDexterity={player.dexterity}"); SharedMethods.WaitForKey(); break; case "Intelligence": player.IncIntelligence(rand.Next(1, 6)); Console.WriteLine($"\nIntelligence={player.intelligence}"); SharedMethods.WaitForKey(); break; case "Strength": player.IncStrength(rand.Next(1, 6)); Console.WriteLine($"\nStrength={player.strength}"); SharedMethods.WaitForKey(); break; } player.gold -= Convert.ToInt32(numberOnly); } else { if (!(choice[1].Split(',')[0] == "None")) { Console.WriteLine($"\n\tSorry, {player.race}, you don't have that much gold left."); } } } while (player.gold > 999 && !(choice[1].Split(',')[0] == "None")); }
static void PlayerRetreat(ref Player player, ref Vendor vendor, string[,,] theMap) { if ((rand.Next(0, 101) - player.dexterity) > 50) { BattleVendor.VendorAttack(ref player, ref vendor); } if (player.strength > 0) { YWMenu battleMenu = new YWMenu(); string question = $"Retreat which way"; Dictionary <char, string> choicesDict = new Dictionary <char, string> { { 'N', "North" }, { 'S', "South" }, { 'E', "East" }, { 'W', "West" } }; string[] choice = battleMenu.Menu(question, choicesDict, ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)); switch (choice[1]) { case "North": player.North(theMap); Console.WriteLine("\nYou retreat to the North!"); SharedMethods.WaitForKey(); break; case "South": player.South(theMap); Console.WriteLine("\nYou retreat to the South!"); SharedMethods.WaitForKey(); break; case "East": player.East(theMap); Console.WriteLine("\nYou retreat to the East!"); SharedMethods.WaitForKey(); break; case "West": player.West(theMap); Console.WriteLine("\nYou retreat to the West!"); SharedMethods.WaitForKey(); break; } } }
static void PlayerCast(ref Player player, ref Vendor vendor) { YWMenu battleMenu = new YWMenu(); string question = $"What spell do you want to cast"; Dictionary <char, string> choicesDict = new Dictionary <char, string> { { 'W', "Web" }, { 'F', "Fireball" }, { 'D', "Deathspell" } }; string[] choice = battleMenu.Menu(question, choicesDict, ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)); switch (choice[0]) { case "W": Console.WriteLine($"\nYou've caught the {vendor.race} in a web, now it can't attack"); vendor.webbedTurns = rand.Next(1, 11); player.strength -= 1; break; case "F": Console.WriteLine($"\nYou blast the {vendor.race} with a fireball."); vendor.strength -= rand.Next(1, 11); player.intelligence -= 1; player.strength -= 1; break; case "D": if ((player.intelligence > vendor.intelligence) && (rand.Next(1, 9) < 7)) { Console.WriteLine($"\nDEATH! The {vendor.race} is dead."); vendor.strength = 0; } else { Console.WriteLine($"\nDEATH! The STUPID {player.race}'s death."); player.strength = 0; SharedMethods.WaitForKey(); } break; } }
public static void PlayerExit(Player player) { Console.Clear(); Console.WriteLine("**** YOU EXITED THE CASTLE! ****"); Console.WriteLine($"\n\tYou were in the castle for {player.turns}."); Console.WriteLine("\n\tWhen you exited, you had:"); if (player.orbOfZot == true) { Console.Write("\n\t"); Console.BackgroundColor = ConsoleColor.DarkMagenta; Console.WriteLine("*** Congratulations, you made it out alive with the Orb Of Zot ***"); Console.BackgroundColor = ConsoleColor.Black; } else { Console.WriteLine("\n\tYour miserable life"); } Console.WriteLine($"\nYou were a {player.sex} {player.race}."); if (player.armor.Length > 0) { Console.WriteLine($"\nYou wore {player.armor} armor."); } if (player.weapon.Length > 0) { Console.WriteLine($"\nYou had a {player.weapon}."); } Console.WriteLine($"\nYou had {player.gold} Gold Pieces and {player.flares} flares."); if (player.lamp == true) { Console.WriteLine("\nYou had a lamp."); } if (player.runeStaff == true) { Console.WriteLine("\nYou had the RuneStaff."); } if (player.treasures.Count > 0) { Console.WriteLine($"\nYou also had the following treasures: {string.Join(", ", player.treasures)}"); } GameCollections.ExitCode = 0; SharedMethods.WaitForKey(); }
public static void CheckIfDead(Player player, ref bool fallThrough) { if (player.dexterity < 1 || player.intelligence < 1 || player.strength < 1) { Console.Clear(); fallThrough = true; GameCollections.ExitCode = 0; Console.BackgroundColor = ConsoleColor.DarkMagenta; Console.WriteLine("\n**** YOU DIED! ****"); Console.BackgroundColor = ConsoleColor.Black; Console.WriteLine("\n\tWhen you died: "); Console.WriteLine($"\nYou were a {player.sex} {player.race}."); if (player.armor.Length > 0) { Console.WriteLine($"\nYou wore {player.armor} armor."); } if (player.weapon.Length > 0) { Console.WriteLine($"\nYou had a {player.weapon}."); } Console.WriteLine($"\nYou had {player.gold} Gold Pieces and {player.flares} flares."); if (player.lamp == true) { Console.WriteLine("\nYou had a lamp."); } if (player.runeStaff == true) { Console.WriteLine("\nYou had the RuneStaff."); } if (player.treasures.Count > 0) { Console.WriteLine($"\nYou also had the following treasures: {string.Join(", ", player.treasures)}"); } Console.WriteLine($"\nYou * were * alive for {player.turns} turns."); SharedMethods.WaitForKey(); } }
public static void Action(ref Player player, string[] action, ref string[,,] knownMap, ref string[,,] theMap) { YWMenu menu = new YWMenu(); switch (action[0]) { case "M": Map.DisplayLevel(knownMap, player); SharedMethods.WaitForKey(); break; case "N": if (player.location[0] == 0 && player.location[1] == 0 && player.location[2] == 3) { Program.PlayerExit(player); break; } else { player.North(knownMap); break; } case "S": player.South(knownMap); break; case "E": player.East(knownMap); break; case "W": player.West(knownMap); break; case "F": if (player.flares > 0) { if (!player.blind) { Map.RevealMap(player.location, theMap, ref knownMap); player.flares -= 1; Map.DisplayLevel(knownMap, player); } else { Console.WriteLine("Lighting a flare won't do you any good since you are BLIND!"); } } else { Console.WriteLine("\n{0}\n", ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)[new Random().Next(0, GameCollections.ErrorMesssages.Count)]); } SharedMethods.WaitForKey(); break; case "T": string teleportTo; int[] teleCoordinates = new int[3]; if (player.runeStaff == true) { do { Console.Clear(); Console.WriteLine(); Console.Write("\rTeleport where (Example: For Level 3, Row 5, Column 2 type: 3,5,2): "); teleportTo = Console.ReadLine(); teleportTo = teleportTo.Replace(" ", ""); try { teleCoordinates = Array.ConvertAll(teleportTo.Split(','), int.Parse); if (teleCoordinates[0] - 1 < theMap.GetLength(0) && teleCoordinates[1] - 1 < theMap.GetLength(1) && teleCoordinates[2] - 1 < theMap.GetLength(2)) { player.location[0] = teleCoordinates[0] - 1; player.location[1] = teleCoordinates[1] - 1; player.location[2] = teleCoordinates[2] - 1; } else { teleportTo = ""; Console.WriteLine("* Invalid * Coordinates"); SharedMethods.WaitForKey(); } } catch (Exception) { teleportTo = ""; Console.WriteLine("* Invalid * Coordinates"); SharedMethods.WaitForKey(); } } while (teleportTo.Length < 1); Console.WriteLine($"\n\tTeleporting to: ({teleCoordinates[0]}, {teleCoordinates[1]}, {teleCoordinates[2]})"); for (int i = 0; i < 30; i++) { Console.Write("."); Thread.Sleep(100); } } else { Console.WriteLine($"\nSorry, {player.race}, but you need the RuneStaff to teleport!\n"); SharedMethods.WaitForKey(); } break; case "L": if (player.lamp == true) { if (!player.blind) { string[] choice = menu.Menu("Shine lamp which direction", new Dictionary <char, string> { { 'N', "North" }, { 'S', "South" }, { 'E', "East" }, { 'W', "West" } }, ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)); Map.RevealRoom(choice[1], player.location, theMap, ref knownMap); Map.DisplayLevel(knownMap, player); } else { Console.WriteLine($"You're BLIND and can't see anything, silly {player.race}."); SharedMethods.WaitForKey(); } } else { Console.WriteLine("\n{0}\n", ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)[new Random().Next(0, GameCollections.ErrorMesssages.Count)]); } SharedMethods.WaitForKey(); break; case "D": if (knownMap[player.location[0], player.location[1], player.location[2]] == "DownStairs") { player.Down(); } else { Console.WriteLine("\n{0}\n", ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)[new Random().Next(0, GameCollections.ErrorMesssages.Count)]); SharedMethods.WaitForKey(); } break; case "U": if (knownMap[player.location[0], player.location[1], player.location[2]] == "UpStairs") { player.Up(); } else { Console.WriteLine("\n{0}\n", ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)[new Random().Next(0, GameCollections.ErrorMesssages.Count)]); SharedMethods.WaitForKey(); } break; case "G": if (knownMap[player.location[0], player.location[1], player.location[2]] == "Orb") { if (!player.blind) { Console.WriteLine(Orb.OrbEvent(ref player, ref theMap)); } else { Console.WriteLine("The only thing you see is darkness because you are blind"); } SharedMethods.WaitForKey(); } else { Console.WriteLine("\n{0}\n", ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)[new Random().Next(0, GameCollections.ErrorMesssages.Count)]); SharedMethods.WaitForKey(); } break; case "O": if (knownMap[player.location[0], player.location[1], player.location[2]] == "Book") { if (!player.blind) { Console.WriteLine(Book.BookEvent(ref player, ref theMap)); } else { Console.WriteLine($"Sorry, {player.race}, it's not written in Braille!"); } SharedMethods.WaitForKey(); } else if (knownMap[player.location[0], player.location[1], player.location[2]] == "Chest") { Console.WriteLine(Chest.ChestEvent(ref player, ref theMap, ref knownMap)); SharedMethods.WaitForKey(); } else { Console.WriteLine("\n{0}\n", ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)[new Random().Next(0, GameCollections.ErrorMesssages.Count)]); SharedMethods.WaitForKey(); } break; case "P": if (knownMap[player.location[0], player.location[1], player.location[2]] == "Pool") { Console.WriteLine(Pool.PoolEvent(ref player)); SharedMethods.WaitForKey(); } else { Console.WriteLine("\n{0}\n", ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)[new Random().Next(0, GameCollections.ErrorMesssages.Count)]); } break; case "Z": if (knownMap[player.location[0], player.location[1], player.location[2]] == "Vendor") { Vendor vendor = Vendor.GetOrCreateVendor(theMap, player, string.Join(string.Empty, new[] { player.location[0], player.location[1], player.location[2] })); VendorTrade.Trade(ref player, ref vendor); } else { Console.WriteLine($"\nSorry, {player.race}, there's no vendor in the room."); SharedMethods.WaitForKey(); } break; case "A": if (knownMap[player.location[0], player.location[1], player.location[2]] == "Vendor") { Vendor vendor = Vendor.GetOrCreateVendor(theMap, player, string.Join(string.Empty, new[] { player.location[0], player.location[1], player.location[2] })); GameCollections.AllVendorMad = true; vendor.mad = true; Console.WriteLine($"\n{Vendor.VendorMadMessage(vendor)}\n"); BattleVendor.BattleSequence(ref player, ref vendor, theMap); if (vendor.strength < 1) { theMap[player.location[0], player.location[1], player.location[2]] = "-"; SharedMethods.WaitForKey(); } } else if (GameCollections.Monsters.Contains(theMap[player.location[0], player.location[1], player.location[2]])) { Monster monster = Monster.GetOrCreateMonster(theMap, player, string.Join(string.Empty, new[] { player.location[0], player.location[1], player.location[2] })); monster.mad = true; Console.WriteLine($"\n{Monster.MonsterMadMessage(monster)}\n"); Battle.BattleSequence(ref player, ref monster, theMap); if (monster.strength < 1) { theMap[player.location[0], player.location[1], player.location[2]] = "-"; } SharedMethods.WaitForKey(); } else { Console.WriteLine("\n{0}\n", ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)[new Random().Next(0, GameCollections.ErrorMesssages.Count)]); SharedMethods.WaitForKey(); } break; case "V": Instructions.ViewInstructions(); break; case "Q": break; default: Console.WriteLine("\n{0}\n", ManipulateListObjects.ReplaceRandomMonster(GameCollections.ErrorMesssages)[new Random().Next(0, GameCollections.ErrorMesssages.Count)]); SharedMethods.WaitForKey(); break; } }