/// <summary> /// начало боя,делаем кнопки активными /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void label14_Click(object sender, EventArgs e) { if (label14.Text == "Нажмите для НАЧАЛА БОЯ") { label14.Text = "Выберите юнита, которым будете атаковать!"; button1.Enabled = true; button2.Enabled = true; button3.Enabled = true; button4.Enabled = true; button5.Enabled = true; //если игра из сохранения и какие то из юнитов уже убиты if (Player1UnitsList[0].Health == 0) { button1.Enabled = false; } if (Player1UnitsList[1].Health == 0) { button2.Enabled = false; } if (Player1UnitsList[2].Health == 0) { button3.Enabled = false; } if (Player1UnitsList[3].Health == 0) { button4.Enabled = false; } if (Player1UnitsList[4].Health == 0) { button5.Enabled = false; } //если все юниты игрока1 убиты if ((Player1UnitsList[0].Health + Player1UnitsList[1].Health + Player1UnitsList[2].Health + Player1UnitsList[3].Health + Player1UnitsList[4].Health) == 0) { this.Hide(); Lose lose = new Lose(); lose.Show(); } //если все юниты игрока2 убиты if ((Player2UnitsList[0].Health + Player2UnitsList[1].Health + Player2UnitsList[2].Health + Player2UnitsList[3].Health + Player2UnitsList[4].Health) == 0) { this.Hide(); Win win = new Win(); win.Show(); } List <Units> TempBotList = new List <Units>(); foreach (var unit in Player2UnitsList) { TempBotList.Add(unit); } for (int i = 0; i < Player2UnitsList.Count(); i++) { if (Player2UnitsList[i].Health <= 0) { TempBotList.Remove(Player2UnitsList[i]); } } Player2UnitsList.Clear(); foreach (var unit in TempBotList) { Player2UnitsList.Add(unit); } } }
/// <summary> /// Метод для описывания атаки /// </summary> private void Attack() { //выбор атакующего юнита ботом int botNumber = generator.Next(0, Player2UnitsList.Count()); //боец бота Units BotFighter = Player2UnitsList[botNumber]; //боец игрока Units PlayerFighter = Player1UnitsList[selectedButton]; //расчитываем очки бота double BotPoints = BotFighter.Defence + BotFighter.Speed * 0.7 + 0.22 * BotFighter.Growth + 0.2 * BotFighter.AI_Value; //расчитываем очки игрока double PlayerPoints = PlayerFighter.Attack + PlayerFighter.Speed * 0.8 + 0.1 * PlayerFighter.Growth + 0.2 * PlayerFighter.AI_Value; //если атака не прошла if (((PlayerPoints - BotPoints) / (PlayerFighter.Health - BotFighter.Health) < 0) || (PlayerFighter.Health == BotFighter.Health)) { MessageBox.Show($"{PlayerFighter.Unit_name} атакует {BotFighter.Unit_name} , однако броня слишком прочная, атака была отражена!"); } //если разность меньше 0.4 и юнит бота погибает,изменяем здоровье на лейбле, убираем юнита из листа юнитов бота //меняем здоровье юнита на 0 в FullBotUnitsLIst else if ((PlayerPoints - BotPoints) / (PlayerFighter.Health - BotFighter.Health) < 0.4) { BotFighter.Health = 0; MessageBox.Show($"{PlayerFighter.Unit_name} атакует {BotFighter.Unit_name} , удар оказался настолько мощным, что противник погиб на месте!"); if (BotFighter == FullBotUnitsList[0]) { label6.Text = $"{FullBotUnitsList[0].Unit_name} \n Health = {0}"; FullBotUnitsList[0].Health = 0; } if (BotFighter == FullBotUnitsList[1]) { label7.Text = $"{FullBotUnitsList[1].Unit_name} \n Health = {0}"; FullBotUnitsList[1].Health = 0; } if (BotFighter == FullBotUnitsList[2]) { label8.Text = $"{FullBotUnitsList[2].Unit_name} \n Health = {0}"; FullBotUnitsList[2].Health = 0; } if (BotFighter == FullBotUnitsList[3]) { label9.Text = $"{FullBotUnitsList[3].Unit_name} \n Health = {0}"; FullBotUnitsList[3].Health = 0; } if (BotFighter == FullBotUnitsList[4]) { label10.Text = $"{FullBotUnitsList[4].Unit_name} \n Health = {0}"; FullBotUnitsList[4].Health = 0; } Player2UnitsList.Remove(Player2UnitsList[botNumber]); } // Если атака нанесена,и здоровье защищающегося юнита бота<=0, юнит бота погибает,изменяем здоровье на лейбле, убираем юнита из листа юнитов бота //меняем здоровье юнита на 0 в FullBotUnitsLIst else { BotFighter.Health = BotFighter.Health - (PlayerFighter.Maximum_Damage + PlayerFighter.Minimum_Damage) / 2.0; if (BotFighter.Health <= 0) { BotFighter.Health = 0; MessageBox.Show($"{PlayerFighter.Unit_name} атакует {BotFighter.Unit_name} , здоровье противника упало до критической отметки, он повержен!"); if (BotFighter == FullBotUnitsList[0]) { label6.Text = $"{FullBotUnitsList[0].Unit_name} \n Health = {0}"; FullBotUnitsList[0].Health = 0; } if (BotFighter == FullBotUnitsList[1]) { label7.Text = $"{FullBotUnitsList[1].Unit_name} \n Health = {0}"; FullBotUnitsList[1].Health = 0; } if (BotFighter == FullBotUnitsList[2]) { label8.Text = $"{FullBotUnitsList[2].Unit_name} \n Health = {0}"; FullBotUnitsList[2].Health = 0; } if (BotFighter == FullBotUnitsList[3]) { label9.Text = $"{FullBotUnitsList[3].Unit_name} \n Health = {0}"; FullBotUnitsList[3].Health = 0; } if (BotFighter == FullBotUnitsList[4]) { label10.Text = $"{FullBotUnitsList[4].Unit_name} \n Health = {0}"; FullBotUnitsList[4].Health = 0; } Player2UnitsList.Remove(Player2UnitsList[botNumber]); } //Если атака нанесена,и здоровье защищающегося юнита бота>0,изменяем здоровье на лейбле, изменяем здоровье в листе юнитов бота //меняем здоровье юнита на нанесенную атаку в FullBotUnitsLIst else { MessageBox.Show($"{PlayerFighter.Unit_name} атакует {BotFighter.Unit_name} и наносит {(PlayerFighter.Maximum_Damage + PlayerFighter.Minimum_Damage) / 2.0} урона"); if (BotFighter == FullBotUnitsList[0]) { label6.Text = $"{FullBotUnitsList[0].Unit_name} \n Health = {BotFighter.Health}"; FullBotUnitsList[0].Health = BotFighter.Health; } if (BotFighter == FullBotUnitsList[1]) { label7.Text = $"{FullBotUnitsList[1].Unit_name} \n Health = {BotFighter.Health}"; FullBotUnitsList[1].Health = BotFighter.Health; } if (BotFighter == FullBotUnitsList[2]) { label8.Text = $"{FullBotUnitsList[2].Unit_name} \n Health = {BotFighter.Health}"; FullBotUnitsList[2].Health = BotFighter.Health; } if (BotFighter == FullBotUnitsList[3]) { label9.Text = $"{FullBotUnitsList[3].Unit_name} \n Health = {BotFighter.Health}"; FullBotUnitsList[3].Health = BotFighter.Health; } if (BotFighter == FullBotUnitsList[4]) { label10.Text = $"{FullBotUnitsList[4].Unit_name} \n Health = {BotFighter.Health}"; FullBotUnitsList[4].Health = BotFighter.Health; } Player2UnitsList[botNumber].Health = BotFighter.Health; } } //если все войска бота убиты-вы победили if (Player2UnitsList.Count() == 0) { this.Hide(); Win win = new Win(); win.Show(); } //переход к защите else { label14.Text = "Выберите юнита, которым будете защищаться!"; } }