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, чтобы работать с индексами, но не знаю как.
uses System.Collections.Generic; var a: List<integer> := new List<integer>(); //Объявляем и создаём динамический массив i: integer; begin repeat readln(i); if (i = 0) then break else a.Add(i); until (False); //Прекращаем цикл, когда рак (break) в цикле свиснет (False можно заменить на "2 + 2 = 5"
writeln(#13); //Вставляем 2 пустые строки
foreach i in a do //Выводим исходный массив write(i, ' ');
writeln();
foreach i in a do //Выводим конечные числа, нет задачи массив изменять write(abs(i), ' '); end.
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, чтобы работать с индексами, но не знаю как.
System.Collections.Generic;
var
a: List<integer> := new List<integer>(); //Объявляем и создаём динамический массив
i: integer;
begin
repeat
readln(i);
if (i = 0) then
break
else
a.Add(i);
until (False); //Прекращаем цикл, когда рак (break) в цикле свиснет (False можно заменить на "2 + 2 = 5"
writeln(#13); //Вставляем 2 пустые строки
foreach i in a do //Выводим исходный массив
write(i, ' ');
writeln();
foreach i in a do //Выводим конечные числа, нет задачи массив изменять
write(abs(i), ' ');
end.