Skip to content

rebble16/Console_battle_arena

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Console_RPG_fight

ПРОЕКТ НА ЯЗЫКЕ С++

Среда разработки Microsoft Visual Studio 2022

О чем данный проект?

Данный проект представляет собой систематизацию знаний, полученных после написания мейнстримных консольных игр: змейка,морской бой, просто в один день пришло в голову, что я хотел бы написать свою "игрушку", где персонажи бы дрались между собой, выясняя у кого круче яйца. Хоть папку я и назвал Console_RPG_fight по своей сути это не игра, а просто симуляция гладиаторского боя между двумя ботами с разными особенностями и рандомизированными попаданиями по врагу(присутствует логика парирования ударов).

Данный проект позволил мне:

  1. Попрактиковаться в создании своего виртуального класса
  2. Продумать логику программы:как я вижу реализацию данной симуляции
  3. Применить лямбда-функцию

Классы бойцов

Класс Параметры Урон персонажей из main() Тип класса
Character Имя; Особенность; Отображение; Уровень здоровья; Урон в ближнем бою; Тип оружия; Координаты на арене. - Базовый виртуальный класс
Warrior Название брони; Урон выстрелом из арбалета; Защита брони(+HP к текущему уровню); Острота клинка(+DMG к урону ближней атакой). Ближняя атака - 30 Дальняя атака - 10 Производный
Orc Раса; Дополнительный урон в зависимости от расы. Ближняя атака - 40 Производный
Magician Сила, которой повелевает маг; Урон магической атакой. Ближний бой - 10 Дальняя атака - 25 Производный

Перемещение по арене

Разрешается перемещаться только на 1 клетку в любую из 4 сторон:вверх/вниз,вправо/влево. Перемещение по диагонали запрещено,т.к. я посчитал что это было бы нечестно, ведь перемещение по диагонали это шаг сразу и по x и по y, а это уже читерство,поэтому BANNED! Если персонажи находятся не в зоне видимости друг друга, то направление перемещения выбирается с помощью функции rand(),ограниченной по количеством статических констант enum{UP=0,DOWN=1,LEFT=2,RIGHT=3}. Функция реализующая изменение координат объявлена в базовом классе как void move(int dx,int dy,Character& o), в ней осуществляется проверка на незанятость следующей клетки с помощью функции, объявленной в этом же классе:bool isOccupied(int y, int x, Character& o). Таким образом, если клетка занята, то персонаж будет стоять на месте в текущей итерации, иначе сделает шаг по одной из осей. В файле main.cpp объявлены две функции, которые и вызываются в main(): void move_ch(int& d, Character& o, Character& check) и void move_ch_opposite(int& d, Character& o, Character& check). В первой функции содержится логика выбора направления движения, в то время как другая нужна для выбора противоположного направления, если в следующем шаге боец "должен пройти" сквозь стену.

Алгоритм для боя между классами Warrior и Orc

Для класса Warrior

  1. Выбрать любое направление.
  2. Если враг в поле досягаемости арбалетного болта, то атаковать врага из арбалета.
  3. Если врага можно атаковать вблизи, проверить кто наносит удар в цикле if(), если ведьмак, то снять HP у азога, если азог, то вывести сообщение о том, что ведьмак парировал первую атаку.
  4. Если враг нанес урон в ближнем бою, то отойти(бежать конечно тут не верно,ведь ведьмак никогда не бежит от резни).
  5. Если у азога осталось 0 HP - вывести информацию что ведьмак победил.

Для класса Orc

  1. Выбрать любое направление.
  2. Если враг в области видимости орка, то преследовать его.
  3. Если врага можно атаковать вблизи, проверить кто наносит удар в цикле if(), если азог, то снять HP у ведьмака, если ведьмак, то вывести сообщение о том, что азог заблокировал первую атаку.
  4. Если у ведьмака 0 HP - вывести информацию что азог победил.

Алгоритм для боя между классами Orc и Magician

Для класса Orc

  1. Выбрать любое направление.
  2. Если враг в области видимости, то преследовать его.
  3. Если врага можно атаковать вблизи, проверить кто наносит удар в цикле if(), если азог, то снять HP у мага, если маг, то вывести сообщение о том, что азог заблокировал атаку первую атаку.
  4. Если у мага 0 HP - вывести информацию что азог победил.

Для класса Magician

  1. Выбрать любое направление.
  2. Если враг в поле досягаемости магической атаки, то запустить в него огненный шар.
  3. Если врага можно атаковать вблизи, проверить кто наносит удар в цикле if(), если маг, то снять HP у азога, если азог, то вывести сообщение о том, что маг парировал первую атаку.
  4. Если враг нанес урон в ближнем бою, то отбежать.
  5. Если у азога осталось 0 HP - вывести информацию что маг победил.

Алгоритм для боя между классами Warrior и Magician

Для класса Warrior

  1. Выбрать любое направление.
  2. Если враг в поле досягаемости арбалетного болта, то атаковать врага из арбалета.
  3. Если враг в поле зрения, то преследовать его.
  4. Если врага можно атаковать вблизи, проверить кто наносит удар в цикле if(), если ведьмак, то снять HP у мага, если маг, то вывести сообщение о том, что ведьмак парировал первую атаку.
  5. Если у мага осталось 0 HP - вывести информацию что ведьмак победил.

Для класса Magician

  1. Выбрать любое направление.
  2. Если враг в поле досягаемости магической атаки, то запустить в него огненный шар.
  3. Если врага можно атаковать вблизи, проверить кто наносит удар в цикле if(), если маг, то снять HP у ведьмака, если ведьмак, то вывести сообщение о том, что маг парировал первую атаку.
  4. Если враг нанес урон в ближнем бою, то отбежать.
  5. Если у ведьмака осталось 0 HP - вывести информацию что маг победил.

Как улучшить проект?

  1. Вынести реализацию функций OrcVSWarrior,OrcVSMagician,WarriorVSMagician в одну шаблонную функцию.
  2. Продумать алгоритм ИИ более детально, сделать его УМНЕЕ.
  3. Исправить функцию animateRemoteAttack(), поскольку количество шагов вычисляется с помощью вектора, а число получается не целым при стрельбе по диагонали из-за чего отображение на экране иногда корявое.
  4. Вынести информацию о победителе в одну общую функцию showWinner(string name,int attack_type).
  5. Добавить новые классы: вампир,гном,чудовище и т.д.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages