This repository has been archived by the owner on Jul 18, 2024. It is now read-only.
forked from Turonk/character_creation_module
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
107 lines (83 loc) · 4.24 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
from random import randint
DEFAULT_ATTACK = 5
DEFAULT_DEFENCE = 10
DEFAULT_STAMINA = 80
class Character():
BRIEF_DESC_CHAR_CLASS = 'отважный любитель приключений'
RANGE_VALUE_ATTACK = (1, 3)
RANGE_VALUE_DEFENCE = (1, 5)
SPECIAL_BUFF = 15
SPECIAL_SKILL = 'Удача'
def __init__(self, name):
self.name = name
def attack(self):
value_attack = DEFAULT_ATTACK + randint(*self.RANGE_VALUE_ATTACK)
return f'{self.name} нанёс урон противнику равный {value_attack}'
def defence(self):
value_defence = DEFAULT_DEFENCE + randint(*self.RANGE_VALUE_DEFENCE)
return f'{self.name} блокировал {value_defence} ед. урона.'
def special(self):
return (f'{self.name} применил специальное умение '
f'"{self.SPECIAL_SKILL} {self.SPECIAL_BUFF}".')
def __str__(self):
return f'{self.__class__.__name__} - {self.BRIEF_DESC_CHAR_CLASS}.'
class Warrior(Character):
BRIEF_DESC_CHAR_CLASS = (' дерзкий воин ближнего боя. '
'Сильный, выносливый и отважный')
RANGE_VALUE_ATTACK = (3, 5)
RANGE_VALUE_DEFENCE = (5, 10)
SPECIAL_BUFF = DEFAULT_STAMINA + 25
SPECIAL_SKILL = 'Выносливость'
class Mage(Character):
BRIEF_DESC_CHAR_CLASS = (' находчивый воин дальнего боя. '
'Обладает высоким интеллектом')
RANGE_VALUE_ATTACK = (5, 10)
RANGE_VALUE_DEFENCE = (-2, 2)
SPECIAL_BUFF = DEFAULT_ATTACK + 40
SPECIAL_SKILL = 'Атака'
class Healer(Character):
BRIEF_DESC_CHAR_CLASS = (' могущественный заклинатель. '
'Черпает силы из природы, веры и духов')
RANGE_VALUE_ATTACK = (-3, -1)
RANGE_VALUE_DEFENCE = (2, 5)
SPECIAL_BUFF = DEFAULT_DEFENCE + 30
SPECIAL_SKILL = 'Защита'
def start_training(character):
"""
Принимает на вход имя и класс персонажа.
Возвращает сообщения о результатах цикла тренировки персонажа.
"""
commands = {
'attack': character.attack,
'defence': character.defence,
'special': character.special,
}
print('Потренируйся управлять своими навыками.')
print('Введи одну из команд: attack — чтобы атаковать противника, '
'defence — чтобы блокировать атаку противника или '
'special — чтобы использовать свою суперсилу.')
print('Если не хочешь тренироваться, введи команду skip.')
cmd = None
while cmd != 'skip':
cmd = input('Введи команду: ')
if cmd in commands:
print(commands[cmd]())
return 'Тренировка окончена.'
def choice_char_class(char_name: str) -> Character:
"""
Возвращает строку с выбранным
классом персонажа.
"""
# Добавили словарь, в котором соотносится ввод пользователя и класс персонажа.
game_classes = {'warrior': Warrior, 'mage': Mage, 'healer': Healer}
approve_choice: str = None
while approve_choice != 'y':
selected_class = input('Введи название персонажа, '
'за которого хочешь играть: Воитель — warrior, '
'Маг — mage, Лекарь — healer: ')
char_class: Character = game_classes[selected_class](char_name)
# Вывели в терминал описание персонажа.
print(char_class)
approve_choice = input('Нажми (Y), чтобы подтвердить выбор, '
'или любую другую кнопку, '
'чтобы выбрать другого персонажа ').lower()