Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/47: Рейтинг темы: голосов - 47, средняя оценка - 4.62
 Аватар для eqewq
3 / 3 / 0
Регистрация: 11.04.2019
Сообщений: 7

Класс Weapon для оружия

28.04.2019, 13:52. Показов 10518. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Задача:
Реализуйте класс Weapon для оружия, который при инициализации должен принимать имя оружия name, наносимый урон damage, а также радиус, на котором оружие может достать до врага – range.
В классе Weapon должны быть реализованы следующие методы:

hit(actor, target) – удар персонажем actor персонажа target. Метод должен проверять, жив ли персонаж target, если нет, то выводить сообщение «Враг уже повержен», иначе должна проводится проверка расстояния от actor до target. Если расстояние больше range оружия, тогда надо выводить сообщение «Враг слишком далеко для оружия <name>». В случае, если target жив и оружие имеет достаточный range, вывести сообщение «Врагу нанесен урон оружием <name> в размере <damage>» и нанести урон target.
приведение к строке – при приведении к строке должно возвращаться имя оружия.
Реализуйте класс BaseCharacter для создания базовых персонажей, который при инициализации должен принимать pos_x и pos_y – позицию персонажа в мире, hp – количество жизней персонажа.
Класс BaseCharacter должен реализовывать методы:

move(delta_x, delta_y) – для перемещения персонажа на delta_x и delta_y в игровом мире.
is_alive() – проверка, жив ли персонаж. Возвращает True, если жив, иначе – False.
get_damage(amount) – убавляет количество жизней персонажа на amount. При достижении 0 или отрицательного значения персонаж считается мёртвым.
get_coords() – возвращает кортеж с текущими координатами персонажа.
Реализуйте класс BaseEnemy для создания противников, который расширяет класс BaseCharacter. При инициализации он должен принимать pos_x и pos_y – позицию персонажа в мире, weapon – оружие, hp – количество жизней персонажа. Класс должен использовать инициализатор BaseCharacter.
Класс BaseEnemy должен реализовывать следующие методы:

hit(target) – для удара персонажа target. Метод должен позволять ударить только персонажа класса MainHero. Для всех других классов должно печататься сообщение «Могу ударить только Главного героя».
приведение к строке – при приведении к строке должно возвращаться «Враг на позиции (<pos_x>, <pos_y>) с оружием <weapon>»
Реализуйте класс MainHero для создания главного героя, который расширяет класс BaseCharacter. При инициализации он должен принимать pos_x и pos_y – позицию персонажа в мире, name – имя персонажа, hp – количество жизней персонажа. Класс должен использовать инициализатор BaseCharacter.
Класс MainHero должен реализовывать следующие методы:

hit(target) – для удара персонажа target. Метод должен проверять, есть ли у персонажа оружие, если его нет выводить - «Я безоружен», иначе позволять ударить только персонажа класса BaseEnemy. Для всех других классов должно печататься сообщение «Могу ударить только Врага».
add_weapon(weapon) – добавляет оружие в инвентарь персонажа, если это оружие единственное, то оно должно экипироваться сразу же. Метод должен печатать: «Подобрал <weapon>». Метод должен работать только для переданных объектов класса Weapon, для всего остального он должен печатать сообщение «Это не оружие».
next_weapon() – для смены оружия. Если оружия нет, то должно выводиться «Я безоружен», если есть только одно оружие – «У меня только одно оружие», иначе должна производиться смена оружия на следующее (в порядке подбора, по кругу) и выводиться сообщение «Сменил оружие на <weapon>».
heal(amount) – для повышения количества жизней персонажа на amount. При этом максимальный уровень здоровья главного героя – 200. Тажже должно выводиться сообщение «Полечился, теперь здоровья <hp>».
Пример
Ввод
from solution import *

weapon1 = Weapon("Короткий меч", 5, 1)
weapon2 = Weapon("Длинный меч", 7, 2)
weapon3 = Weapon("Лук", 3, 10)
weapon4 = Weapon("Лазерная орбитальная пушка", 1000, 1000)
princess = BaseCharacter(100, 100, 100)
archer = BaseEnemy(50, 50, weapon3, 100)
armored_swordsman = BaseEnemy(10, 10, weapon2, 500)
archer.hit(armored_swordsman)
armored_swordsman.move(10, 10)
print(armored_swordsman.get_coords())
main_hero = MainHero(0, 0, "Король Артур", 200)
main_hero.hit(armored_swordsman)
main_hero.next_weapon()
main_hero.add_weapon(weapon1)
main_hero.hit(armored_swordsman)
main_hero.add_weapon(weapon4)
main_hero.hit(armored_swordsman)
main_hero.next_weapon()
main_hero.hit(princess)
main_hero.hit(armored_swordsman)
main_hero.hit(armored_swordsman)
Вывод
Могу ударить только Главного героя
(20, 20)
Я безоружен
Я безоружен
Подобрал Короткий меч
Враг слишком далеко для оружия Короткий меч
Подобрал Лазерная орбитальная пушка
Враг слишком далеко для оружия Короткий меч
Сменил оружие на Лазерная орбитальная пушка
Могу ударить только врага
Врагу нанесен урон оружием Лазерная орбитальная пушка в размере 1000
Враг уже повержен

Мой код:
Python
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
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, чтобы работать с индексами, но не знаю как.
Я запутался, буду крайне благодарен за помощь и объяснения
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.04.2019, 13:52
Ответы с готовыми решениями:

Нужно написать класс Weapon с инициатором
Нужно написать класс Weapon с инициатором (имя, вес, растояние удара, урон), сделать строковое представление &lt;имя&gt;: &lt;урон&gt; -...

Реализуйте класс Weapon для оружия
Реализуйте класс Weapon для оружия, который при инициализации должен принимать имя оружия name, наносимый урон damage, а также радиус, на...

Редактор оружия для GTA vice city
Редактор оружия для GTA vice city Здравствуйте всем. Я являюсь фанатом в GTA Vice City. В директории игры есть файл Weapon.dat, он...

1
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
28.04.2019, 17:36
посмотрите Заготовка для игры
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2019, 17:36
Помогаю со студенческими работами здесь

Мне нужно написать скрипт для Unity характеристики для каждого оружия
Ребят я новичок в unity поэтому мне нужно написать скрипт для характеристики оружия

OnClick для оружия
Подскажите такой вопрос , пытаюсь портировать фпс на Андройд так вот в чем проблема, на кнопку он клик нужно повесить игровой обьект оружие...

FPS Анимации для персонажа и оружия
Всем привет, очень долго меня мучает вопрос: Как правильно разделить оружие и персонажа, что бы один персонаж мог брать разные Ганы, у...

Создание оружия для FPS шутера
Доброго времени суток! Мне нужен совет. Я начинаю писать fps shooter и для меня создание оружия - это в новинку и не совсем понимаю...

Система бонусов для брони/оружия
всем привет. возник вопрос кто как делает систему бонусов для оружия и брони. например есть оружие, в него вставили камень, это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru