Example #1
0
        public void SimulateBattle()
        {
            CreateEnemy();
            AttackMode  attackMode     = new AttackMode();
            DefenseMode defenseMode    = new DefenseMode();
            Random      random         = new Random();
            bool        enemyAttacking = false;
            bool        wrongButton    = false;
            bool        triedDef       = false;
            int         userDamage     = 0;
            bool        userDefended   = false;
            bool        enemyDefended  = false;

            while (player.IsAlive && enemy.IsAlive)
            {
                if (enemyAttacking)
                {
                    Console.WriteLine("Apparently the enemy will attack... Try to defense it\n");
                }

                ShowInfo(player.Name, player.CurrentHealth, player.Weapon, enemy.Name, enemy.CurrentHealth, enemy.Weapon);
                string[] menu =
                {
                    "[1] Front Attack",
                    "[2] Vertical Attack",
                    "[3] Horizontal Attack",
                    "[4] Defense Front",
                    "[5] Defense Vertically",
                    "[6] Defense Horizontally"
                };
                cw.CWStringArray(menu);

                ConsoleKeyInfo selection = Console.ReadKey();
                Console.Clear();
                switch (selection.Key)
                {
                case ConsoleKey.D1:
                    userDamage = (attackMode.GetData(AttackType.NormalAttack).DataItem as IAttack).Damage((int)player.Weapon.AttackRating);
                    break;

                case ConsoleKey.D2:
                    userDamage = (attackMode.GetData(AttackType.VerticalSlashAttack).DataItem as IAttack).Damage((int)player.Weapon.AttackRating);
                    break;

                case ConsoleKey.D3:
                    userDamage = (attackMode.GetData(AttackType.HorizontalSlashAttack).DataItem as IAttack).Damage((int)player.Weapon.AttackRating);
                    break;

                case ConsoleKey.D4:
                    userDefended = (defenseMode.GetData(DefenseType.NormalDefense).DataItem as IDefense).
                                   GetDefense((DefenseType)random.Next((int)Enum.GetValues(typeof(DefenseType)).Cast <DefenseType>().Max()) + 1);
                    triedDef = true;
                    break;

                case ConsoleKey.D5:
                    userDefended = (defenseMode.GetData(DefenseType.VerticalDefense).DataItem as IDefense).
                                   GetDefense((DefenseType)random.Next((int)Enum.GetValues(typeof(DefenseType)).Cast <DefenseType>().Max()) + 1);
                    triedDef = true;
                    break;

                case ConsoleKey.D6:
                    userDefended = (defenseMode.GetData(DefenseType.HorizontalDefense).DataItem as IDefense).
                                   GetDefense((DefenseType)random.Next((int)Enum.GetValues(typeof(DefenseType)).Cast <DefenseType>().Max()) + 1);
                    triedDef = true;
                    break;

                default:
                    Console.WriteLine("You did nothing...");
                    wrongButton = true;
                    break;
                }

                if (enemyAttacking)
                {
                    if (!userDefended)
                    {
                        int enemyDamage = (attackMode.GetData((AttackType)random.
                                                              Next((int)Enum.GetValues(typeof(AttackType)).
                                                                   Cast <AttackType>().Max()) + 1).DataItem as IAttack).
                                          Damage((int)enemy.Weapon.AttackRating);
                        player.DamagePlayer(enemyDamage);

                        if (triedDef)
                        {
                            Console.WriteLine($"You failed to block { enemy.Name }'s attack");
                        }
                        Console.WriteLine($"{ enemy.Name } landed { enemyDamage } damage to you.");
                    }
                    else
                    {
                        Console.WriteLine($"You successfully defended { enemy.Name }'s attack");
                    }

                    if (userDamage > 0)
                    {
                        enemy.DamageEnemy(userDamage);
                        Console.WriteLine($"You landed { enemy.Name } to { userDamage } damage");
                    }
                }
                else
                {
                    if (userDamage > 0)
                    {
                        // enemy tries to defense
                        if (random.Next(100) < 25)
                        {
                            enemyDefended = (defenseMode.GetData((DefenseType)random.
                                                                 Next((int)Enum.GetValues(typeof(DefenseType)).Cast <DefenseType>().Max()) + 1).
                                             DataItem as IDefense).
                                            GetDefense((DefenseType)random.
                                                       Next((int)Enum.GetValues(typeof(DefenseType)).Cast <DefenseType>().Max()) + 1);
                        }

                        if (!enemyDefended)
                        {
                            enemy.DamageEnemy(userDamage);
                            Console.WriteLine($"You landed { enemy.Name } to { userDamage } damage");
                        }
                        else
                        {
                            Console.WriteLine($"{ enemy.Name } managed to block your attack");
                        }
                    }
                    else
                    {
                        if (!wrongButton)
                        {
                            Console.WriteLine("You made an defense move but it was meaningless...");
                        }
                    }
                }

                Console.WriteLine();

                if (!player.IsAlive)
                {
                    Console.Clear();
                    Console.WriteLine($"{ player.Name } Died");
                    Console.WriteLine("...GAME OVER...");
                    Console.ReadLine();
                    Console.Clear();
                }
                if (!enemy.IsAlive)
                {
                    Console.Clear();
                    Console.WriteLine($"{ player.Name } killed { enemy.Name }");
                    Console.WriteLine($"...CONGRUCULATIONS...");
                    Console.ReadLine();
                    Console.Clear();
                }

                userDamage     = 0;
                userDefended   = false;
                triedDef       = false;
                wrongButton    = false;
                enemyAttacking = !enemyAttacking;
            }
        }