@Dovahki_in
студент, начинающий программист

Чёрный экран и не видно кнопку запуска игры pygame. Как это исправить?

Здравствуйте. Пытаюсь написать первую игру используя pygame и столкнулся с такой проблемой. При запуске чёрный экран, как на на картинке. При нажимании на выделенное место игра запускается, т.к. там кнопка.
606b2da6deeb7921817735.jpeg
Ниже привожу фрагменты кода
Код кнопки
import pygame.font


class Button:

    def __init__(self, ai_settings, screen, msg):
        """Инициализирует атрибуты кнопки"""

        self.screen = screen
        self.screen_rect = screen.get_rect()

        # назначение размеров и свойств кнопки
        self.width, self.height = 200, 50
        self.button_color = (0, 255, 0)
        self.text_color = (255, 255, 255)
        self.font = pygame.font.SysFont("Verdana", 48)

        # построение объекта rect кнопки и выравнивание по центру экрана
        self.rect = pygame.Rect(0, 0, self.width, self.height)
        self.rect.center = self.screen_rect.center

        # сообщение кнопки создаётся только один раз
        self.prep_msg(msg)

    def prep_msg(self, msg):
        """
        Преобразует msg в прямоугольник и выравнивает текст по центру
        """

        self.msg_image = self.font.render(msg, True, self.text_color, self.button_color)
        self.msg_image_rect = self.msg_image.get_rect()
        self.msg_image_rect.center = self.rect.center

    def draw_button(self):
        """Отображение пустой кнопки и вывод сообщения"""
        self.screen.fill(self.button_color, self.rect)
        self.screen.blit(self.msg_image, self.msg_image_rect)


Функции игры связанные с кнопкой
def check_events(ai_settings, screen, stats, play_button, ship, aliens, bullets):
    """
    Обрабатывает нажатия клавиш и события мыши
    """

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            check_keydown_events(event, ai_settings, screen, ship, bullets)
        elif event.type == pygame.KEYUP:
            check_keyup_events(event, ship)
        elif event.type == pygame.MOUSEBUTTONDOWN:
            mouse_x, mouse_y = pygame.mouse.get_pos()
            check_play_button(ai_settings, screen, stats, play_button, ship,
                              aliens, bullets, mouse_x, mouse_y)


def check_play_button(ai_settings, screen, stats, play_button, ship, aliens,
                      bullets, mouse_x, mouse_y):
    """Запускает новую игру при нажатии кнопки Play"""
    
    if play_button.rect.collidepoint(mouse_x, mouse_y):
        # сброс игровой статистики
        stats.reset_stats()

        stats.game_active = True

        # очистка списков пришельцев и пуль
        aliens.empty()
        bullets.empty()

        # создание нового флота и размещение корабля в центре
        create_fleet(ai_settings, screen, ship, aliens)
        ship.center_ship()


def update_screen(ai_settings, screen, stats, ship, aliens, bullets, play_button):
    """
    Обновляет изображение на экране и
    отображает новый экран
    """

    # При каждом проходе цикла перерисовывается экран
    screen.fill(ai_settings.bg_color)

    # Все пули выводятся позади изображений корабля пришельцев
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()
    aliens.draw(screen)

    # Кнопка Play отображается в том случае, если игра неактивна
    if not stats.game_active:
        play_button.draw_button()

    # Отображение последнего прорисованного экрана
    pygame.display.flip()


Код отвечающий за запуск игры в неактивном состоянии
# Игра запускается в неактивном состоянии
       self.game_active = False

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

P.S. Здесь весь код https://github.com/Gorlinskyi/alien_invasion
  • Вопрос задан
  • 595 просмотров
Решения вопроса 1
@Dovahki_in Автор вопроса
студент, начинающий программист
Решение найдено. Нужно лишь немного изменить while
while True:
        gf.check_events(ai_settings, screen, stats, play_button,
                        ship, aliens, bullets)

        if stats.game_active:
            ship.update()
            gf.update_bullets(ai_settings, screen, ship, aliens, bullets)
            gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets)
            gf.update_screen(ai_settings, screen, stats, ship, aliens, bullets, play_button)
        # ниже вносимые изменения
        else:
            gf.update_screen(ai_settings, screen, stats, ship, aliens, bullets, play_button)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы