コード例 #1
0
        public void MagicalAttack(Monster monster, string spellName)
        {
            Spell spellToCast = new Spell("You Have No Spells", 0, 0);

            foreach (Spell spell in Spells)
            {
                if (spellName == spell.Name)
                {
                    spellToCast = spell;
                }
            }
            int dealtDamage = (this.MagAttack + spellToCast.Damage) - monster.MagDefense;

            if (dealtDamage < 0)
            {
                dealtDamage = 0;
            }
            this.CurrentMP    -= spellToCast.MpCost;
            monster.CurrentHP -= dealtDamage;

            List <string> prompts = new List <string>()
            {
                $"{this.Name} Casts: {spellToCast.Name}",
                $"{this.Name} does {dealtDamage} damage",
                $"{this.Name} used {spellToCast.MpCost} mp and now has {this.CurrentMP} mp left",
                $"The {monster.Name} steps back... probably"
            };

            DisplayMethods.DisplayInformation(prompts);
            DisplayMethods.DisplayInformation("Press any key to continue...", true);
        }
コード例 #2
0
        public void DisplayStatus()
        {
            List <string> prompts = new List <string>
            {
                "Name: " + this.Name,
                "Level: " + this.Level,
                "Health: " + this.CurrentHP + " | " + this.MaxHP,
                "Mana: " + this.CurrentMP + " | " + this.MaxMP,
                "Stamina: " + this.CurrentStamina + " | " + this.MaxStamina,
                "Attack: " + this.Attack,
                "Defense: " + this.Defense,
                "Magic Attack: " + this.MagAttack,
                "Magic Defense: " + this.MagDefense,
                "Luck: " + this.Luck,
                "Experience Value: " + this.Exp + "xp",
                "Gold: " + this.Gold
            };

            foreach (string name in AbilityNames)
            {
                prompts.Add($"Ability: {name}");
            }
            DisplayMethods.DisplayInformation(prompts);
            DisplayMethods.DisplayWrappedInformation($"Lore: {this.Lore}");
            DisplayMethods.DisplayInformation("Press any key to continue...", true);
        }
コード例 #3
0
        public void RunCharacterCreation()
        {
            var song = new Playable(new MusicPlayer(), Track.Intro);

            song.Play();
            List <string> getName = new List <string>()
            {
                "Enter Name: "
            };

            this.Player = new PlayerCharacter(DisplayMethods.DisplayInformation(getName, true));

            Console.Clear();

            List <string> prompts = new List <string>()
            {
                "Welcome to a Rogue Tribute",
                "Every single playthrough will be randomized and unique",
                "There are 10 Levels...",
                "Hadrian, The Stone King, Awaits you at the End...",
                "GoodLuck...",
            };

            DisplayMethods.DisplayInformation(prompts, 500);

            DisplayMethods.DisplayInformation(this.Player.Name, 300);

            DisplayMethods.DisplayInformation("Press Any Key to Continue...", true);

            Console.Clear();

            this.Player.AwardExp(1);
            this.Player.CheckIfLevelUp();
            song.Stop();
        }
コード例 #4
0
        public void PhysicalAttack(Monster monster)
        {
            this.CurrentStamina -= 1;
            if (this.CurrentStamina > -1)
            {
                int dealtDamage = this.Attack - monster.Defense;
                if (dealtDamage < 0)
                {
                    dealtDamage = 0;
                }
                monster.CurrentHP -= dealtDamage;
                List <string> prompts = new List <string>()
                {
                    $"{this.Name} Punched the {monster.Name}",
                    $"{this.Name} dealt {dealtDamage} dmg!!!",
                    $"You spent 1 stamina || Current Stamina {this.CurrentStamina}",
                    $"The {monster.Name} trembles... probably..."
                };
                DisplayMethods.DisplayInformation(prompts);
            }
            else
            {
                this.CurrentStamina = 0;
                DisplayMethods.DisplayInformation("You were too tired to attack... (Stamina too low)");
            }

            System.Threading.Thread.Sleep(1000);
        }
コード例 #5
0
        internal void ViewSpells()
        {
            List <string> prompts = new List <string>();

            foreach (Spell spell in Spells)
            {
                prompts.Add($"{spell.Name} || Cost: {spell.MpCost} || Base Damage: {spell.Damage}");
            }
            DisplayMethods.DisplayInformation(prompts);
        }
コード例 #6
0
        public void ViewItemInventory()
        {
            Dictionary <string, int> newPrompts = new Dictionary <string, int>();

            foreach (IItem item in Inventory)
            {
                newPrompts[item.ItemName] += 1;
            }
            DisplayMethods.DisplayInformation("Item Inventory");
            DisplayMethods.DisplayInformation(newPrompts);
        }
コード例 #7
0
        private void AttackPlayer(PlayerCharacter player)
        {
            int dealtDamage = this.Attack - player.Defense + player.TempDef;

            if (dealtDamage < 0)
            {
                dealtDamage = 0;
            }
            player.CurrentHP -= dealtDamage;
            List <string> prompts = new List <string>()
            {
                $"The {this.Name} attacked!!!",
                $"It dealt {dealtDamage} dmg!!!",
            };

            DisplayMethods.DisplayInformation(prompts);
            DisplayMethods.DisplayInformation("Press any key to continue...", true);
        }
コード例 #8
0
        public void ViewStatus()
        {
            List <string> newPrompts = new List <string>
            {
                "Name: " + this.Name,
                "Level: " + this.Level,
                "Health: " + this.CurrentHP + " | " + this.MaxHP,
                "Mana: " + this.CurrentMP + " | " + this.MaxMP,
                "Stamina: " + this.CurrentStamina + " | " + this.MaxStamina,
                "Attack: " + this.Attack,
                "Defense: " + this.Defense,
                "Magic Attack: " + this.MagAttack,
                "Magic Defense: " + this.MagDefense,
                "Luck: " + this.Luck,
                "Current Experience: " + this.Exp + "xp" + " | to next level " + (LevelingArray[this.Level] - this.Exp) + "xp",
                "Gold: " + this.Gold
            };

            DisplayMethods.DisplayInformation(newPrompts);
        }
コード例 #9
0
        public void DoPlayerInput(ConsoleKeyInfo input)
        {
            Console.Clear();
            switch (input.Key)
            {
            case ConsoleKey.I:
            {
                if (this.Player.Inventory != null)
                {
                    this.Player.ViewItemInventory();
                }
                else
                {
                    DisplayMethods.DisplayInformation("Your Inventory Is Empty");
                }
                break;
            }

            case ConsoleKey.V:
            {
                this.Player.ViewStatus();
                break;
            }

            case ConsoleKey.Escape:
            {
                DisplayMethods.DisplayInformation("Paused...");
                break;
            }

            case ConsoleKey.O:
            {
                this.Player.ViewSpells();
                break;
            }
            }
            DisplayMethods.DisplayInformation("Press Enter to Continue...", true);

            Console.Clear();
        }
コード例 #10
0
        private void Defend(PlayerCharacter player)
        {
            List <string> prompts = new List <string>()
            {
                $"The {this.Name} hunkered down and guarded",
                $"The {this.Name} restored 1 stamina and gained {(int)(this.Level * 1.5)} defense and {(int)(this.Level * 1.5)} magic defense for the next turn"
            };

            if (this.CurrentStamina + 1 <= this.MaxStamina)
            {
                this.CurrentStamina++;
            }
            else
            {
                this.CurrentStamina = this.MaxStamina;
            }

            this.Defense    += (int)(this.Level * 1.5);
            this.MagDefense += (int)(this.Level * 1.5);
            this.IsDefend    = true;

            DisplayMethods.DisplayInformation(prompts);
            DisplayMethods.DisplayInformation("Press any key to continue...", true);
        }
コード例 #11
0
        private void RunEncounterLoop(Monster newMonster, PlayerCharacter player)
        {
            var song = new Playable(new MusicPlayer(), Track.Battle);

            song.Play();

            System.Threading.Thread.Sleep(1000);

            Console.Clear();
            while (true)
            {
                bool winState     = false;
                bool loseState    = false;
                bool ranAwayState = false;
                bool restartMenu  = false;

                string        input;
                List <string> prompts = new List <string>()
                {
                    $"You face the mighty {newMonster.Name}",
                    $"HP: {newMonster.CurrentHP}",
                    $"Attack: {newMonster.Attack}",
                    "",
                    "Choose your choice...",
                    $"(1) Attack the {newMonster.Name}",
                    $"(2) Use a Spell on the {newMonster.Name}",
                    $"(R) Attempt to run away based on Luck Stat",
                    $"(I) Inspect the monster (Costs a turn)",
                    "",
                    "",
                    $"{player.Name} | HP: {player.CurrentHP} | MP: {player.CurrentMP} | Stam: {player.CurrentStamina}",
                    "Player Input (1, 2, R, I):"
                };
                while (true)
                {
                    input = DisplayMethods.DisplayInformation(prompts, true);
                    input = input.Substring(0, 1);
                    input = input.ToUpper();
                    if (input == "1" || input == "2" || input == "R" || input == "I")
                    {
                        break;
                    }
                    else
                    {
                        Console.Clear();
                    }
                }
                Console.Clear();
                switch (input)
                {
                case "1":
                    player.PhysicalAttack(newMonster);
                    break;

                case "2":
                {
                    bool doAttack = false;
                    while (!doAttack)
                    {
                        List <string> magicPrompts = new List <string>()
                        {
                            "Choose a spell to cast: "
                        };
                        for (int i = 0; i < player.Spells.Count; i++)
                        {
                            magicPrompts.Add($"({i + 1}) {player.Spells[i].Name}");
                        }
                        magicPrompts.Add("(Q) Quit Back to Select");
                        magicPrompts.Add("Player Input: ");
                        string magicInput = DisplayMethods.DisplayInformation(magicPrompts, true);
                        magicInput = magicInput.Substring(0, 1);

                        if (magicInput.ToUpper() == "Q")
                        {
                            Console.Clear();
                            restartMenu = true;
                            break;
                        }

                        for (int i = 0; i < player.Spells.Count; i++)
                        {
                            if ((i + 1).ToString() == magicInput)
                            {
                                doAttack = true;
                            }
                        }

                        if (doAttack)
                        {
                            if (player.CurrentMP >= player.Spells[int.Parse(magicInput) - 1].MpCost)
                            {
                                Console.Clear();
                                player.MagicalAttack(newMonster, player.Spells[int.Parse(magicInput) - 1].Name);
                            }
                            else
                            {
                                doAttack = false;
                                DisplayMethods.DisplayInformation("You do not have enough mana!!!");
                                DisplayMethods.DisplayInformation("Press enter to continue...", true);
                                Console.Clear();
                            }
                        }
                    }
                    break;
                }

                case "R":
                    Random runAwayChance = new Random();
                    if (runAwayChance.Next(0, newMonster.Luck) < runAwayChance.Next(0, player.Luck))
                    {
                        DisplayMethods.DisplayInformation("Successfully got away!!!");
                        ranAwayState = true;
                    }
                    else
                    {
                        DisplayMethods.DisplayInformation("Failed to get away!!!");
                    }
                    break;

                case "I":
                {
                    newMonster.DisplayStatus();
                    DisplayMethods.DisplayInformation("Press Any key To Continue");
                    Console.Clear();
                    break;
                }
                }

                if (restartMenu)
                {
                    continue;
                }

                if (ranAwayState)
                {
                    song.Stop();
                    break;
                }

                winState = newMonster.CurrentHP <= 0;

                DisplayMethods.DisplayInformation("");
                if (winState)
                {
                    DisplayMethods.DisplayInformation($"The {newMonster.Name} has finally fallen... What a challenge.");
                    player.AwardExp(newMonster.Exp);
                    Console.Clear();
                    song.Stop();
                    player.CheckIfLevelUp();
                    break;
                }
                newMonster.Act(player);
                Console.Clear();

                loseState = player.CurrentHP <= 0;



                if (loseState)
                {
                    DisplayMethods.DisplayInformation($"{player.Name} has died horribly at the hands of the mighty {newMonster.Name}...");
                    DisplayMethods.DisplayInformation("Press any key to end...", true);
                    song.Stop();
                    break;
                }
                prompts.Clear();
            }
            song.Stop();
        }
コード例 #12
0
        private void UseAbility(PlayerCharacter player)
        {
            List <string> prompts = new List <string>()
            {
                $"The {this.Name} used {this.AbilityToUse.Name}",
                $"The {this.Name} {this.AbilityToUse.Dialog}"
            };

            if (this.AbilityToUse.IsAttack)
            {
                int physicalDealtDamage = (this.AbilityToUse.Attack + this.Attack) - player.Defense + player.TempDef;
                int magicalDealtDamage  = (this.AbilityToUse.MagAttack + this.MagAttack) - player.MagDefense + player.TempMagDef;


                if (physicalDealtDamage > 0)
                {
                    prompts.Add($"The {this.Name} dealt {physicalDealtDamage} physical damage");
                    player.CurrentHP -= physicalDealtDamage;
                }

                if (magicalDealtDamage > 0)
                {
                    prompts.Add($"The {this.Name} dealt {magicalDealtDamage} magic damage");
                    player.CurrentHP -= magicalDealtDamage;
                }

                if (this.AbilityToUse.HP > 0)
                {
                    prompts.Add($"The {this.Name} healed you {this.AbilityToUse.HP} HP");
                    if (player.CurrentHP + this.AbilityToUse.HP <= player.MaxHP)
                    {
                        player.CurrentHP += this.AbilityToUse.HP;
                    }
                    else
                    {
                        player.CurrentHP = player.MaxHP;
                    }
                }
                this.CurrentMP -= this.AbilityToUse.MP;
            }
            else
            {
                if (this.AbilityToUse.HP != 0)
                {
                    prompts.Add($"The {this.Name} {VerbForStatus(this.AbilityToUse.HP)} its health for {this.AbilityToUse.HP}");
                }
                if (this.AbilityToUse.MP != 0)
                {
                    prompts.Add($"The {this.Name} {VerbForStatus(this.AbilityToUse.MP)} its mana for {this.AbilityToUse.MP}");
                }
                if (this.AbilityToUse.Stamina != 0)
                {
                    prompts.Add($"The {this.Name} {VerbForStatus(this.AbilityToUse.Stamina)} its stamina for {this.AbilityToUse.Stamina}");
                }
                if (this.AbilityToUse.Attack != 0)
                {
                    prompts.Add($"The {this.Name} {VerbForCombat(this.AbilityToUse.Attack)} its attack by {this.AbilityToUse.Attack}");
                }
                if (this.AbilityToUse.Defense != 0)
                {
                    prompts.Add($"The {this.Name} {VerbForCombat(this.AbilityToUse.Defense)} its defense by {this.AbilityToUse.Defense}");
                }
                if (this.AbilityToUse.MagAttack != 0)
                {
                    prompts.Add($"The {this.Name} {VerbForCombat(this.AbilityToUse.MagAttack)} its magic attack by {this.AbilityToUse.MagAttack}");
                }
                if (this.AbilityToUse.MagAttack != 0)
                {
                    prompts.Add($"The {this.Name} {VerbForCombat(this.AbilityToUse.MagDefense)} its magic defense by {this.AbilityToUse.MagDefense}");
                }

                if (this.CurrentHP + this.AbilityToUse.HP <= this.MaxHP)
                {
                    this.CurrentHP += this.AbilityToUse.HP;
                }
                else
                {
                    this.CurrentHP = this.MaxHP;
                }

                if (this.CurrentMP + this.AbilityToUse.MP <= this.MaxMP)
                {
                    this.CurrentMP += this.AbilityToUse.MP;
                }
                else
                {
                    this.CurrentMP = this.MaxMP;
                }

                if (this.CurrentStamina + this.AbilityToUse.Stamina <= this.MaxStamina)
                {
                    this.CurrentStamina += this.AbilityToUse.Stamina;
                }
                else
                {
                    this.CurrentStamina = this.MaxStamina;
                }

                this.Attack     += this.AbilityToUse.Attack;
                this.Defense    += this.AbilityToUse.Defense;
                this.MagAttack  += this.AbilityToUse.MagAttack;
                this.MagDefense += this.AbilityToUse.MagDefense;
            }

            DisplayMethods.DisplayInformation(prompts);
            DisplayMethods.DisplayInformation("Press any key to continue...", true);
        }
コード例 #13
0
        private void LevelUp()
        {
            List <string> prompts = new List <string>();

            prompts.Add("Level: " + this.Level);

            Random randomLevelSeed   = new Random();
            int    randomHPAddition  = randomLevelSeed.Next(3, this.Luck / randomLevelSeed.Next(1, 3) + 3);
            int    randomMPAddition  = randomLevelSeed.Next(2, this.Luck / randomLevelSeed.Next(1, 3) + 1);
            int    count             = 3;
            bool   didLevelNineCount = false;


            while (this.LevelingArray[this.Level] < this.Exp)
            {
                if (this.Level >= 9 && !didLevelNineCount)
                {
                    count             = 9;
                    didLevelNineCount = true;
                }
                prompts.Add("LEVEL UP!!!");
                prompts.Add("New Level: " + (this.Level + 1));
                prompts.Add($"HP: {this.MaxHP} + {randomHPAddition} = {(this.MaxHP + randomHPAddition)}");
                prompts.Add($"MP: {this.MaxMP} + {randomMPAddition} = {(this.MaxMP + randomMPAddition)}");

                prompts.Add($"You have {count} stats to allot: ");
                prompts.Add($"(1) Attack: {this.Attack}");
                prompts.Add($"(2) Defense: {this.Defense}");
                prompts.Add($"(3) Magic Attack: {this.MagAttack}");
                prompts.Add($"(4) Magic Defense: {this.MagDefense}");
                prompts.Add($"(5) Stamina: {this.MaxStamina}");
                prompts.Add($"(6) Luck: {this.Luck}");
                prompts.Add("");
                prompts.Add("Player input (1,2,3,4,5,6): ");


                string input;
                while (true)
                {
                    input = DisplayMethods.DisplayInformation(prompts, true);
                    input = input.Substring(0, 1);
                    if (input == "1" || input == "2" || input == "3" || input == "4" || input == "5" || input == "6")
                    {
                        break;
                    }
                    else
                    {
                        Console.Clear();
                    }
                }
                switch (input)
                {
                case "1":
                    this.Attack++;
                    break;

                case "2":
                    this.Defense++;
                    break;

                case "3":
                    this.MagAttack++;
                    break;

                case "4":
                    this.MagDefense++;
                    break;

                case "5":
                    this.MaxStamina++;
                    this.CurrentStamina++;
                    break;

                case "6":
                    this.Luck++;
                    break;
                }
                count--;
                if (count < 1)
                {
                    this.Level++;
                    count            = 3;
                    this.MaxHP      += randomHPAddition;
                    this.CurrentHP  += randomHPAddition;
                    this.MaxMP      += randomMPAddition;
                    this.CurrentMP  += randomMPAddition;
                    randomHPAddition = randomLevelSeed.Next(3, this.Luck / randomLevelSeed.Next(1, 3) + 3);
                    randomMPAddition = randomLevelSeed.Next(2, this.Luck / randomLevelSeed.Next(1, 3) + 1);
                }
                prompts.Clear();
                Console.Clear();
            }

            if (this.Level == 1)
            {
                Spell fireBall = new Spell("FireBall", 2, 2);
                DisplayMethods.DisplayInformation($"For reaching {this.Level} level you have been awarded the {fireBall.Name} Spell || {fireBall.Damage} damage || {fireBall.MpCost} cost. ");
                this.AddSpell(fireBall);
            }

            DisplayMethods.DisplayInformation("Finished Leveling", true);
            Console.Clear();
        }