Skip to main content

RPG Игра с полиморфизъм в Java

Splash

История

В далечния свят на Арканум, където магията тече във вените на всички същества, пет могъщи раси се състезават за доминация над континентите. Това е свят, в който величието се измерва не само със силата на меча, но и с мъдростта на древните заклинания. Войните тук не са просто сражения, те са битки между древни сили и волята за власт. Под покрова на вечната борба, всяка раса се стреми към своето собствено предназначение, водена от своите най-смели герои.

Раси и Професии

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 класа е да предложи основна структура на играта, като позволява на играча да създаде герой и да се бие с поредица от чудовища. Играта следва следните стъпки:

  1. Играчът създава герой в началото на играта.
  2. Играчът има възможността да създава списък от чудовища, с които да се бие.
  3. Играчът стартира битката, като героят влиза в бой с първото чудовище от списъка.
  4. След края на всяка битка, играчът има възможността да използва магия за възстановяване на силата на героя или да изчака 5 секунди, за да възстанови силата на героя автоматично.
  5. След възстановяването на силата, героят влиза в следващата битка със следващото чудовище от списъка, докато всички чудовища в списъка не са били победени или героят не е загинал.
  6. Битката се реализира по следната логика, attack() метода на героя се извиква и в него силата на атаката се прилага върху метода takeDamage() на чудовището. След това се извиква attack() метода на чудовището и в него силата на атаката се прилага върху метода defend() на героя. Тази логика се повтаря докато единият от участниците не загине.

Създаване на класа Game

Дефиниране на променливи:
  • Добавете частна променлива hero от тип Character.
  • Добавете частна променлива monsters от тип Queue< Monster > за да съхранявате чудовищата във FIFO ред.
Метод за създаване на герой:

Създайте метод createHero, който приема name и race като аргументи и създава нов герой, който се присвоява на променливата hero.

Метод за добавяне на чудовище:

Създайте метод addMonster, който приема monster като аргумент и го добавя в опашката monsters.

Метод за стартиране на битка:

Създайте метод startBattle, който взема първото чудовище от опашката monsters и стартира битка между героя и чудовището. Ако героят победи, потребителят трябва да изчака 5 секунди за автоматично възстановяване преди следващата битка.

Метод за възстановяване на силата:

Създайте метод recover, който възстановява силата на героя, като трябва да се изчака 5 секунди за автоматично възстановяване.

BONUS

Метод за създаване на случайно чудовище:

Създайте метод createRandomMonster, който създава и връща ново случайно генерирано чудовище.

СТАРТИРАЙТЕ ИГРАТА