Код: Выделить всё
import pygame
import random
class Hero:
def __init__(self, image_name, position, window):
self.image = pygame.image.load(image_name).convert_alpha()
self.image = pygame.transform.scale(self.image,
(int(self.image.get_width() * 0.5),
int(self.image.get_height() * 0.5)))
self.window = window
self.position = position
self.rect = self.image.get_rect(center=self.position)
self.max_hp = 100
self.current_hp = self.max_hp
def move(self):
adjusted_position = [
max(self.image.get_width()/2, min(self.window.get_width() - self.image.get_width()/2, self.position[0])),
max(self.image.get_height()/2 + 20, min(self.window.get_height()-self.image.get_height()/2, self.position[1]))
]
self.position = adjusted_position
self.rect.center = round(self.position[0]), round(self.position[1])
def draw(self):
self.window.fill((127, 127, 127))
self.window.blit(self.image, (self.position[0] - self.image.get_width()/2, self.position[1] - self.image.get_height()/2))
class Villain:
def __init__(self, image_path, position, window):
self.image = pygame.image.load(image_path).convert_alpha()
self.image = pygame.transform.scale(self.image,
(int(self.image.get_width() * 0.5),
int(self.image.get_height() * 0.5)))
self.position = position
self.window = window
self.rect = self.image.get_rect(center=self.position)
self.max_hp = 100
self.current_hp = self.max_hp
def move(self, x_range=(-10, 10), y_range=(-10, 10)):
self.position[0] += random.randint(*x_range)
self.position[1] += random.randint(*y_range)
adjusted_position = [
max(self.image.get_width()/2, min(self.window.get_width() - self.image.get_width()/2, self.position[0])),
max(self.image.get_height()/2 + 10, min(self.window.get_height() - self.image.get_height()/2, self.position[1]))
]
self.position = adjusted_position
self.rect.center = round(self.position[0]), round(self.position[1])
def draw(self):
self.window.blit(self.image, (self.position[0] - self.image.get_width()/2, self.position[1] - self.image.get_height()/2))
class Scene:
def __init__(self, window):
self.window = window
self.hero = Hero('hero.png', [400, 300], self.window)
self.villains = [Villain('villain.png', [80, 80], self.window),
Villain('villain.png', [720, 80], self.window),
Villain('villain.png', [80, 520], self.window),
Villain('villain.png', [720, 520], self.window)]
self.current_villain = None
self.in_combat = False
def check_for_combat(self):
for villain in self.villains:
if pygame.math.Vector2(villain.position).distance_to(self.hero.position) < 50:
self.in_combat = True
self.current_villain = villain
return True
return False
def handle_combat(self):
if self.in_combat and self.current_villain:
hero_damage = int(input('Enter a number between 0 and 8: '))
self.current_villain.current_hp -= hero_damage
if self.current_villain.current_hp
Подробнее здесь: [url]https://stackoverflow.com/questions/78678000/player-cant-move-during-a-combat[/url]