/// <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> /// метод описывающий защиту игрока1 /// </summary> private void Defence() { //выбор атакующего юнита бота int botNumber = generator.Next(0, Player2UnitsList.Count()); //создание бойца бота Units BotFighter = Player2UnitsList[botNumber]; //создание бойца игрока1 Units PlayerFighter = Player1UnitsList[selectedButton]; //расчитываем очки игрока1 double PlayerPoints = PlayerFighter.Defence + PlayerFighter.Speed * 0.7 + 0.22 * PlayerFighter.Growth + 0.2 * PlayerFighter.AI_Value; //расчитываем очки бота double BotPoints = BotFighter.Attack + BotFighter.Speed * 0.8 + 0.1 * BotFighter.Growth + 0.2 * BotFighter.AI_Value; //если атака не прошла if (((BotPoints - PlayerPoints) / (BotFighter.Health - PlayerFighter.Health) < 0) || (PlayerFighter.Health == BotFighter.Health)) { MessageBox.Show($"{BotFighter.Unit_name} атакует {PlayerFighter.Unit_name} , однако броня слишком прочная, атака была отражена!"); } //если разность меньше 0.4 и юнит игрока1 погибает,изменяем здоровье на лейбле, изменяем здоровье юнита на 0 else if ((BotPoints - PlayerPoints) / (BotFighter.Health - PlayerFighter.Health) < 0.4) { PlayerFighter.Health = 0; MessageBox.Show($"{BotFighter.Unit_name} атакует {PlayerFighter.Unit_name} , удар оказался настолько мощным, что ваш защитник погиб на месте!"); if (selectedButton == 0) { label1.Text = $"{Player1UnitsList[0].Unit_name} \n Health = {0}"; button1.Enabled = false; } if (selectedButton == 1) { label2.Text = $"{Player1UnitsList[1].Unit_name} \n Health = {0}"; button2.Enabled = false; } if (selectedButton == 2) { label3.Text = $"{Player1UnitsList[2].Unit_name} \n Health = {0}"; button3.Enabled = false; } if (selectedButton == 3) { label4.Text = $"{Player1UnitsList[3].Unit_name} \n Health = {0}"; button4.Enabled = false; } if (selectedButton == 4) { label5.Text = $"{Player1UnitsList[4].Unit_name} \n Health = {0}"; button5.Enabled = false; } Player1UnitsList[selectedButton].Health = 0; } //если после атаки здоровье юнита игрока1<=0, он погибает,изменяем здоровье на лейбле, изменяем здоровье юнита на 0 else { PlayerFighter.Health = PlayerFighter.Health - (BotFighter.Maximum_Damage + BotFighter.Minimum_Damage) / 2.0; if (PlayerFighter.Health <= 0) { MessageBox.Show($"{BotFighter.Unit_name} атакует {PlayerFighter.Unit_name} , здоровье выбранного защитника упало до критической отметки, он повержен!"); if (selectedButton == 0) { label1.Text = $"{Player1UnitsList[0].Unit_name} \n Health = {0}"; button1.Enabled = false; } if (selectedButton == 1) { label2.Text = $"{Player1UnitsList[1].Unit_name} \n Health = {0}"; button2.Enabled = false; } if (selectedButton == 2) { label3.Text = $"{Player1UnitsList[2].Unit_name} \n Health = {0}"; button3.Enabled = false; } if (selectedButton == 3) { label4.Text = $"{Player1UnitsList[3].Unit_name} \n Health = {0}"; button4.Enabled = false; } if (selectedButton == 4) { label5.Text = $"{Player1UnitsList[4].Unit_name} \n Health = {0}"; button5.Enabled = false; } Player1UnitsList[selectedButton].Health = 0; } //если после атаки здоровье юнита игрока1>0,изменяем здоровье на лейбле, изменяем здоровье юнита с вычетом произвденной атаки else { MessageBox.Show($"{BotFighter.Unit_name} атакует {PlayerFighter.Unit_name} и наносит {(BotFighter.Maximum_Damage + BotFighter.Minimum_Damage) / 2.0} урона"); if (selectedButton == 0) { label1.Text = $"{Player1UnitsList[0].Unit_name} \n Health = {PlayerFighter.Health}"; } if (selectedButton == 1) { label2.Text = $"{Player1UnitsList[1].Unit_name} \n Health = {PlayerFighter.Health}"; } if (selectedButton == 2) { label3.Text = $"{Player1UnitsList[2].Unit_name} \n Health = {PlayerFighter.Health}"; } if (selectedButton == 3) { label4.Text = $"{Player1UnitsList[3].Unit_name} \n Health = {PlayerFighter.Health}"; } if (selectedButton == 4) { label5.Text = $"{Player1UnitsList[4].Unit_name} \n Health = {PlayerFighter.Health}"; } Player1UnitsList[selectedButton].Health = PlayerFighter.Health; } } //если после хода здоровье всех юнитов игрока1=0 -поражение 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(); } //иначе записываем автосохранение и переходим к атаке else { Save(); label14.Text = "Выберите юнита, которым будете атаковать!"; } }