@kuskalogoshik

Как в игре на Python сделать фон картинок прозрачными и обозначить границы персонажа?

Как в игре на 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()
  • Вопрос задан
  • 167 просмотров
Пригласить эксперта
Ответы на вопрос 1
@maximq
QA Engineer
Для добавления альфа-канала (прозрачности) используйте это решение

обозначить границы персонажа, чтобы не исчезал из поля игры

Вы хотите добавить условие, чтобы персонаж увеличивался только до максимальных размеров?
Что-то вроде:
for hit in hits:
        if character.width < 10:
                character.grow()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы