2014-12-27 4 views
0

Итак, я пытаюсь напечатать «вы проиграете» на экране, когда пользователь перемещает окно с экрана воспроизведения, однако это, похоже, не работает, если я не позвоню ему из вне моей основной петли. Я определил функцию для обработки создания текста, рендеринга и «блистания», хотя это не имеет никакого эффекта, когда оно вызывается изнутри цикла while, но оно происходит, когда оно вызывается извне его внизу , Я проверил, и функция выполняется из обоих мест, хотя она работает только с одной.Pygame не будет печатать текст при определенных обстоятельствах

import pygame 
import time 
pygame.init() 

red = (255,0,0) 
black = (0,0,0) 
white = (255,255,255) 
gamewidth = 900 
gameheight = 900 
snakecolour = black 
gameDisplay = pygame.display.set_mode((gamewidth,gameheight)) 
pygame.display.set_caption("Snake") 

gameExit = False 
boxDimensions = 10 
lead_x = (gamewidth // 2) - ((gamewidth // 2) % 20) 
lead_y = (gameheight // 2) - ((gameheight // 2) % 20) 
lead_x_change = 0 
lead_y_change = 0 
clock = pygame.time.Clock() 

font = pygame.font.SysFont(None, 25) 
def message_to_screen(msg, color): 
    screen_text = font.render(msg, True, color) 
    gameDisplay.blit(screen_text, [gamewidth//2, gameheight//2]) 


while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameExit = True 

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       if not (lead_x_change == boxDimensions): 
        lead_x_change = -boxDimensions 
        lead_y_change = 0 
      elif event.key == pygame.K_RIGHT: 
       if not (lead_x_change == -boxDimensions): 
        lead_x_change = boxDimensions 
        lead_y_change = 0 
      elif event.key == pygame.K_UP: 
       if not (lead_y_change == boxDimensions): 
        lead_y_change = -boxDimensions 
        lead_x_change = 0 
      elif event.key == pygame.K_DOWN: 
       if not (lead_y_change == -boxDimensions): 
        lead_y_change = boxDimensions 
        lead_x_change = 0 


    lead_x += lead_x_change 
    lead_y += lead_y_change 

    if lead_x > gamewidth or lead_x < 0 or lead_y > gameheight or lead_y < 0: 
     snakecolour = red 
     gameExit = True 
     message_to_screen("You Lose!", red) 
     pygame.display.update() 
     #message_to_screen("You Lose!", red) WONT WORK HERE 

    if lead_x > gamewidth: 
     lead_x = gamewidth - boxDimensions 
     lead_x_change = 0 
    elif lead_x < 0: 
     lead_x = 0 
     lead_x_change = 0 
    elif lead_y > gameheight: 
     lead_y = gameheight - boxDimensions 
    elif lead_y < 0: 
     lead_y = 0 
     lead_y_change = 0 
    gameDisplay.fill(white) 
    pygame.draw.rect(gameDisplay, snakecolour, [lead_x,lead_y,boxDimensions,boxDimensions]) 
    pygame.display.update() 

    clock.tick(15) 
#message_to_screen("You Lose!", red) DOES WORK HERE 
#pygame.display.update() 
time.sleep(3) 
pygame.quit() 
+0

Это довольно странно, я надеюсь, что кто-то знает, корень этой проблемы. – user3537381

+0

Не могли бы вы написать конец игры, «вы проиграете»? На экране pygame, не IDLE или CMD.Also после _lead_x_ part, поместите их в цикл _while_, пожалуйста, – GLHF

+0

вы можете исправить свой отступ –

ответ

0
message_to_screen("YOU LOSE!",(255,0,0)) 
pygame.display.update() 
sleep(3) 

От AirThomas комментарий, это работает. Вне цикла while поставьте это утверждение.

Для табло:

text = pygame.font.SysFont("None", 30) 
score=0 
text1=text.render("{}".format(score), True,(255,255,255)) 
while running: 
    screen.fill((0, 0, 0)) 
    #codes 
    #codes 
    #codes 
    if sneakeatssomething: 
     score += 1 
     text1=text.render("{}".format(score), True,(255,255,255)) #rendering the score again 
    #codes 
    #codes 
    screen.blit(text1,(275,6))#showing the score 
    pygame.display.flip() 
    clock.tick(150) 

Это обновление счет, когда Скрытность съедает и печать на экран Pygame

+0

Это действительно работает, но он все еще не отвечает на вопрос, почему это не работает внутри в то время как цикл? – user3537381

+0

Ну, я тоже не знаю. Я просто решаю твою и мою проблему с хитрой помощью @ AirThomas :-) – GLHF

+0

Но что, если вы хотите иметь оценочную карточку или что-то, что постоянно обновляется, вы не сможете этого сделать, имея оператор вызова вне цикла while – user3537381