Регистрация
Войти
Стать экспертом Правила
Информатика

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, чтобы работать с индексами, но не знаю как.

554
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам