Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “为什么?”;游戏结束“;文本不显示?_Python_Pygame - Fatal编程技术网

Python “为什么?”;游戏结束“;文本不显示?

Python “为什么?”;游戏结束“;文本不显示?,python,pygame,Python,Pygame,我目前正在尝试编写一个小游戏。敌人应该追逐玩家,但实际的追逐尚未实施。我仍然需要弄清楚怎么做,但这不是问题所在。 我这样做是为了当玩家与敌人相撞时回到起点。除此之外,还应该出现一个文本“游戏结束”。该函数在游戏循环结束时调用,虽然文本出现很短(实际上只出现了一次,我已经尝试了多次),但它不会停留。我打算让它出现,几秒钟后消失,这样玩家就可以再次玩了,但我不知道为什么它会立即消失。 如果这是一个错误的地方张贴这篇文章,请告诉我,我会删除这篇文章。这是我的代码,如果有人能帮我的话,那就太棒了: im

我目前正在尝试编写一个小游戏。敌人应该追逐玩家,但实际的追逐尚未实施。我仍然需要弄清楚怎么做,但这不是问题所在。 我这样做是为了当玩家与敌人相撞时回到起点。除此之外,还应该出现一个文本“游戏结束”。该函数在游戏循环结束时调用,虽然文本出现很短(实际上只出现了一次,我已经尝试了多次),但它不会停留。我打算让它出现,几秒钟后消失,这样玩家就可以再次玩了,但我不知道为什么它会立即消失。 如果这是一个错误的地方张贴这篇文章,请告诉我,我会删除这篇文章。这是我的代码,如果有人能帮我的话,那就太棒了:

import pygame #imports pygame
import math
pygame.init()
#screen
screen = pygame.display.set_mode((800,600)) #width and height

#title and icon
pygame.display.set_caption("The Great Chase") #changes title
icon = pygame.image.load('game-controller.png')
pygame.display.set_icon(icon) #setting icon

#player
playerImg = pygame.image.load('scary-monster.png')
playerX = 370
playerY = 480
playerX_change = 0
playerY_change = 0

#enemy
enemyImg = pygame.image.load('caterpillar.png')
enemyX = 370
enemyY = 50
enemyX_change = 0
enemyY_change = 0

#GAME OVER
game_over_font = pygame.font.Font('Bubblegum.ttf',64)

def game_over_text():
    game_over_text = game_over_font.render("GAME OVER", True, (255, 0, 0))
    screen.blit(game_over_text, (200, 250))

def player(x, y): #function for player
    screen.blit(playerImg, (x, y)) #draws image of player, blit -> means to draw

def enemy(x, y): #function for enemy
    screen.blit(enemyImg,(x,y))

def isCollision(playerX, playerY, enemyX, enemyY):
    distance = math.sqrt((math.pow(playerX-enemyX,2)) + (math.pow(playerY - enemyY,2)))
    if distance < 25:
        return True
    else:
        return False

def chase():
    distance = math.sqrt((math.pow(playerX-enemyX,2)) + (math.pow(playerY - enemyY,2)))

#Game loop
running = True
while running:
    screen.fill((255,255,0)) #0-255 RGB-> red, green & blue

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
           running = False
        # if keystroke check whether right or left or up or down
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -0.2
            if event.key == pygame.K_RIGHT:
                playerX_change = 0.2
            if event.key == pygame.K_UP:
                playerY_change = -0.2
            if event.key == pygame.K_DOWN:
                playerY_change = 0.2
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                playerY_change = 0

    playerX += playerX_change
    playerY += playerY_change

    #creating borders so that player won't leave screen
    if playerX <=0:
        playerX = 0
    elif playerX >=768:
        playerX = 768
    if playerY <= 0:
        playerY = 0
    elif playerY >=568:
        playerY = 568

    #collision
    collision = isCollision(playerX, playerY, enemyX, enemyY)
    if collision:
        playerY = 480
        game_over_text()

    player(playerX, playerY)
    enemy(enemyX, enemyY)
    pygame.display.update()
导入pygame#导入pygame
输入数学
pygame.init()
#屏风
screen=pygame.display.set_模式((800600))#宽度和高度
#标题和图标
pygame.display.set_标题(“大追逐”)#更改标题
icon=pygame.image.load('game-controller.png')
pygame.display.set_图标(图标)#设置图标
#玩家
playerImg=pygame.image.load('truny-monster.png')
playerX=370
playerY=480
playerX_change=0
playerY_change=0
#敌人
enemyImg=pygame.image.load('caterpillar.png')
enemyX=370
灌肠量=50
enemyX_变化=0
Enemy_change=0
#游戏结束
game\u over\u font=pygame.font.font('Bubblegum.ttf',64)
def game_over_text():
game_over_text=game_over_font.render(“game over”,True,(255,0,0))
blit(游戏覆盖文本(200250))
def播放器(x,y):#播放器的功能
screen.blit(playerImg,(x,y))#绘制玩家的图像,blit->表示绘制
def敌人(x,y):#敌人的功能
屏幕。blit(enemyImg,(x,y))
def isCollision(playerX、playerY、enemyX、enemyY):
距离=math.sqrt((math.pow(playerX-enemyX,2))+(math.pow(playerY-enemyY,2)))
如果距离小于25:
返回真值
其他:
返回错误
def chase():
距离=math.sqrt((math.pow(playerX-enemyX,2))+(math.pow(playerY-enemyY,2)))
#游戏循环
运行=真
运行时:
屏幕填充((255255,0))#0-255 RGB->红色、绿色和蓝色
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
#如果按键检查是右还是左,还是上下
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
playerX_变化=-0.2
如果event.key==pygame.K_RIGHT:
playerX_变化=0.2
如果event.key==pygame.K_UP:
playerY_change=-0.2
如果event.key==pygame.K_向下:
playerY_change=0.2
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_左或event.key==pygame.K_右:
playerX_change=0
如果event.key==pygame.K_向上或event.key==pygame.K_向下:
playerY_change=0
playerX+=playerX\u更改
playerY+=playerY\u变化
#创建边框以便玩家不会离开屏幕
如果playerX=768:
playerX=768
如果playerY=568:
playerY=568
#碰撞
碰撞=isCollision(playerX、playerY、enemyX、enemyY)
如果发生碰撞:
playerY=480
游戏超过文本()
玩家(playerX,playerY)
敌人(灌肠,灌肠)
pygame.display.update()

碰撞只会发生一瞬间,而文本上的游戏仅在对象碰撞时显示。如果要保留文本,请在检测到碰撞时设置一个
gameover
变量,并根据变量的状态显示文本:

gameover=False
运行=真
运行时:
# [...]
碰撞=isCollision(playerX、playerY、enemyX、enemyY)
如果发生碰撞:
playerY=480
gameover=True
玩家(playerX,playerY)
敌人(灌肠,灌肠)
如果游戏结束:
游戏超过文本()
pygame.display.update()

注意,
碰撞
根据对象的位置在每个帧中设置。但是,
gameover
在发生碰撞时设置一次,然后保持其状态。

您正在显示它,然后在下一次循环迭代中,通过
screen.fill((255255,0))
再次填充屏幕。如果你立即用纯色覆盖屏幕上的所有内容,为什么你希望文本保留在屏幕上?如果游戏结束,那么退出循环。这解决了文本消失的问题。我把屏幕颜色从循环中去掉了,但是现在播放器在屏幕上留下了一条黑色的痕迹,就是这样。还有,我怎样才能使文本再次消失?再填一次屏幕?可以计时吗?我对python不太了解,但我建议您在主循环=True之前创建一个运行变量,并创建一个if条件获取输入(按钮暂停),然后再次检查if running==False,然后键入win.blit('Text'(Coords)),以显示它。这将比定义它更容易。所以,我尝试过,如果我做得正确,你的建议不起作用,一切都和以前一样。同样的问题依然存在。谢谢,尽管你是对的。我在循环中创建了变量,这是我的错误。将其从循环中取出现在文本显示并保持不变