static void Main(string[] args) { Console.WriteLine("Welcome to this game"); Console.WriteLine("What is your name?"); string playerName = Console.ReadLine(); Player gamePlayer = null; // Ask player if they want to load a save Console.WriteLine("Do you want to load your previous save? (y/n)"); string loadSaveResponse = Console.ReadLine(); if (loadSaveResponse == "y") { gamePlayer = SaveAndLoad.load(playerName); } else { Console.WriteLine("Starting new character"); } // Creates player with given name, 20 health, 5 damage, 10 coins, 25% crit chance, 0 armor points, 40% block chance if (gamePlayer == null) { gamePlayer = new Player(playerName, 20, 5, 10, 25, 0, 40); } Forest fightForest = new Forest((new List<Monster> { new Monster(10, 75, 1, 1, "Beetle"), new Monster(20, 50, 3, 2, "Bear"), new Monster(15, 20, 5, 2, "mountainLionThing"), new Monster(25, 50, 5, 3, "Wild Beast"), new Monster(35, 35, 10, 15, "advancedBeetle") }).AsQueryable<Monster>()); Mountain bossMountain = new Mountain((new List<Boss> { new Boss("Gondlaf The Passable", 25, 50, 10, 25, 10, 40), new Boss("Superboss", 25, 40, 15, 50, 25, 25) }.AsQueryable<Boss>())); // TODO: Add more items to shop Shop buyShop = new Shop((new List<Item> { new Weapon("basicSword", 7, 20, 2), new Armor("basicChestplate", 25, 3, 25), new Potion("basicPotion", 10, 5, 5), new Weapon("advancedSword", 11, 35, 1), new Armor("advancedChestplate", 40, 2, 50), new Potion("advancedPotion", 20, 1, 15), new Weapon("superSword", 20, 55, 3), new Armor("superChestplate", 60, 1, 75) } ).AsQueryable<Item>()); // Greets player and prompts, begins game Console.WriteLine("Hello " + gamePlayer.name + "!"); while (true) { Console.WriteLine("You have " + gamePlayer.health + " health, " + gamePlayer.coins + " coins, " + gamePlayer.damage + " damage per hit, a " + gamePlayer.critChance + "% crit chance, " + gamePlayer.armorPoints + " armor points, and are level " + gamePlayer.level + "."); Console.WriteLine("What would you like to do? (village, forest, mountain, or shop)"); string choice = Console.ReadLine(); if (choice == "village" || choice == "v") { // Player heals at village Console.WriteLine("You have slept at the village. You are healed."); gamePlayer.fillHealth(); } else if (choice == "forest" || choice == "f") { // Player goes to forest to fight monsters Console.WriteLine("You have gone to the forest. Are you ready to fight? (y/n)"); string answer = Console.ReadLine(); if (answer.Equals("y")) { // Player is ready to fight. Choose monster and begin Monster fightMonster = fightForest.chooseMonster(gamePlayer.level); Console.WriteLine("You are a fighting a " + fightMonster.name + "."); if (fightForest.fight(gamePlayer, fightMonster)) { if (fightMonster.isEvaded) { // Monster was evaded; do not give gold Console.WriteLine("You successfully evaded the monster!"); } else { // Monster was defeated; give gold and increase level Console.WriteLine("You successfully defeated the monster."); int lootGold = fightForest.lootCalc(fightMonster.level); Console.WriteLine("You looted " + lootGold + " gold from the monster."); gamePlayer.coins += lootGold; gamePlayer.level += 1; } } else { // Player defeated. Console.WriteLine("You were defeated. Luckily, a kindly villager found you, " + "brought you back to the village and healed you, but not before looters found you. " + "You have lost all your belongings."); gamePlayer.clearInv(); gamePlayer.fillHealth(); gamePlayer.deadLevel(); } } else { // Player is not ready to fight. Return to choice menu Console.WriteLine("Returning to choice menu."); } } else if (choice == "shop" || choice == "s") { // Player goes to shop to buy items Console.WriteLine("You are at the shop. You have " + gamePlayer.coins + " coins."); Console.WriteLine("Shop items: "); int i = 0; foreach (Item cItem in buyShop.availableItems) { // List each available item in shop if (cItem is Weapon) { Weapon cItemWeapon = null; try { cItemWeapon = (Weapon)cItem; } catch (InvalidCastException e) { } Console.WriteLine(i + ". {0} is a weapon hitting {1} damage, with {2} in stock at {3} coins each.", cItemWeapon.name, cItemWeapon.damage, cItemWeapon.stock, cItemWeapon.cost); } else if (cItem is Armor) { Armor cItemArmor = null; try { cItemArmor = (Armor)cItem; } catch (InvalidCastException e) { } Console.WriteLine(i + ". {0} is an armor piece with {1} points, {2} in stock at {3} coins each.", cItemArmor.name, cItemArmor.armorPoints, cItemArmor.stock, cItemArmor.cost); } else if (cItem is Potion) { Potion cItemPotion = null; try { cItemPotion = (Potion)cItem; } catch (InvalidCastException e) { } Console.WriteLine(i + ". {0} is a potion healing {1} points, with {2} in stock at {3} coins each.", cItemPotion.name, cItemPotion.healPoints, cItemPotion.stock, cItemPotion.cost); } i++; } // Loop through purchases until user chooses to leave while (true) { // Receive user input of which item to buy Console.WriteLine("Write index of item you want to buy, or type nothing to leave."); string input = Console.ReadLine(); if (input == "") { // User does not want to buy anything, leave shop break; } else { // Check if user can buy item specified Item chosenItem = buyShop.availableItems.ToList<Item>()[Int32.Parse(input)]; if (gamePlayer.coins >= chosenItem.cost) { // User has enough coins to purchase; check stock if (buyShop.buyItem(chosenItem)) { gamePlayer.coins -= chosenItem.cost; Console.WriteLine("You have purchased the item. You now have " + gamePlayer.coins + " coins."); if (chosenItem is Weapon) { Weapon chosenItemWeapon = null; try { chosenItemWeapon = (Weapon)chosenItem; } catch (InvalidCastException e) { } gamePlayer.damage = chosenItemWeapon.damage; } else if (chosenItem is Armor) { Armor chosenItemArmor = null; try { chosenItemArmor = (Armor)chosenItem; } catch (InvalidCastException e) { } gamePlayer.armorPoints = chosenItemArmor.armorPoints; } else if (chosenItem is Potion) { Potion chosenItemPotion = null; try { chosenItemPotion = (Potion)chosenItem; } catch (InvalidCastException e) { } gamePlayer.inventory.Add(chosenItemPotion); } } } else { // User does not have enough coins to purchase. Loop again Console.WriteLine("You do not have enough coins! You have " + gamePlayer.coins + " coins."); } } } } else if (choice == "mountain" || choice == "m") { Console.WriteLine("You have gone to the mountain. Are you sure you want to fight a boss?"); Console.WriteLine("Bosses are very difficult and you should not attempt to fight one if you are lower than level 10."); Console.WriteLine("(y/n)"); string confirmChoice = Console.ReadLine(); if (confirmChoice == "y") { // Player is sure that they want to fight a boss Boss fightBoss = bossMountain.chooseBoss(gamePlayer.level); if (bossMountain.fight(gamePlayer, fightBoss)) { // Player "won" battle, either through boss defeat or evasion if (fightBoss.isEvaded) { // Player evaded boss; do not give gold or level Console.WriteLine("You successfully evaded the boss!"); } else { // Player defeated boss; give gold and level Console.WriteLine("You successfully defeated the monster!"); int lootGold = bossMountain.lootCalc(fightBoss.level); Console.WriteLine("You looted " + lootGold + " from the boss."); gamePlayer.coins += lootGold; gamePlayer.level += (fightBoss.level / 2); } } else { // Player defeated. Console.WriteLine("You were defeated. Luckily, a kindly villager found you, " + "brought you back to the village and healed you, but not before looters found you. " + "You have lost all your belongings."); gamePlayer.clearInv(); gamePlayer.fillHealth(); gamePlayer.deadLevel(); } } } else if (choice == "exit" || choice == "e") { Console.WriteLine("Are you sure you want to leave? (y/n)"); if (Console.ReadLine() == "y") { Environment.Exit(0); } } else if (choice == "save") { Console.WriteLine("Saving to " + gamePlayer.name + "-Save.txt"); SaveAndLoad.save(gamePlayer); } else { // Unrecognized command Console.WriteLine("I don't recognize that command."); } Console.Write("\r\n"); } }
public bool fight(Player gamePlayer, Monster fightMonster) { string choice; while (gamePlayer.health > 0 && fightMonster.health > 0) { Console.WriteLine("You have " + gamePlayer.health + " health and the monster has " + fightMonster.health + " health."); Console.WriteLine("What do you want to do? (attack, block, potion, or run)"); choice = Console.ReadLine(); if (choice == "attack") { // Player chose to attack monster // Calc crit chance if (randomNumberGen.Next(100) <= gamePlayer.critChance) { // Player critted; do two times damage Console.WriteLine("Critical hit on the monster!"); if (gamePlayer.armorPoints > 0) { // Player has at least one armor points // Calculates damage with armor based off this equation: // damage = (opponent damage - (opponent damage / (100 / player armor))) gamePlayer.health -= fightMonster.damage - (fightMonster.damage / (100 / gamePlayer.armorPoints)); } else { // Player has no armor points // Calculates damage without armor gamePlayer.health -= fightMonster.damage; } fightMonster.health -= (gamePlayer.damage * 2); } else { // Player did not crit; do standard damage if (gamePlayer.armorPoints > 0) { // Player has at least one armor points // Calculates damage with armor based off this equation: // damage = (opponent damage - (opponent damage / (100 / player armor))) gamePlayer.health -= fightMonster.damage - (fightMonster.damage / (100 / gamePlayer.armorPoints)); } else { // Player has no armor points // Calculates damage without armor gamePlayer.health -= fightMonster.damage; } fightMonster.health -= gamePlayer.damage; } } else if (choice == "block") { // Player chose to block // Calc block chance if (randomNumberGen.Next(100) > gamePlayer.blockChance) { // Player successfully blocked; negate enemy damage Console.WriteLine("You blocked successfully and took no damage, as well as dealing some to the monster!"); fightMonster.health -= (gamePlayer.damage / 2); } else { // Player did not block successfully; take damage and deal none Console.WriteLine("You did not block successfully!"); gamePlayer.health -= fightMonster.damage; } } else if (choice == "potion") { // Player chose to use potion // List potions in inventory var potionList = from potion in gamePlayer.inventory.AsQueryable<Item>() where potion is Potion select (Potion)potion; int i = 0; foreach (Potion cPotion in potionList) { Console.WriteLine((i + 1) + ". {0} heals {1} points. You have {2}.", cPotion.name, cPotion.healPoints, (from potion in potionList where (potion.name == cPotion.name) select potion).ToList().Count); i++; } // Select potion, heal player, remove potion from inventory Console.WriteLine("Write the index of the potion you want to use: "); int chosenIndex = 1; try { chosenIndex = (Int32.Parse(Console.ReadLine()) - 1); } catch (FormatException e) { Console.WriteLine("I don't understand that command."); continue; } gamePlayer.addHealth(potionList.ToList<Potion>()[chosenIndex].healPoints); gamePlayer.inventory.Remove(gamePlayer.inventory.First(x => x.name == potionList.ToList<Potion>()[chosenIndex].name)); } else if (choice == "run") { // Player chose to run // Calc evade chance if (randomNumberGen.Next(100) <= fightMonster.evadeChance) { // Player successfully evaded // Return to village fightMonster.health = 0; fightMonster.isEvaded = true; } else { // Player did not evade successfully. Take small damage and continue fight int evadeDamage = (fightMonster.damage / 3); Console.WriteLine("You were unable to escape the monster! You took " + evadeDamage + " damage."); gamePlayer.health -= evadeDamage; } } } if (gamePlayer.health <= 0) { return false; } else { return true; } }