forked from Turonk/character_creation_module
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
127 lines (100 loc) · 5.28 KB
/
main.py
File metadata and controls
127 lines (100 loc) · 5.28 KB
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
from random import randint
from graphic_arts.start_game_banner import run_screensaver
DEFAULT_ATTACK = 5
DEFAULT_DEFENCE = 10
DEFAULT_STAMINA = 80
class Character:
RANGE_VALUE_ATTACK = (1, 3)
RANGE_VALUE_DEFENCE = (1, 5)
SPECIAL_BUFF = 15
SPECIAL_SKILL = 'Удача'
BRIEF_DESC_CHAR_CLASS = 'отважный любитель приключений'
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):
RANGE_VALUE_ATTACK = (3, 5)
RANGE_VALUE_DEFENCE = (5, 10)
SPECIAL_BUFF = DEFAULT_STAMINA + 25
SPECIAL_SKILL = 'Выносливость'
BRIEF_DESC_CHAR_CLASS = (' дерзкий воин ближнего боя. '
'Сильный, выносливый и отважный')
class Mage (Character):
RANGE_VALUE_ATTACK = (5, 10)
RANGE_VALUE_DEFENCE = (-2, 2)
SPECIAL_BUFF = DEFAULT_ATTACK + 40
SPECIAL_SKILL = 'Атака'
BRIEF_DESC_CHAR_CLASS = (' находчивый воин дальнего боя. '
'Обладает высоким интеллектом')
class Healer(Character):
RANGE_VALUE_ATTACK = (-3, -1)
RANGE_VALUE_DEFENCE = (2, 5)
SPECIAL_BUFF = DEFAULT_DEFENCE + 30
SPECIAL_SKILL = 'Защита'
BRIEF_DESC_CHAR_CLASS = (' могущественный заклинатель. '
'Черпает силы из природы, веры и духов')
def start_training(character):
"""
Принимает на вход имя и класс персонажа.
Возвращает сообщения о результатах цикла тренировки персонажа.
"""
comands = {'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 comands:
print(comands[cmd](character))
return 'Тренировка завершена!'
# Вместо блока условных операторов добавьте условие
# принадлежности введённой команды словарю.
# В функции print() будет вызываться метод класса,
# который соответствует введённой команде.
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()
return char_class
def main() -> None:
run_screensaver()
print('Приветствую тебя, искатель приключений!')
print('Прежде чем начать игру...')
char_name: str = input('...назови себя: ')
print(f'Здравствуй, {char_name}! '
'Сейчас твоя выносливость — 80, атака — 5 и защита — 10.')
print('Ты можешь выбрать один из трёх путей силы:')
print('Воитель, Маг, Лекарь')
char_class: str = choice_char_class(char_name)
print(start_training(char_class))
main()