Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 22, 2019 17:28:47

Kukki
Зарегистрирован: 2019-04-22
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Через ООП, разработать основу для pyRPG (Python role-playing game).

Здесь надо применить объектно-ориентированное программирование (ООП).
Нужно разработать основу для pyRPG (Python role-playing game).
Представьте себе мир, в котором у игрока (Player) есть три основных характеристики: сила (strength), ловкость (agility) и интеллект (intelligence). По умолчанию у каждого героя игры все характеристики равны нулю.
Для увеличения (или уменьшения) характеристики в игре используются зелья (Potion), которые накладывают определённый эффект на игрока и действуют определённое количество ходов.
Перед вами стоит задача создать два класса Player и Potion, описывающие данную механику.
Класс Potion описывает эффект от зелья.
Конструктор класса Potion должен иметь вид: Potion(duration, strength, agility, intelligence). Параметр duration описывает длительность эффекта в «шагах» и является позиционным. Параметры strength, agility, intelligence описывают силу, ловкость и интеллект, получаемые от зелья, и являются необязательными.
Класс Potion должен иметь методы:
• duration() — возвращает длительность эффекта зелья;
• strength() — возвращает силу, получаемую от зелья;
• agility() — возвращает ловкость, получаемую от зелья;
• intelligence() — возвращает интеллект, получаемую от зелья;
• copy() — возвращает копию объекта.
Над объектами класса Potion должна быть возможность производить следующие операции:
• potion1 == potion2 — возвращает True, если все параметры зелий равны, иначе False;
• next(potion) — снижает продолжительность эффекта на 1 и возвращает None, если продолжительность снизилась до 0, иначе возвращает принимаемый объект;
• potion1 + potion2 — странным образом смешивает два зелья: параметры зелий складываются, а продолжительность эффекта нового зелья равна минимальной из переданных;
• potion1 - potion2 — странным образом смешивает два зелья: параметры зелий вычитаются, а продолжительность эффекта нового зелья равна максимальной из переданных;
• potion * number — странным образом модифицирует зелье: параметры зелья умножаются на number, а продолжительность эффекта нового зелья остаётся такой же;
• str(potion) — возвращает строку, описывающую зелье в формате Potion(duration= D, strength=S, agility=A, intelligence=Intel).
Класс Player описывает состояние пользователя.
У конструктора класса Player не должно быть позиционных параметров.
Класс Player должен иметь методы:
• strength() — возвращает суммарную силу героя;
• agility() — возвращает суммарную ловкость героя;
• intelligence() — возвращает суммарный интеллект героя;
• append(potion) — накладывает эффект (копию зелья potion) на героя.
Над объектом класса Player должна быть возможность производить следующие операции:
• player += potion — накладывает эффект (копию зелья potion) на героя;
• next(player) — имитирует ход, снижает длительность всех наложенных на героя зелий на 1;
• str(player) — возвращает строковое представление героя в виде:
Player {
strength: S
agility: A
intelligence: Intel
}
ПРИМЕР 1:
Ввод:
from solution import Potion

potion1 = Potion(3, strength=5, intelligence=2)
print(potion1)
potion2 = Potion(2, strength=2, agility=3)
print(potion2)
potion3 = potion1 + potion2
print(potion3)
potion4 = potion1 - potion2
print(potion4)
potion5 = potion4 * 2
print(potion5)

Вывод:
Potion(duration=3, strength=5, agility=0, intelligence=2)
Potion(duration=2, strength=2, agility=3, intelligence=0)
Potion(duration=2, strength=7, agility=3, intelligence=2)
Potion(duration=3, strength=3, agility=-3, intelligence=2)
Potion(duration=3, strength=6, agility=-6, intelligence=4)

ПРИМЕР 2:
Ввод:
from solution import Potion, Player

potion1 = Potion(3, strength=2, agility=-1, intelligence=1)
potion2 = Potion(4, strength=-1, agility=4, intelligence=3)

player = Player()
print(player, end='\n—\n')
player.append(potion1)
print(player, end='\n—\n')
next(player)
print(player, end='\n—\n')
player += potion2
for i in range(4):
print(player, end='\n—\n')
next(player)
print(player)

Вывод:
Player {
strength: 0
agility: 0
intelligence: 0
}

Player {
strength: 2
agility: -1
intelligence: 1
}

Player {
strength: 2
agility: -1
intelligence: 1
}

Player {
strength: 1
agility: 3
intelligence: 4
}

Player {
strength: 1
agility: 3
intelligence: 4
}

Player {
strength: -1
agility: 4
intelligence: 3
}

Player {
strength: -1
agility: 4
intelligence: 3
}

Player {
strength: 0
agility: 0
intelligence: 0
}

ПРИМЕР 3:
Ввод:
from solution import Potion, Player


class StrengthPotion(Potion):

def __init__(self, duration):
Potion.__init__(self, duration, strength=5)


sp = StrengthPotion(2)
player = Player()
player += sp
for _ in range(3):
print(player)
next(player)

Вывод:
Player {
strength: 5
agility: 0
intelligence: 0
}
Player {
strength: 5
agility: 0
intelligence: 0
}
Player {
strength: 0
agility: 0
intelligence: 0
}

ПРИМЕЧАНИЕ
Поля и методы класса должны иметь разные имена.

Отредактировано Kukki (Апрель 22, 2019 17:40:12)

Офлайн

#2 Апрель 23, 2019 06:09:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

Через ООП, разработать основу для pyRPG (Python role-playing game).

Сложного ничего не увидел. Просто надо создать классы, определить методы, переопределить магические методы.

Магические методы: __str__(), __eq__() , __add__() , __sub__() , __mul__() , __next__() , __iadd__() .

https://docs.python.org/3/reference/datamodel.html#special-method-names



Отредактировано py.user.next (Апрель 23, 2019 06:17:19)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version