Python 1. Написать программу, которая будет просить пользователя внести новый класс оружия и название самого оружия(всего 4). Класс оружия использовать как ключ, а название - как значение. Не вносить новый класс, если такой ключ уже есть. Вводить пользователь должен через запятую с пробелом, сначала класс, а потом название. После вывести весь словарь на экран. Пример ввода: Посох, Огненный посох 2. Дополнить предыдущую программу: просить пользователя также записать тип оружия, а потом спросить, Как узнать сколько будет самих предметов и ввести их. Класс оружия все также будет записан через запятую, а все орудия должны записываться в массив. Пример ввода: Посох, 2 Огненный посох , Деревянный посох монаха 3. Дополнить предыдущую программу. Считывать также класс орудия, количество орудий, а потом уже сами орудия с характеристиками. Орудия теперь записывать как отдельные словари, а их характеристики как массивы. Характеристики 3: урон с руки, стихия, пробивание брони/сопротивления(в %) Пример ввода: Посох, 2 Огненный посох : 1488, 42, 2 Деревянный посох монаха: 322, 7, 0 4. Закончить программу тем, что предложить вывести любой класс орудия на экран, удалить или изменить состав текущего класса, изменить характеристики оружия и т.д. ИСПОЛЬЗОВАТЬ ТОЛЬКО САМЫЕ ОСНОВНЫЕ КОММАНДЫ.
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
class Weapon:
def __init__(self, name, damage, range):
self.name = name
self.damage = damage
self.range = range
def hit(self, actor, target):
if not target.is_alive:
print('Враг уже повержен')
return
if actor.pos_x + self.range < target.pos_x or
actor.pos_y + self.range < target.pos_y:
print(f'Враг слишком далеко для оружия '
f'{self.name}')
return
target.hp -= self.damage
print(f'Врагу нанесен урон оружием {self.name}'
f'в размере {self.damage}')
def print_Weapon(self):
return self.name
class BaseCharacter:
def __init__(self, pos_x, pos_y, hp):
self.pos_x = pos_x
self.pos_y = pos_y
self.hp = hp
def move(self, d_x, d_y):
self.pos_x = self.pos_x + d_x
self.pos_y = self.pos_y + d_y
def is_alive(self):
if self.hp <= 0:
return False
else:
return True
def get_damage(self, amount):
self.hp = self.hp - amount
def get_coords(self):
return (self.pos_x, self.pos_y)
class BaseEnemy(BaseCharacter):
def __init__(self, pos_x, pos_y, weapon, hp):
super().__init__(pos_x, pos_y, hp)
self.weapon = Weapon
def hit(self, target):
if not target == MainHero:
print('Могу ударить только главного героя')
return
else:
self.weapon.hit(self, target)
def print_Enemy(self):
return f'Враг на позиции{self.pos_x, self.pos_y} с
оружием {self.weapon}'
class MainHero(BaseCharacter):
def __init__(self, pos_x, pos_y, name, hp):
super().__init__(pos_x, pos_y, hp)
self.name = name
self.invent = []
self.weapon = '12'
def add_weapon(self, weapon):
self.weapon = weapon
self.invent.append(weapon)
print(f'Подобрал {weapon}')
if len(self.invent) == 1:
MainHero.weapon = weapon
def hit(self, target):
if MainHero.weapon == 0: # AttributeError: type object 'MainHero' has no attribute 'weapon'
# я ведь прописал в инните self.weapon = weapon, что не так? Думаю дело в том что этот weapon в инните никак не связан классом Weapon, тогда как это реализовать?
print('Я безоружен')
return
if target != BaseEnemy:
print('Могу ударить только врага')
return
target.hp -= MainHero.weapon.hit
def next_weapon(self):
if len(self.invent) == 0:
print('Я безоружен')
return
if len(self.invent) == 1:
print('У меня только одно оружие')
return
# не понимаю как реализовать смену оружия,создал для этого invent, чтобы работать с индексами, но не знаю как.