/// <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); } }