Python Pygame赢了';在某些情况下不能打印文本

Python Pygame赢了';在某些情况下不能打印文本,python,pygame,Python,Pygame,因此,当用户将一个方框移出可播放屏幕时,我试图将“youlose”打印到屏幕上,但是这似乎不起作用,除非我从主while循环之外调用它。我已经定义了一个函数来处理文本的创建、呈现和“blit”,尽管这在while循环内部调用时没有效果,但在底部从外部调用时却有效果。我已经检查过了,这个函数是从两个位置执行的,尽管它似乎只在一个位置工作 import pygame import time pygame.init() red = (255,0,0) black = (0,0,0) white =

因此,当用户将一个方框移出可播放屏幕时,我试图将“youlose”打印到屏幕上,但是这似乎不起作用,除非我从主while循环之外调用它。我已经定义了一个函数来处理文本的创建、呈现和“blit”,尽管这在while循环内部调用时没有效果,但在底部从外部调用时却有效果。我已经检查过了,这个函数是从两个位置执行的,尽管它似乎只在一个位置工作

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()
导入pygame
导入时间
pygame.init()
红色=(255,0,0)
黑色=(0,0,0)
白色=(255255)
游戏宽度=900
游戏高度=900
蛇色=黑色
gameDisplay=pygame.display.set_模式((游戏宽度,游戏高度))
pygame.display.set_标题(“蛇”)
gameExit=False
盒子尺寸=10
lead_x=(游戏宽度//2)-(游戏宽度//2)%20)
潜在客户y=(游戏高度//2)-(游戏高度//2)%20)
lead_x_change=0
潜在客户变更=0
clock=pygame.time.clock()
font=pygame.font.SysFont(无,25)
def消息到屏幕(消息,颜色):
screen\u text=font.render(msg、True、color)
blit(屏幕文字,[gamewidth//2,gameheight//2])
不退出游戏时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
gameExit=True
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
如果不是(lead_x_change==boxDimensions):
lead_x_change=-boxDimensions
潜在客户变更=0
elif event.key==pygame.K_RIGHT:
如果没有(lead_x_change==-boxDimensions):
铅x_变化=箱尺寸
潜在客户变更=0
elif event.key==pygame.K_UP:
如果不是(lead_y_change==boxDimensions):
lead_y_change=-boxDimensions
lead_x_change=0
elif event.key==pygame.K_向下:
如果没有(lead_y_change==-boxDimensions):
铅含量变化=箱尺寸
lead_x_change=0
lead_x+=lead_x_更换
lead_y+=lead_y_更换
如果lead_x>gamewidth或lead_x<0或lead_y>gameheight或lead_y<0:
蛇的颜色=红色
gameExit=True
屏幕信息(“你输了!”,红色)
pygame.display.update()
#屏幕上的信息(“你输了!”,红色)在这里不起作用
如果lead_x>游戏宽度:
lead_x=游戏宽度-盒子尺寸
lead_x_change=0
elif铅x<0:
铅x=0
lead_x_change=0
elif lead_y>游戏高度:
铅y=游戏高度-盒子尺寸
elif lead_y<0:
铅y=0
潜在客户变更=0
游戏显示。填充(白色)
pygame.draw.rect(游戏显示,蛇形颜色,[lead_x,lead_y,boxDimensions,boxDimensions])
pygame.display.update()
时钟滴答(15)
#屏幕上的信息(“你输了!”,红色)在这里起作用
#pygame.display.update()
时间。睡眠(3)
pygame.quit()
从AIRTOMAS评论中,这是有效的。在while循环之外,放入以下语句

记分板:


这是在偷偷吃东西时更新分数并将其打印到pygame屏幕上,这很奇怪,我希望有人知道这个问题的根源。你能在游戏结束时写下“你输了”吗?在pygame屏幕上,不是IDLE或CMD。同样在lead_x part之后,请将它们放入while循环中。您是否可以修复您的缩进?您是否尝试在消息后立即调用
display.update
?看起来你在下一次更新调用之前填充了显示?@Padraic Cunningham抱歉,我已经修复了这个问题,但是它仍然不能回答为什么这个在while循环中不起作用的问题?嗯,我也不知道。我只是用@AirThomas的棘手帮助解决了你和我的问题:-)但是如果你想拥有一个记分板或是一些不断更新的东西,你就不能通过在while之外使用call语句来做到这一点loop@user3537381再次检查我的答案如果这解决了你的问题,请检查它作为答案。
message_to_screen("YOU LOSE!",(255,0,0))
pygame.display.update()
sleep(3)
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)