Как в игре на Python сделать фон картинок прозрачными и обозначить границы персонажа, чтобы не исчезал из поля игры, когда происходит столкновение с едой и он растёт? Пыталась сделать игру, однако нашла недочёты, которые исправить не могу...
import pygame
import random
# Инициализация pygame
pygame.init()
# Установка размера окна
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
# Задание цветов
BLACK = (0, 0, 0)
PINK = (255, 105, 180)
# Загрузка изображений
bg_image = pygame.image.load('background.png')
food_image = pygame.image.load('food.png')
character_image = pygame.image.load('character.png')
# Создание класса Character для персонажа
class Character(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.transform.scale(character_image, (50, 50))
self.rect = self.image.get_rect()
self.rect.x = width // 2 - self.rect.width // 2
self.rect.y = height - self.rect.height - 10
self.size = 50
def draw(self):
screen.blit(self.image, (self.rect.x, self.rect.y))
def grow(self):
self.size += 10
def is_collision(self, food):
if self.rect.x < food.rect.x < self.rect.x + self.size and self.rect.y < food.rect.y < self.rect.y + self.size:
return True
return False
# Создание класса Food для еды
class Food(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.transform.scale(food_image, (30, 30))
self.rect = self.image.get_rect()
self.rect.x = random.randint(0, width - self.rect.width)
self.rect.y = 0
def update(self):
self.rect.y += 5
if self.rect.y > height:
self.rect.x = random.randint(0, width - self.rect.width)
self.rect.y = 0
# Создание групп спрайтов
all_sprites = pygame.sprite.Group()
foods = pygame.sprite.Group()
# Создание персонажа
character = Character()
all_sprites.add(character)
moving_left = False
moving_right = False
running = True
clock = pygame.time.Clock()
while running:
# Установка частоты обновления экрана
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
moving_left = True
elif event.key == pygame.K_RIGHT:
moving_right = True
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
moving_left = False
elif event.key == pygame.K_RIGHT:
moving_right = False
# Создание и добавление новой еды
if random.randint(0, 100) < 2:
food = Food()
all_sprites.add(food)
foods.add(food)
# Проверка столкновений персонажа с едой
hits = pygame.sprite.spritecollide(character, foods, True)
for hit in hits:
character.grow()
# Обработка флагов
if moving_left:
character.rect.x -= 5
if moving_right:
character.rect.x += 5
# Обновление координат персонажа и еды
all_sprites.update()
# Отрисовка фона
screen.fill(PINK)
screen.blit(bg_image, (0, 0))
# Отображение персонажа и еды
all_sprites.draw(screen)
character.draw()
# Обновление экрана
pygame.display.flip()
# Выход из pygame
pygame.quit()