Найти тему

Чук и Гек. Пишем драку на С sharp.

Оглавление
Рандомный бой на C#
Рандомный бой на C#

Всем Хай! И как я обещал сегодня опять рандом. А точнее небольшой бой между Чуком и Геком, в котором мы будем использовать рандом. Да, может кто-то скажет, что уже была практика по рандому, когда мы делали игру «Угадай число» здесь. Но смею возразить, что мы не только повторяем рандом, но и все темы, что прошли до этого. А повторение мать учение.

Код программы.

Давайте приступим к разбору кода, который я написал.

Random rand = new Random();
float healthChuk = rand.Next(50,100);
int armorChuk = rand.Next(10,35);
int damageChuk = rand.Next(20,50);
float healthGek = rand.Next(80,120);
int armorGek = rand.Next(30,45);
int damageGek = rand.Next(30,55);
Console.WriteLine($"Чук: Жизни - {healthChuk}, Броня - {armorChuk}, MAX.Урон - {damageChuk}");
Console.WriteLine($"Гек: Жизни - {healthGek}, Броня - {armorGek}, MAX.Урон - {damageGek}");
while (healthChuk > 0 && healthGek > 0)
{
healthChuk -= Convert.ToSingle(rand.Next(0, damageGek)) * armorChuk / 100;
healthGek -= Convert.ToSingle(rand.Next(0, damageChuk)) * armorGek / 100;
Console.WriteLine($"Жизни Чука - {healthChuk}");
Console.WriteLine($"Жизни Гека - {healthGek}");
}
if (healthChuk <= 0 && healthGek <= 0)
{
Console.WriteLine("Ничья, оба умерли!");
}
else if (healthChuk <= 0)
{
Console.WriteLine("Победил Гек!");
}
else if (healthGek <= 0)
{
Console.WriteLine("Победил Чук!");
}

Биться у нас будет два бойца, у каждого из которых есть три параметра:

  • Жизни(health)
  • Броня(armor)
  • Наносимый урон(damage)

А значит, нам нужно ввести шесть переменных. И не забываем подключить рандом в коде, строчкой «Random rand = new Random()».

Характиристика Чука.

Чук у нас будет более хилый и слаб по урону, но с лучшей бронёй. То есть жизней рандомно будет выбираться от 50 до 100.

Броня, а точнее мы будем записывать процент урона, который дойдёт по игроку, от 10% до 35%.

И максимальный урон он будет наносить от 20 до 50. Почему максимальный объясню позже.

Характиристики Гека.

У Гека же должно быть больше здоровья и урона, но броня слабей. Жизней будет от 80 до 120.

Проходить урона по нему от 30% до 45%.

А максимальный урон будет от 30 до 55.

Дальше мы кратенько выводим в консоль выбранные, рандомно из тех диапазонов, которые мы указали, параметры бойцов.

Вывод параметров бойцов перед боем
Вывод параметров бойцов перед боем

И уже в цикле мы будем проводить бой.

В условиях работы цикла указываем, чтобы он работал, пока кто-нибудь не падёт. То есть он работает пока у Чука либо Гека жизней больше 0.

Расчёт повреждений.

Потом мы переходим к самому расчёту повреждений. Здесь немного поподробней. Я думаю, вы заметили, что мы жизни бойцов засунули в переменную «float». А значит, значения нам нужны очень точные. А вы должны помнить из этой статьи, чтобы были дробные числа, в примере хоть одно число должно быть дробное. Поэтому конвертируем «damage», который у нас в «int», во «float». И как я говорил чуть выше, выводиться у нас будет максимальный урон бойцов. А это значит, что с помощью, опять же, рандома делаем диапазон, где есть минимальный и максимальный урон «Convert.ToSingle(rand.Next(0, damageGek))», от 0 до максимального значения урона. Дальше мы полученное значение умножаем на процент урона, который дойдёт до противника, то есть его броню и делим всё на 100.

Всё, первая итерация закончена. Дальше в условиях цикла проверяется, после взаимных ударов, сколько осталось жизней.

«while (healthChuk > 0 && healthGek > 0)»

Если жизни ещё есть, то цикл начинается сначала и каждая итерация выводится в консоль, а если нет, то цикл заканчивается.

Проверка победителя.

После цикла идёт обычная проверка кто победил. Через «if» проверяются жизни бойцов, и если у обоих бойцов их нет, то ничья. Имя победителя выводится в консоль.

Видео боя Чука и Гека.

Это всё. Можете скопировать код и поиграться с параметрами жизни, брони и урона. Я планирую практику растянуть ещё на две статьи. После завра будет статья с разбором сразу трёх программ, по пройденным темам блока. А в следующей статье будет один, но большой проект. Я ещё сам не знаю, как его реализовать. Но будет точно интересно. Так что подписывайтесь на канал, чтобы не пропустить самое интересное. Всем пока!

#разработкаигр #it #программированиеснуля #csharp #программистснуля #изучениеязыкапрограммирования