Всем Хай! Сегодня тот день, когда мы заканчиваем 2 блок обучения практикой по полученным знаниям. Как я обещал, у нас будет мини игра «Бой с Некромантом». Написал я её за один день. Не скажу, что было сложно. Было интересно. Отправил её своему другу, он со второго раза одолел некроманта и сказал, что игра зачётная и скинет её в чат с программистами. Ну хоть кому-то понравилось. 😁
Вот задание, которое нужно было выполнить.
Напишите в комментариях, справился я или нет?
Но давайте ближе к телу. Код получился длинный, а это значит, что будет он отдельным файлом по сылке ниже.
На первый взгляд может показаться, что много, сложно и непонятно. Но это на первый взгляд. Тут только тот материал, который я изучал. Основы основ. Поэтому если разбирать весь код построчно, то всё должно быть понятно.
Подготовка к написанию игры.
Так как проект для меня, не программиста, большой, то разработку я начал с листочка, куда набросал примерный скелет программы.
- Там я написал, сколько у меня будет заклинаний, у героя и босса.
- Что обязательно в начале должен быть диалог, между персонажами , который будет продолжаться только после нажатия клавиши «Enter». Да и вообще каждое действие должно происходить после нажатие этой клавиши.
- Потом я написал, что обязательно перед боем должны быть выведены жизни персонажей.
- И обязательно для каждого персонажа, будь то действие или диалог, строчки должны подкрашиваться разными цветами. Например, жизни при выводе в консоль подкрашиваются красным.
- Сразу понятно, что вся битва будет проходить в цикле. И цикл этот будет «while» так как не понятно, сколько должно пройти итераций, прежде чем он завершиться.
- Также понятно, что нужно использовать «switch» и работу каждого заклинания нужно засовывать в отдельный кейс.
- Ну и в конце нужно вывести определённый диалог, в зависимости от исхода сражения.
Когда всё это написал и составил общий каркас, я приступил к написанию кода.
Разбор кода игры.
Я с самого начала понимал, что мне нужен рандом. Поэтому я сразу указал в коде, что он у меня будет.
«Random rand = new Random()»
Вначале мы видим кучу переменных и скажу вам, что это не все переменные. Дальше в коде они тоже будут встречаться. И чтобы не затягивать текст, объясняя значение каждой переменной, буду я о них рассказывать тогда, когда они встретятся в коде.
После переменных у меня начинается диалог Героя и Некроманта. И как я и хотел, я подсветил каждую строчку разным цветом. Для некроманта это жёлтый цвет, а для героя голубой. И как видно между каждой строчкой диалога я вставил переменную «text» с возможностью ввода данных через консоль. Это как раз так я реализовал, чтобы любое действие в коде требовало нажатие «Enter». Дальше эта переменная в коде будет встречаться часто. Поэтому останавливаться на ней больше не будем.
Дальше по плану я вывожу, в красном цвете, жизни героев. И у меня начинается запланированный цикл.
Ну и по стандарту в условиях мы пишем, что цикл работает пока у героя или врага не закончатся жизни
«while (healthBolder >= 0 && healthAzarot >= 0)»
Дальше я перечисляю возможности героя, которые выполняются, если мы вводим определённые цифры. Всё так же, когда мы писали ежедневник в этой статье. Здесь появляется переменная «chois» куда мы и будем вводить наш выбор.
Теперь у нас уже начинает работать условный оператор «switch».
Атака героя.
В первом его кейсе мы записываем нашу атаку. Но благодаря рандому «randomBolder = rand.Next(1, 3)» он либо будет работать, либо нет. То есть у нас есть возможность промахнуться при атаке. В случае если выпадает «2» проходит атака. Всё это естественно реализовано через «if». Урон при атаке я тоже решил сделать через рандом и добавил новую переменную «int factDamageBolder = rand.Next(20, damageBolder)». Дальше отнимаем от жизни некроманта сгенерированный урон. И конечную цифру выводим в консоль.
В конце атаки героя мы видим переменную «manna». В каждом кейсе она будет встречаться. Пока просто запомните её.
Ататак некроманта.
У некроманта есть два типа атаки. Это «Воровство жизни» и «Мёртвые осколки». Оба они срабатывают тоже рандомно. То есть тоже возможен промах.
Сначала идёт проверка будет ли «Воровство жизни»
randomNecroAzarot = rand.Next(1, 8);
if (randomNecroAzarot == 6)
Если оно срабатывает, то второе заклинание не активируется. При воровстве жизни мы забираем 20% жизни у нашего героя и прибавляем их нашему некроманту. И также выводим жизни обоих в консоли.
Если же «Воровство жизни» не срабатываем. То появляется шанс что сработают «Мёртвые осколки»
randomAzarot = rand.Next(1, 3);
if (randomAzarot == 2)
Здесь также некромант рандомно наносит повреждение герою
«int factDamageAzarot = rand.Next(20, damageAzarot)»,
либо промахивается.
И такая связка атаки у некроманта Азарота будет во всех 4 кейсах. То есть он всегда так атакуют после нашего хода. Поэтому дальше описывать я это не буду.
Защита героя.
Во втором кейсе мы даём нашему герой уйти в оборону и получить только тот процент урона, который прописан в переменной «protecBolder». А дальше атака некроманта.
Заклинание лечение героя.
В третьем кейсе у нас есть возможность вылечить игрока. Количество восстановленного здоровья выбирается тоже рандомно
«int factHealting = rand.Next(20, healingBolder)».
Потом атака некроманта.
Супер атака героя!
И четвёртый кейс. Здесь у нас прописана мощная атака героя. При её активации отнимается 100 жизней у некроманта. Только воспользоваться ей можно после 10 ходов. Всё остальное время копится манна. Помните в каждом кейсе такую строчку «manna++»? Вот так манна и копилась. Каждый ход героя в переменной «manna» прибавлялась единица. И как только «manna» начала равняться 10 у нас заработал «if» в кейсе 4.
«if (manna >= 10)»
И мы просто наносим 100 урона некроманту со 100% попаданием. Потом, как и всегда, начинается его ход.
Проверка победителя.
В конечном счёте у нас идёт проверка на победителя. Точно такую же проверку я использовал в этой статье, когда сталкивал Чука и Гека. Поэтому описывать здесь не буду.
Вот коротенькое видео как работает этот бой в консоли.
Видео битвы
Надеюсь, я понятно объяснил. Но если нет, то пишите вопросы в комментариях. Если кому интересно, то ниже будет ссылка на эту игру. Это уже скомпилированный "exe файл", поэтому запустится на любом ПК под Windows.
Ну а мне порам. Ведь начинается изучение следующего блока «Массивы». Для меня эта тема немного непонятна. Но будем разбираться. Увидимся через день. Пока!
#it #разработкаигр #программированиеснуля #программированиедляначинающих #какстатьпрограммистом #csharp #сишарп