internal static void AllCooldownDrop(Dragon player, Dragon enemy)
 {
     for (int i = 0; i < player.SkillCooldown.GetLength(0); i++)
     {
         if (player.SkillCooldown[i] > 0)
         {
             player.SkillCooldown[i]--;
         }
     }
     for (int i = 0; i < enemy.SkillCooldown.GetLength(0); i++)
     {
         if (enemy.SkillCooldown[i] > 0)
         {
             enemy.SkillCooldown[i]--;
         }
     }
 }
        internal static void BattleCycle(Dragon player, Dragon enemy)
        {
            int round = 1;

            do
            {
                BattleInterface.AllCooldownDrop(player, enemy);
                SkillSystem.BuffAnnounce(player, enemy);
                SkillSystem.BuffAnnounce(enemy, player);
                BattleInterface.VersusTime(player, enemy);

                if (player.HP > 0 && enemy.HP > 0)
                {
                    BattleInterface.RoundAnnounce(player, enemy, round);
                    round++;
                }
            } while (player.HP > 0 && enemy.HP > 0);
        }
        internal static void BuffAnnounce(Dragon player1, Dragon player2)
        {
            for (int i = 0; i < player1.BuffDuration.GetLength(0); i++)
            {
                switch (i)
                {
                case 0: break;

                case 1: break;

                case 2: break;

                case 3:
                    if (player1.BuffDuration[3] > 0)
                    {
                        //if it's the first turn that the buff was applied
                        if (player1.BuffDuration[3] < 4)
                        {
                            Util.WriteLineInRed("==Pommel Debuff==");
                            Util.WriteLineInRed(player2.Name + " restored 1 resilience!");
                        }

                        player1.BuffDuration[3]--;
                        player2.Resilience++;

                        if (player1.BuffDuration[3] == 0)
                        {
                            Util.WriteLineInRed("The debuff wore off completely!");
                        }
                    }
                    break;

                case 4:
                    if (player1.BuffDuration[4] > 0)
                    {
                        player1.BuffDuration[4]--;
                        player1.Resilience /= 2;
                    }
                    break;
                }
            }
        }
        internal static void MissedDialogue(int random, Dragon player1, Dragon player2)
        {
            switch (random)
            {
            case 0:
                Console.WriteLine("\n{0}: I can't believe this!\n{1}: Ha! You suck!", player1.Name, player2.Name);
                break;

            case 1:
                Console.WriteLine("\n{0}: You're pretty good!\n{1}: No, you're just terrible!", player1.Name, player2.Name);
                break;

            case 2:
                Console.WriteLine("\n{0}: Take this!\n{1}: You call that a hit?", player1.Name, player2.Name);
                break;

            case 3:
                Console.WriteLine("\n{0}: Take this!\n{1}: You call that a hit?", player1.Name, player2.Name);
                break;
            }
        }
        internal static void DamageBehavior(Dragon player1, Dragon player2, int damageDealt)
        {
            Random random = new Random();

            if (damageDealt >= 0.5 * player2.HP)
            {
                HeavyHitDialogue(random.Next(0, 1), player1, player2);
            }
            else if (damageDealt >= 0.3 * player2.HP)
            {
                MediumHitDialogue(random.Next(0, 1), player1, player2);
            }
            else if (damageDealt == -1)
            {
                MissedDialogue(random.Next(0, 1), player1, player2);
            }
            else
            {
                LightHitDialogue(random.Next(0, 1), player1, player2);
            }
        }
        private static void HeavyHitDialogue(int random, Dragon player1, Dragon player2)
        {
            switch (random)
            {
            case 0:
                Console.WriteLine("\n{0}: Take this!\n{1}: What is this power??", player1.Name, player2.Name);
                break;

            case 1:
                Console.WriteLine("\n{0}: Uryahhh!\n{1}: Impossible!", player1.Name, player2.Name);
                break;

            case 2:
                Console.WriteLine("\n{0}: Take this!\n{1}: You call that a hit?", player1.Name, player2.Name);
                break;

            case 3:
                Console.WriteLine("\n{0}: Take this!\n{1}: You call that a hit?", player1.Name, player2.Name);
                break;
            }
        }
        private static void MediumHitDialogue(int random, Dragon player1, Dragon player2)
        {
            switch (random)
            {
            case 0:
                Console.WriteLine("\n{0}: Take this!\n{1}: That's quite impressive, but not enough!", player1.Name, player2.Name);
                break;

            case 1:
                Console.WriteLine("\n{0}: Taste the pain!\n{1}: You finally did something to me?", player1.Name, player2.Name);
                break;

            case 2:
                Console.WriteLine("\n{0}: Take this!\n{1}: You call that a hit?", player1.Name, player2.Name);
                break;

            case 3:
                Console.WriteLine("\n{0}: Take this!\n{1}: You call that a hit?", player1.Name, player2.Name);
                break;
            }
        }
        private static void LightHitDialogue(int random, Dragon player1, Dragon player2)
        {
            switch (random)
            {
            case 0:
                Console.WriteLine("\n{0}: Take this!\n{1}: You call that a hit?", player1.Name, player2.Name);
                break;

            case 1:
                Console.WriteLine("\n{0}: How do you like this?\n{1}: I almost felt something!", player1.Name, player2.Name);
                break;

            case 2:
                Console.WriteLine("\n{0}: Take this!\n{1}: You call that a hit?", player1.Name, player2.Name);
                break;

            case 3:
                Console.WriteLine("\n{0}: Take this!\n{1}: You call that a hit?", player1.Name, player2.Name);
                break;
            }
        }
        //Reckless Charge
        internal static void RecklessCharge(Dragon player1, Dragon player2)
        {
            Random random           = new Random();
            double hitRateModifier  = -15;
            double critRateModifier = 8;
            int    damageDealt      = 0;
            double variance         = random.Next(75, 125) * 0.01;

            player1.SP -= 5;

            double actualHitRate  = player1.HitRate + hitRateModifier - player2.EvdRate;
            double actualCritRate = player1.CritRate + critRateModifier - player2.CritEvdRate;
            int    attack         = player1.Strength * 2;
            int    defense        = player2.Resilience * 2;

            if (actualHitRate > random.Next(0, 100))
            {
                damageDealt = (int)((variance) * (player1.Attack * 1.25 - player2.Defense));
                if (actualCritRate > random.Next(0, 100))
                {
                    Console.WriteLine("A critical strike! This should hurt!");
                    damageDealt *= 2;
                }
                if (damageDealt < 0)
                {
                    damageDealt = 0;
                }
                player2.HP -= damageDealt;
                Console.WriteLine("That attack did {0} damage!",
                                  damageDealt);
                BattleDialogue.DamageBehavior(player1, player2, damageDealt);
            }
            else
            {
                Console.WriteLine("The attack missed!");
                damageDealt = -1;
                BattleDialogue.DamageBehavior(player1, player2, damageDealt);
            }
            player1.SkillCooldown[1] = 2;
        }
 internal static void InitialImplement(Dragon player)
 {
     player.CurrentLevel = 1;
     player.CurrentEXP   = 0;
     player.MaximumEXP   = 40;
 }
        internal static void VersusTime(Dragon player, Dragon enemy)
        {
            Random random = new Random();
            int    playerSelection = 0, index = 1, enemySelection = 0;
            bool   validSkill = false, confirmChoice = false;

            Console.WriteLine("Time to select what you want to do!");
            Console.WriteLine("The actions you can take this turn:");
            foreach (var skill in player.Skills)
            {
                SkillSystem.SkillListInterface(skill, index);
                index++;
            }

            do
            {
                try
                {
                    Console.WriteLine("\nEnter the number of the skill you want to execute!");
                    Console.Write("Selection: ");
                    playerSelection = int.Parse(Console.ReadLine());

                    if (playerSelection <= player.Skills.Count)
                    {
                        validSkill    = true;
                        confirmChoice = SkillSystem.SkillActivationConfirm(playerSelection, player.Skills, player);
                    }
                    else
                    {
                        Util.WriteLineInRed("Invalid input! Please select a valid skill!");
                    }
                }
                catch (Exception)
                {
                    Util.WriteLineInRed("Error choosing skill!");
                }
            } while (!validSkill || !confirmChoice);

            enemySelection = EnemyAI.EnemyTurn(enemy);

            bool PlayerFirst = false;

            PlayerFirst = TurnDeterminer(player, enemy, playerSelection, enemySelection);

            if (PlayerFirst)
            {
                BattleTime(playerSelection, player.Skills, player, enemy);
                Util.MPause();
                if (enemy.HP > 0)
                {
                    Console.WriteLine("\nNow, it's time for the {0} to move!", enemy.Name);
                    Util.MPause();
                    BattleDialogue.EnemyAction(player, enemy, enemySelection);
                    BattleTime(enemySelection, enemy.Skills, enemy, player);
                }
            }
            else
            {
                Console.WriteLine("\n{0} outsped you! {0} will move before you!", enemy.Name);
                Util.MPause();
                BattleDialogue.EnemyAction(player, enemy, enemySelection);
                BattleTime(enemySelection, enemy.Skills, enemy, player);

                if (player.HP > 0)
                {
                    Util.MPause();
                    Console.WriteLine("\nNow it's your time to move!");
                    BattleTime(playerSelection, player.Skills, player, enemy);
                }
            }
        }
        //Double Strike
        internal static void DoubleUp(Dragon player1, Dragon player2)
        {
            Random random           = new Random();
            double hitRateModifier  = 0;
            double critRateModifier = 0;
            int    damageDealt      = 0;
            double variance         = random.Next(80, 120) * 0.01;

            player1.SP -= 30;

            double actualHitRate  = player1.HitRate + hitRateModifier - player2.EvdRate;
            double actualCritRate = player1.CritRate + critRateModifier - player2.CritEvdRate;
            int    attack         = player1.Strength * 3;
            int    defense        = player2.Resilience * 2;

            if (actualHitRate > random.Next(0, 100))
            {
                damageDealt = (int)((variance) * (attack * 5 - defense * 2.5));
                if (actualCritRate > random.Next(0, 100))
                {
                    Console.WriteLine("A critical strike! This should hurt!");
                    damageDealt *= 2;
                }
                if (damageDealt < 0)
                {
                    damageDealt = 0;
                }
                player2.HP -= damageDealt;
                Console.WriteLine("The first attack did {0} damage!",
                                  damageDealt);
                BattleDialogue.DamageBehavior(player1, player2, damageDealt);
            }
            else
            {
                Console.WriteLine("The first attack missed!");
                damageDealt = -1;
                BattleDialogue.DamageBehavior(player1, player2, damageDealt);
            }

            Util.MPause();

            if (actualHitRate > random.Next(0, 100))
            {
                damageDealt = (int)((variance) * (attack * 3 - defense * 1.5));
                if (actualCritRate > random.Next(0, 100))
                {
                    Console.WriteLine("\nA critical strike! This should hurt!");
                    damageDealt *= 2;
                }
                player2.HP -= damageDealt;
                Console.WriteLine("\nThe second attack did {0} damage!",
                                  damageDealt);
                BattleDialogue.DamageBehavior(player1, player2, damageDealt);
            }
            else
            {
                Console.WriteLine("The second attack missed!");
                damageDealt = -1;
                BattleDialogue.DamageBehavior(player1, player2, damageDealt);
            }

            player1.SkillCooldown[2] = 3;
        }
        private static void BattleTime(int selection, List <int> skills, Dragon player1, Dragon player2)
        {
            switch (skills[selection - 1])
            {
            case 0:
                NormalStrike(player1, player2);
                break;

            case 1:
                RecklessCharge(player1, player2);
                break;

            case 2:
                DoubleUp(player1, player2);
                break;

            case 3:
                Pommel(player1, player2);
                break;

            case 4:
                Defend(player1);
                break;

            default:
                break;
            }
        }
Exemple #14
0
        internal static void SelectType(Dragon newDragon)
        {
            String[] TypeSelections = new String[] { "All Rounder", "Vanguard",
                                                     "Guardian", "Assassin",
                                                     "Late Bloomer" };
            String[] TypeExplanations = new String[TypeSelections.Length];
            int      index            = 1;
            int      selection        = 0;

            PopulateTypeExplanations(TypeExplanations);

            Console.WriteLine("You seem to be capable of fighting. That skill will come in handy in this world.");
            Util.SPause();
            Console.WriteLine("Hmm... Just what type of combatant are you, though?\n\n");
            Util.MPause();
            Console.WriteLine("=======================================");
            Console.WriteLine("It's time to select your starting type!");
            Console.WriteLine("Your type will influence your stats and obtainable skills!");
            Console.WriteLine("Here are the list of types that you can choose from!\n");
            foreach (String type in TypeSelections)
            {
                Console.WriteLine("{0}. {1}", index, type);
                index++;
            }

            bool validDragonType = false;

            do
            {
                try
                {
                    Util.SPause();
                    Console.WriteLine("\nEnter the number of the type you would like.");
                    Console.WriteLine("You can also enter 0 for an explanation of each type.");
                    Console.Write("Selection: ");
                    selection = int.Parse(Console.ReadLine());
                    if (selection > 0 && selection < TypeSelections.Length + 1)
                    {
                        validDragonType = true;
                        newDragon.Type  = TypeSelections[selection - 1];
                        Console.WriteLine("Type selected is {0}.", newDragon.Type);
                        Console.Write("Continue with choice? Y/N: ");
                        if (Console.ReadLine().ToUpper() != "Y")
                        {
                            validDragonType = false;
                            Console.WriteLine("Alright, let's select again then.");
                        }
                    }
                    else if (selection == 0)
                    {
                        Console.WriteLine();
                        validDragonType = false;
                        index           = 0;
                        foreach (var type in TypeExplanations)
                        {
                            Console.WriteLine("{0}: {1}", TypeSelections[index], type);
                            index++;
                        }
                    }
                    else
                    {
                        validDragonType = false;
                        Util.WriteLineInRed("\nThis is an invalid dragon type!");
                        Util.SPause();
                        Util.WriteLineInRed("Please enter a valid dragon type from the list!");
                    }
                }
                catch (FormatException)
                {
                    Util.WriteLineInRed("\nError choosing dragon type!");
                }
            } while (!validDragonType);
        }
        static void Main(string[] args)
        {
            Random random = new Random();

            Console.Write("...");
            Util.SPause();
            Console.Write("..");
            Util.SPause();
            Console.Write("..");
            Util.SPause();

            Console.WriteLine("\n\nIt has been quite a long journey from your hometown...");
            Console.WriteLine("Seeking an exciting adventure, you hopped on a ship to another continent.");
            Console.WriteLine("What new fate awaits you...?");

            Console.WriteLine("\n===========DRAGON PROJECT===========\n");

            Console.WriteLine("It's high noon in Ocuraho, the Dragon Continent.");
            Console.WriteLine("You are not aware of why they call it that.");
            Console.WriteLine("");

            var player = new Dragon();

            Console.WriteLine("But first of all, please tell me your name...");
            Console.Write("Your name: ");
            player.Name = Console.ReadLine();
            Console.Clear();

            Console.WriteLine("It's a pleasure to meet you, {0}!", player.Name);
            DragonCreation.SelectType(player);
            DragonCreation.CreateDragon(player, player.Type);
            SkillSystem.InitialImplement(player);
            LevelSystem.InitialImplement(player);

            Console.Clear();

            var enemy = new Dragon();

            Console.WriteLine("Let's save the pleasantries for later, though.");
            Console.WriteLine("Looks like someone has a bone to pick with you.");
            Console.WriteLine("Let's quickly dispatch of this ruffian!");
            Console.WriteLine("\nHere he comes! Battle time!\n\n");

            Util.LPause();
            enemy.Name         = "Local Bandit";
            enemy.Type         = "Bandit";
            enemy.AIBehaviorID = 0;
            enemy.CurrentLevel = 1;

            DragonCreation.CreateDragon(enemy, enemy.Type);
            SkillSystem.InitialImplement(enemy);

            BattleInterface.StartTheBattle(player, enemy);
            BattleInterface.DisplayStats(player);
            Util.MPause();
            BattleInterface.DisplayStats(enemy);

            Util.PressAnyKey();
            Console.Clear();

            BattleInterface.BattleCycle(player, enemy);

            if (player.HP < 0)
            {
                Util.LPause();
                Console.Clear();
                Util.WriteLineInRed("The bandit ended your life, moments after " +
                                    "you set foot on the continent.");
                Util.WriteLineInRed("What a truly foolish end...");
                Util.PressAnyKey();
                Environment.Exit(0);
            }
            if (player.HP > 0)
            {
                Util.LPause();
                Console.Clear();
                Console.WriteLine("{0}'s health dropped to 0!", enemy.Name);
                Console.WriteLine("Victory!\n");
                Util.SPause();
                LevelSystem.AddExperience(40, player);
            }

            Util.LPause();
            Console.WriteLine();
            Util.PressAnyKey();

            ////////////////////////////////////////////////////////////////
            Console.Clear();
            Console.WriteLine("Amazing, you're quite the fighter!");
            Console.WriteLine("Bandits have been appearing in these parts.");
            Console.WriteLine("Really terrorizing the locals here, I tell you.");

            Util.SPause();
            Console.WriteLine("\nSay, why don't you follow me to the nearest town?");
            Console.WriteLine("I think you would need a short break after all that!\n");

            Util.PressAnyKey();
            Console.Clear();

            Town Vdrfr = new Town();

            Console.WriteLine("Welcome to Viaderfore!");
            Console.WriteLine("Here, you will have a chance to rest up, buy items" +
                              " and prepare yourself before you head to your next location.");
            Util.SPause();
            Console.WriteLine("You also have the choice to talk to locals and maybe" +
                              " learn some more about this area.\n");
            Util.SPause();
            Util.PressAnyKey();
            Console.Clear();

            do
            {
                try
                {
                    Console.WriteLine("Here are the things you can do at this moment in time");
                    Console.WriteLine("1. Talk to someone.");
                    Console.WriteLine("2. Rest up at an inn.");
                    Console.WriteLine("3. Visit the weapon store.");
                    Console.WriteLine("4. Visit the item store.");
                    Console.WriteLine("5. Head out.");
                    Console.WriteLine("\nWhat do you wish to do?");
                    Console.Write("Your choice: ");
                    Vdrfr.Navigation = int.Parse(Console.ReadLine());

                    if (Vdrfr.Navigation < 1 || Vdrfr.Navigation > 5)
                    {
                        Console.Clear();
                        Util.WriteLineInRed("Such an option does not exist!");
                    }

                    if (Vdrfr.Navigation == 1)
                    {
                        do
                        {
                            Console.Clear();
                            Console.WriteLine("Seems like there's a number of people here");
                            Console.WriteLine("1. The elderly man.");
                            Console.WriteLine("2. The armorclad fellow");
                            Console.WriteLine("3. The arrogant young man.");
                            Console.WriteLine("\nWho do you wish to talk to?");
                            Console.Write("Your choice: ");
                            Vdrfr.TalkChoice = int.Parse(Console.ReadLine());
                            if (Vdrfr.TalkChoice == 1)
                            {
                                Console.Clear();
                                Town.Vdrfr.OldMan();

                                Console.Write("\nTalk to another person? Y/N ");
                                if (Console.ReadLine().ToUpper() != "Y")
                                {
                                    Vdrfr.InTalk = true;
                                }
                                else
                                {
                                    Vdrfr.InTalk = false;
                                }
                            }
                            if (Vdrfr.TalkChoice == 2)
                            {
                                Console.Clear();
                                Town.Vdrfr.ArmorcladFellow(player);

                                Console.Write("Accept Jeremy's challenge? Y/N ");
                                if (Console.ReadLine().ToUpper() == "Y")
                                {
                                    if (player.HP < player.MaxHP)
                                    {
                                        Console.Clear();
                                        Town.Vdrfr.ChallengeNotMaxHP();

                                        Console.Write("\nTalk to another person? Y/N ");
                                        if (Console.ReadLine().ToUpper() != "Y")
                                        {
                                            Vdrfr.InTalk = true;
                                        }
                                        else
                                        {
                                            Vdrfr.InTalk = false;
                                        }
                                    }
                                    else
                                    {
                                        enemy.Name         = "Jeremy Evert";
                                        enemy.Type         = "Fledgling Knight";
                                        enemy.AIBehaviorID = 1;
                                        enemy.CurrentLevel = 2;

                                        EnemyInitializationAndBattleStart(player, enemy);
                                        BattleInterface.BattleCycle(player, enemy);

                                        if (player.HP > 0)
                                        {
                                            Town.Vdrfr.ChallengeWin();
                                        }
                                        if (player.HP < 0)
                                        {
                                            Town.Vdrfr.ChallengeLost(player);
                                        }
                                    }
                                }
                                else
                                {
                                    Console.Clear();
                                    Town.Vdrfr.ChallengeReject();
                                    Console.Write("\nTalk to another person? Y/N ");
                                    if (Console.ReadLine().ToUpper() != "Y")
                                    {
                                        Vdrfr.InTalk = true;
                                    }
                                    else
                                    {
                                        Vdrfr.InTalk = false;
                                    }
                                }
                            }
                            if (Vdrfr.TalkChoice == 3)
                            {
                                Console.Clear();
                            }
                        } while (!Vdrfr.InTalk);
                    }
                }
                catch (Exception)
                {
                    Console.Clear();
                    Util.WriteLineInRed("Error making selection! Did you input a letter?");
                }
            } while (!Vdrfr.InTown);


            Console.WriteLine("\nFor now, your journey comes to an end");
            Console.WriteLine("Look forward for more updates in the near future!");
            Util.PressAnyKey();
        }
        internal static bool SkillActivationConfirm(int selection, List <int> skills, Dragon player)
        {
            bool confirm;

            switch (skills[selection - 1])
            {
            case 0:
                Console.WriteLine("Normal Strike: Just a regular attack onto your enemy");
                Console.WriteLine("Costs nothing.");
                Console.WriteLine("Has no cooldown.");
                confirm = ConfirmSkillUse();
                if (!confirm)
                {
                    goto default;
                }
                return(true);

            case 1:
                Console.WriteLine("\nReckless Charge: An attack that deals much " +
                                  "more damage at the cost of having lower accuracy.");
                Console.WriteLine("Costs 25 stamina.");
                Console.WriteLine("Has a cooldown of 1 turn.");
                confirm = ConfirmSkillUse();
                if (player.SkillCooldown[1] > 0)
                {
                    Util.WriteLineInRed("This skill is currently on cooldown!");
                    Util.WriteLineInRed("Turn(s) remaining: " + player.SkillCooldown[1]);
                    goto default;
                }
                if (player.SP < 25)
                {
                    Util.WriteLineInRed("You do not have enough stamina to execute this skill!");
                    goto default;
                }
                if (!confirm)
                {
                    goto default;
                }
                return(true);

            case 2:
                Console.WriteLine("\nDouble Up: Perform two consecutive normal strikes.");
                Console.WriteLine("Costs 30 stamina.");
                Console.WriteLine("Has a cooldown of 2 turns.");
                confirm = ConfirmSkillUse();
                if (player.SkillCooldown[2] > 0)
                {
                    Util.WriteLineInRed("This skill is currently on cooldown!");
                    Util.WriteLineInRed("Turn(s) remaining: " + player.SkillCooldown[2]);
                    goto default;
                }
                if (player.SP < 30)
                {
                    Util.WriteLineInRed("You do not have enough stamina to execute this skill!");
                    goto default;
                }
                if (!confirm)
                {
                    goto default;
                }
                return(true);

            case 3:
                Console.WriteLine("\nPommel: A weak attack that targets the " +
                                  "enemy's defenses. Reduces enemy's resilience by 3 for 3 turns.");
                Console.WriteLine("Costs 20 stamina.");
                Console.WriteLine("Has a cooldown of 5 turns.");
                confirm = ConfirmSkillUse();
                if (player.SkillCooldown[3] > 0)
                {
                    Util.WriteLineInRed("This skill is currently on cooldown!");
                    Util.WriteLineInRed("Turn(s) remaining: " + player.SkillCooldown[3]);
                    goto default;
                }
                if (player.SP < 20)
                {
                    Util.WriteLineInRed("You do not have enough stamina to execute this skill!");
                    goto default;
                }
                if (!confirm)
                {
                    goto default;
                }
                return(true);

            case 4:
                Console.WriteLine("\nDefend: Assumes a defensive stance. " +
                                  "Doubles your resilience during this turn only.");
                Console.WriteLine("This skill will always be performed first.");
                Console.WriteLine("Costs nothing.");
                Console.WriteLine("Has no cooldown.");
                confirm = ConfirmSkillUse();
                if (!confirm)
                {
                    goto default;
                }
                return(true);

            default:
                return(false);
            }
        }