Найти в Дзене

Написал игру в консоли на C sharp. Разбор кода + игра «Бой с Некромантом»

Оглавление
"Бой с Некромантом". Картинка с Яндекс картинок
"Бой с Некромантом". Картинка с Яндекс картинок

Всем Хай! Сегодня тот день, когда мы заканчиваем 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 #сишарп