bjs-2-homeworks

Описание RPG игры

По легенде некий разработчик решил создать простую RPG игру и решил начать с разработки персонажей. В игре присутствуют различные персонажи Player со следующими характеристиками:

Также реализованы основные персонажи:

  1. Воин
  2. Маг
  3. Лучник

и улучшенные:

  1. Гном - улучшенный Воин
  2. Демиург - улучшенный Маг
  3. Арбалетчик - улучшенный Лучник

У каждого воина в руках есть оружие.

Оружие

В игре присутствуют меч, лук и посох, а также их улучшенные версии: длинный меч, длинный лук и посох.

Реализован базовый класс Weapon со следующими свойствами:

  1. name - название
  2. attack - размер атаки
  3. durability - прочность
  4. range - дальность

И методами (действиями оружия):

Готовые оружия

В игре присутствуют базовые и улучшенные оружия.

Таблица 1. Классы оружия.

class name attack durability range
Arm Рука 1 Infinity 1
Bow Лук 10 200 3
Sword Меч 25 500 1
Knife Нож 5 300 1
Staff Посох 8 300 2

Таблица 2. Классы усиленного оружия. Прочерк («-») - свойство берётся из наследуемого класса.

class наследуется от name attack range durability
LongBow Bow Длинный лук 15 4 -
Axe Sword Секира 27 - 800
StormStaff Staff Посох Бури 10 3 -

Персонажи

Реализован базовый класс игрока Player со следующими свойствами и их начальными значениями:

  1. life = 100 - количество здоровья;
  2. magic = 20 - количество маны;
  3. speed = 1 - скорость;
  4. attack = 10 - уровень атаки;
  5. agility = 5 - ловкость;
  6. luck = 10 - удача;
  7. description = 'Игрок' - тип игрока;
  8. weapon = new Arm() - начальное оружие;
  9. name - имя игрока;
  10. position - положение игрока на оси координат.

И методами:

Готовые персонажи

В игре присутствуют уже готовые персонажи бойцов и их улучшенные версии.

Таблица 3. Классы бойцов. Прочерк («-») - свойство берётся из базового класса.

class life magic speed attack agility luck description weapon Основное оружие
Warrior 120 - 2 10 - - Воин new Sword Sword -> Knife -> Arm
Archer 80 35 - 5 10 - Лучник new Bow Bow -> Knife -> Arm
Mage 70 100 - 5 8 - Маг new Staff Staff -> Knife -> Arm

Таблица 4. Классы улучшенных бойцов. Прочерк («-») - свойство берётся из наследуемого класса.

class наследуется от life magic speed attack agility luck description weapon Основное оружие
Dwarf Warrior 130 - - 15 - 20 Гном new Axe Axe -> Knife -> Arm
Crossbowman Archer 85 - - 8 20 15 Арбалетчик new LongBow LongBow -> Knife -> Arm
Demiurge Mage 80 120 - 6 - 12 Демиург new StormStaff StormStaff -> Knife -> Arm

Особенности персонажей

  1. Archer.getDamage(distance): сила удара рассчитывается по формуле (attack + weaponDamage) * getLuck() * distance / weaponRange
  2. Warrior.takeDamage(damage): при уровне здоровья менее 50%, getLuck() > 0.8 и достаточном уровне маны, урон вычитается из маны, а не из здоровья. При нулевом значении маны урон вычитается из здоровья.
  3. Mage.takeDamage(damage): при уровне маны более 50%, маг получает урон в 1.5 раза меньше базового и уменьшает значение маны на 12.
  4. Dwarf.takeDamage(): каждый шестой удар соперника наносит в 2 раза меньше урона.
  5. Demiurge.getDamage(): при уровне маны > 0 и удачи > 0.6, наносимый урон увеличавется в 1.5 раза.

Игровой процесс

Функция play(players), которая принимает массив игроков. И выполняется до тех пор, пока на поле не останется один игрок. Игра состоит из шагов, где каждый игрок сначала проверяется: живой ли он? Если он мертв, то он удаляется с поля и ход передаётся следующему игроку. Если игрок жив, то выполняется его ход.