RPG Игра с полиморфизъм
История
В далечния свят на Арканум, където магията тече във вените на всички същества, пет могъщи раси се състезават за доминация над континентите. Това е свят, в който величието се измерва не само със силата на меча, но и с мъдростта на древните заклинания. Войните тук не са просто сражения, те са битки между древни сили и волята за власт. Под покрова на вечната борба, всяка раса се стреми към своето собствено предназначение, водена от своите най-смели герои.
Раси и Професии
1. Хора (Паладини):
Хората са благородни воини, които се отличават със своята стойност и чест. Като Паладини, те са защитници на слабите и борят се срещу тъмните сили, които заплашват света. Със своите свещени оръжия и заклинания, те са истински щит срещу злото.
2. Елфи (Амазонки):
Елфите са изящни и благородни същества, живеещи в сърцето на древните гори. Като Амазонки, те са несравними стрелци и гимнасти, които използват лъкове и стрели, за да поразят враговете си от разстояние.
3. Орки (Варвари):
Орките са сурови и яростни воини, известни със своите брутални бойни умения. Като Варвари, те владеят гигантски брадви и мечове, които използват, за да смачкат всякаква пречка на техния път.
4. Джуджета (Некроманти):
Джуджетата са малки, но умни и здрави същества, които обитават планинските крепости. Като Некроманти, те имат връзка с магията на смъртта и могат да възкресяват покойници, за да служат на тяхната кауза.
5. Кървави елфи (Вещици):
Кървави елфи са тайнствени и загадъчни същества, които държат магията на стихиите в сърцето си. Като Вещици, те могат да призовават мощни елементали и да управляват силите на природата срещу техните врагове.
Тези професии и раси формират една богата и цветна вселена, в която героите могат да се сблъскат в епични битки за доминация над земите на Арканум. Всяка раса и професия носи уникални предимства и стратегии на бойното пол е, като отваря врати за безброй тактически възможности в предстоящите сражения.
Съдбата на Арканум виси на косъм, като враждебните раси се подготвят за окончателната битка, която ще определи бъдещето на техния свят. Героите от различните раси трябва да обединят силите си, за да преодолеят тъмните сили, които се надигат от дълбините на земята. И тъй като зората на новата ера се наближава, войните на Арканум трябва да изберат дали да станат защитници на света или властелини на хаоса.
Инструкции
Задача 1: Създаване на абстрактен базов клас Character
Полета (частни):
- name (String) - името на персонажа.
- health (int) - текущото здраве на персонажа.
- power (int) - силата на атаката на персонажа.
- race (String) - Расата на героя (например, Човек, Елф и т.н.).
Конструктор:
Конструктор, който приема параметрите по-горе като аргументи и ги задава на съответните полета.
Методи:
- attack(Monster target) - абстрактен метод за атакуване на друг персонаж.
- defend(int attackPower) - абстрактен метод за защита от атака.
Getters и Setters за всички полета. Методи които взимат или задават стойността на всяко едно от полетата
Задача 2: Създаване на класове за различните раси
За всяка раса (Паладин, Амазонка, Варварин, Некромант, Вещица) създайте отделни класове, които наследяват Character и предоставят реализация на абстрактните методи attack и defend.
- Паладин - Те разполагат със средно ниво на щети, но могат да се възстановяват.
- Амазонка - Те са по-бързи и нанасят повече щети от Хората, могат също и да възстановяват малко кръв оно по-малко от Хората
- Варварин - Те правят много щети, както и щетите върху тях са по-малки.
- Некромант - Те правят малко щети, и възстановяват малко сила.
- Вещица - Те нанасят средно ниво на щети, както и могат да се възстановяват.
Задача 3: Създаване на абстрактен клас Monster и някои чудовища
Полета:
- name (String) - името на монстъра.
- health (int) - текущото здраве на монстъра.
- power (int) - силата на атаката на монстъра.
- race (String) - расата на монстъра (например, Undead, Demon, Beast и т.н.).
Конструктор:
Конструктор, който приема параметрите по-горе като аргументи и ги задава на съответните полета.
Методи:
- attack(Character target) - метод за атакуване на персонаж.
Създайте няколко подкласа на Monster, като например FallenShaman, SkeletonKing, Butcher и т.н., които имат различни характеристики и умения.
Задача 4: Създаване на логика на боя
В метода main, създайте инстанции на Human и FallenShaman``, и след това симулирайте битка между тях докато един от участниците не загине. Всеки рунд на битката се състои от атака от героя, послед вана от атака от чудовището, ако то оцелее. Състоянието на битката се извежда на конзолата след всяка атака. Побиделят се извежда на конзолата след завършване на битката.
ПОДСКАЗКА: attack метода нека сваля директно силата на атаката от health полето на целта. Това ще улесни логиката на битката.
Задача 5: Създаване на интерфейси
IAttackable
Създайте интерфейс IAttackable с един метод, takeDamage, който приема цяло число, което представлява щетите, които се нанасят на целта.
Този интерфейс ще бъде имплементиран от Monster
класа, което ще позволи на Monster
обектите да бъдат атакувани, ако Monster
не имплементира интерфейса.
IDefendable
Създайте интерфейс IDefendable с един метод defend, който приема цяло число, което представлява щетите, които се нанасят на целта, прилагайки някаква логика за защита.
Този интерфейс ще бъде имплементиран от Character
класа, което ще позволи на Character
обектите да се защитават от атаки. Ако един Character
обект имплементира IDefendable
, атаките срещу него трябва да минават през defend
метода. Ако Character
обектът не имплементира IDefendable
, щетите от атаката трябва да бъдат извадени директно от health
полето на обекта.
IHealable
Създайте интерфейс IHealable с един метод heal, който приема Character и цяло число, което представлява количеството здраве, което се възстановява на целта от тип Character.
Този интерфейс ще бъде имплементиран само от тези Character
класове, които имат възможността да лекуват, вкл. себе си.
Обновяване на създадените подкласове на Character и Monster
Обновете Character подкласа, така че да наследява IDefendable интерфейса и имплементира defend
метода. Също така, добавете логика в attack
метода, така че ако целта имплементира IDefendable
, атаката да минава през defend
метода на целта.
Обновете Monster подкласа, така че да имплементира IAttackable интерфейса и имплементира takeDamage
метода, който намалява health
полето на монстъра със стойността на щетите.
Тези обновявания ще осигурят, че вашият код следва изискванията, които предоставихте.
Задача 6: Създаване на клас Game
Целта на Game класа е да предложи основна структура на играта, като позволява на играча да създаде герой и да се бие с поредица от чудовища. Играта следва следните стъпки:
- Играчът създава герой в началото на играта.
- Играчът има възможността да създава списък от чудовища, с които да се бие.
- Играчът стартира битката, като героят влиза в бой с първото чудовище от списъка.
- След края на всяка битка, играчът има възможността да използва магия за възстановяване на силата на героя или да изчака 5 секунди, за да възстанови силата на героя автоматично.
- След възстановяването на силата, героят влиза в следващата битка със следващото чудовище от списъка, докато всички чудовища в списъка не са били победени или героят не е загинал.
- Битката се ре ализира по следната логика, attack() метода на героя се извиква и в него силата на атаката се прилага върху метода takeDamage() на чудовището. След това се извиква attack() метода на чудовището и в него силата на атаката се прилага върху метода defend() на героя. Тази логика се повтаря докато единият от участниците не загине.
Създаване на класа Game
Дефиниране на променливи:
- Добавете частна променлива hero от тип Character.
- Добавете частна променлива monsters от тип Queue< Monster > за да съхранявате чудовищата във FIFO ред.
Метод за създаване на герой:
Създайте метод createHero, който приема name и race като аргументи и създава нов герой, който се присвоява на променливата hero.
Метод за добавяне на чудовище:
Създайте метод addMonster, който приема monster като аргумент и го добавя в опашката monsters.
Метод за стартиране на битка:
Създайте метод startBattle, който взема първото чудовище от опашката monsters и стартира битка между героя и чудовището. Ако героят победи, потребителят трябва да изчака 5 секунди за автоматично възстановяване преди следващата битка.