Esempio n. 1
0
        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");
            }
        }