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