Exemple #1
0
        /// <summary>
        /// Собственно, сама битва
        /// </summary>
        /// <param name="player"> Игрок </param>
        /// <param name="enemy"> Лист с противниками </param>
        public static void GoBattle(Player player, List <Enemy> enemy)
        {
            // Определяем награду игрока
            var reward = Enemy.GetReward(enemy);

            // Смотрим, есть ли среди противников кто-то, на кого он брал задание
            CheckTasks(enemy, player);

            while (Enemy.IsEnemyLive(enemy) && player.IsLive)
            {
                Window.PrintEnemy(enemy);
                Window.PrintBattleCharacteristic(player, enemy);
                player.AddMana(player.Level);
                // определяем действие игрока
                var enemyDamage = SelectPlayerAction(player, enemy.Count);
                // проверка на целостность оружия
                player.CheckWeapons();
                Window.PrintEnemyAtack();

                // противники наносят урон
                ApplyDamageForPlayer(player, enemyDamage, enemy);

                // если игрок защитился, переходим к следующему ходу
                if (enemyDamage.Length == 0)
                {
                    continue;
                }

                // если игрок одновременно защищается и атакует, переопределяем атаку
                if (enemyDamage[0] == -1)
                {
                    enemyDamage = PlayerWeaponsAttack(player, enemy.Count);
                    for (int i = 0; i < enemyDamage.Length; i++)
                    {
                        enemyDamage[i] = (int)(enemyDamage[i] * Program.Random.NextDouble() / 2 + 0.5);
                    }
                }

                for (int i = 0; i < enemy.Count; i++)
                {
                    enemy[i].OnEnemyAtack(enemy[i], enemyDamage[i]);
                }

                // проверяем, есть ли жертвы среди противников
                Enemy.CheckEnemyDie(enemy);
                Window.PrintOnEnemyAtack();
            }

            // очищаем карту
            Window.ClearMap(Window.BattleMap, Window.EnemySymble);

            // если игрок выжил, то даем ему награду - честно заработал
            if (player.IsLive)
            {
                GetRewardForPlayer(player, reward.Item1, reward.Item2);
            }
        }