Форум программистов, компьютерный форум, киберфорум
Python: PyGame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 20.04.2025
Сообщений: 19

Заготовка для игры

05.05.2025, 20:50. Показов 1960. Ответов 3

Студворк — интернет-сервис помощи студентам
При разработке компьютерных игр зачастую создаётся очень сложная система классов. В этой задаче Вам будет необходимо сделать небольшую заготовку, которую потом можно будет использовать для создания своей игры.

Реализуйте класс 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>».

Пример
Ввод
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
Враг уже повержен
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2025, 20:50
Ответы с готовыми решениями:

Заготовка для игры
При разработке компьтерных игр зачастую создаётся очень сложная система классов. В этой задаче Вам...

Заготовка для игры
При разработке компьтерных игр зачастую создаётся очень сложная система классов. В этой задаче Вам...

Заготовка для игры ( проблемы с выводом строк )
Мой код: class Weapon: def __init__(self, name, damage, range): self.name = name ...

3
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
06.05.2025, 00:23
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
98
99
100
101
102
103
class Weapon():
    def __init__(self,name,damage,range):
        self.name = name
        self.damage = damage
        self.rande = range
    def hit(self, actor:object, target:object):
        pass
 
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,delta_x,delta_y):
         self.pos_x += delta_x
         self.pos_y += delta_y
    def is_alive(self):
        return True if (self.hp > 0) else False
    def get_damage(self,amount):
        return 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:object,hp):
        BaseCharacter.__init__(self,pos_x,pos_y,hp)
        self.weapon = Weapon
     def hit(self,target:object):
         if(target.__class__.__name__ == 'MainHero'):
             
             if(target.is_alive() == False):
                   print('Враг уже повержен')
                   return
             a,b = self.get_coords()
             c,d = target.get_coords()
             target.hp = target.hp - self.weapon.damage
             print(f'Врагу нанесен урон оружием {self.weapon.name} в размере {self.weapon.damage}')
         else:
             print('Могу ударить только Главного героя')
     
class MainHero(BaseCharacter):
    def __init__(self,pos_x, pos_y, name, hp):
        BaseCharacter.__init__(self,pos_x,pos_y,hp)
        self.name = name
        self.inventar = list()
        self.count = 0
    def hit(self,target:object):
        if len(self.inventar) == 0:
            print('Я безаружен')
        else:
            if(target.__class__.__name__ == 'BaseEnemy'):
               if(target.is_alive() == False):
                   print('Враг уже повержен')
                   return
               a,b = self.get_coords()
               c,d = target.get_coords()
               target.hp = target.hp - self.inventar[self.count].damage
               print(f'Врагу нанесен урон оружием {self.inventar[self.count].name} в размере {self.inventar[self.count].damage}')
            else:
                print('Могу ударить только Врага')
    def add_weapon(self,Weapon:object):
        if Weapon.__class__.__name__ == 'Weapon':
            print('Подобрал '+Weapon.name)
            self.inventar.append(Weapon)
        else:
            print('Это не оружие!')
    def next_weapon(self):
        if len(self.inventar) == 0:
            print('Я безоружен')
        elif len(self.inventar) == 1:
            print('У меня только одно оружие')
        else:
            if len(self.inventar) > self.count:
                self.count = 0
            self.count += 1
            print('Сменил оружие на '+self.inventar[self.count].name)
 
    def heal(self,amount):
        if self.hp < 200:
            self.hp += amount
            print(f'Полечился, теперь здоровья {self.hp}')
 
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(10, 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.next_weapon()
main_hero.hit(princess)
main_hero.hit(armored_swordsman)
main_hero.hit(armored_swordsman)
Только я не дописал вычисление радиуса

Может кто будет проходить, поможет
0
 Аватар для Semen-Semenich
5218 / 3466 / 1172
Регистрация: 21.03.2016
Сообщений: 8,289
09.05.2025, 13:26
Заготовка для игры ( проблемы с выводом строк )

Добавлено через 42 секунды
Заготовка для игры
0
2487 / 1151 / 709
Регистрация: 25.04.2016
Сообщений: 3,310
14.09.2025, 12:01
solution.py
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
98
99
100
101
102
103
104
105
106
107
import math
 
 
class BaseCharacter:
    def __init__(self, pos_x, pos_y, hp):
        self.x = pos_x
        self.y = pos_y
        self.hp = hp
 
    def move(self, delta_x, delta_y):
        self.x += delta_x
        self.y += delta_y
 
    def is_alive(self):
        return self.hp > 0
 
    def get_damage(self, amount):
        n = self.hp - amount
        self.hp = 0 if n < 0 else n
 
    def get_coords(self):
        return (self.x, self.y)
 
    def distance(self, other):
        x = self.x - other.x
        y = self.y - other.y
        return math.sqrt(x*x + y*y)
 
 
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(f'Враг уже повержен')
            return
        dist = actor.distance(target)
        if dist > self.range:
            print(f'Враг слишком далеко для оружия {self.name}')
        else:
            name = self.name
            damage = self.damage
            print(f'Врагу нанесен урон оружием {name} в размере {damage}')
            target.get_damage(damage)
 
    def __str__(self):
        return self.name
 
 
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 isinstance(target, MainHero):
            self.weapon.hit(self, target)
        else:
            print(f'Могу ударить только Главного героя')
 
    def __str__(self):
        name = self.weapon.name
        return f'Враг на позиции ({self.x}, {self.y}) с оружием {name}'
 
 
class MainHero(BaseCharacter):
    def __init__(self, pos_x, pos_y, name, hp):
        super().__init__(pos_x, pos_y, hp)
        self.name = name
        self.weapon = None
        self.bag = []
        self.bag_pos = 0
 
    def hit(self, target):
        if self.weapon == None:
            print(f'Я безоружен')
        elif isinstance(target, BaseEnemy):
            self.weapon.hit(self, target)
        else:
            print(f'Могу ударить только Врага')
 
    def add_weapon(self, weapon):
        if isinstance(weapon, Weapon):
            print(f'Подобрал {weapon.name}')
            self.bag.append(weapon)
            if len(self.bag) == 1:
                self.weapon = weapon
        else:
            print(f'Это не оружие')
 
    def next_weapon(self):
        if self.weapon == None:
            print(f'Я безоружен')
        elif len(self.bag) == 1:
            print(f'У меня только одно оружие')
        else:
            self.bag_pos = (self.bag_pos + 1) % len(self.bag)
            self.weapon = self.bag[self.bag_pos]
            print(f'Сменил оружие на {self.weapon.name}')
                
    def heal(self, amount):
        n = self.hp + amount
        self.hp = 200 if n > 200 else n
        print(f'Полечился, теперь здоровья {self.hp}')
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.09.2025, 12:01
Помогаю со студенческими работами здесь

Заготовка для игры
При разработке компьтерных игр зачастую создаётся очень сложная система классов. В этой задаче Вам...

Заготовка для игры
При разработке компьтерных игр зачастую создаётся очень сложная система классов. В этой задаче Вам...

Заготовка для игры
Проверьте свои ФИО в профиле ЛМС Яндекс.Лицея (оттуда мы будем брать данные для сертификатов). В...

Заготовка для игр
При разработке компьтерных игр зачастую создаётся очень сложная система классов. В этой задаче Вам...

Для каждой игры определить словесный результат игры(выигрыш, проигрыш, ничья)
В одном массиве записано количество мячей, заброшенных баскетбольной командой в каждом из 15-ти...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru