Создана собственная игра. Еще ветка не выполняется после Game Over - PullRequest
1 голос
/ 04 октября 2019

Я создал небольшую игру с Pygame Zero и MU IDE. Игрок должен нажать (собрать) как можно больше бананов за определенное время. Каждый раз, когда банан собирается, новый банан появляется в случайном месте.

По истечении времени появляется новый экран с информацией о том, сколько бананов было собрано. Для этого я создал оператор If Else, но ветвь Else не выполняется программой (за исключением сокращения времени на 1 секунду и закрытия игрового окна). Я не знаю почему. У кого-нибудь есть идея, почему ветвь Else не выполняется?

from random import randint 
import time
import pygame

HEIGHT = 800
WIDTH = 800
score = 0
time_left = 10

banana = Actor("banana")
monkey = Actor("monkey")

def draw():
    screen.clear()
    screen.fill("white")
    banana.draw()
    monkey.draw()
    screen.draw.text("Number of bananas collected: " + str(score),      color = "black", topleft=(10,10))
    screen.draw.text("Time: " + str(time_left), color = "black", topleft=(10,50))

def place_banana():
    banana.x = randint(125, 790)
    banana.y = randint(186, 790)
    monkey.x = 50
    monkey.y = 740

def on_mouse_down(pos):
    global score
    if banana.collidepoint(pos): 
        score = score + 1 
        place_banana()

def update_time_left():
    global time_left
    if time_left:  # wenn Zeit > 0 Sekunden ist
        time_left = time_left - 1
    else:  
        screen.fill("pink")  # code is not executed
        game_over() 

place_banana() 
clock.schedule_interval(update_time_left, 1.0)

def game_over():
    screen.fill("pink") # code is not executed
    global time_left
    message = ("Ende. Number of bananas collected")   # code is not  executed
    time_left = 0
    time.sleep(5.5)
    quit()

1 Ответ

1 голос
/ 04 октября 2019

Конечно код выполняется, но вы не можете «увидеть» результат на дисплее, потому что после screen.fill("pink") (и до time.sleep(5.5)) дисплей не обновляется.
Вы должны обновить дисплейна pygame.display.update() и для обработки событий на (например) pygame.event.pump() после того, как дисплей заполнится розовым цветом.

def game_over():

    screen.fill("pink")
    # [...] draw something else (e.g. some text)    

    pygame.display.update()
    pygame.event.pump()

    time.sleep(5.5)
    quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...