我试图让它这样当游戏在屏幕上显示,用户可以按空格键回到游戏中。当前,当游戏结束时,它会在屏幕上显示游戏,但不接受任何输入,或者至少不处理输入。在某些情况下,游戏基本上是左右移动以避开障碍物。目前,我只有一个障碍,但我只是还没有达到这一点。谢谢
import pygame
import random
import math
pygame.init()
screenWidth = 700
screenHeight = 800
x = screenWidth / 2
y = (screenHeight / 4) * 3
width = 50
height = 50
win = pygame.display.set_mode((screenWidth, screenHeight))
pygame.display.set_caption("Test Game")
bg = pygame.image.load("background.png").convert()
gameover = pygame.image.load("gameover.png").convert()
bgx = (screenWidth / 6) * 2
bgy = 0
clock = pygame.time.Clock()
class enemy():
def __init__(self,c,y,width,height):
self.c = c
self.y = y
self.width = width
self.height = height
self.vel = 5
def draw(self, win):
if self.c == 1:
self.x = 250
#250
elif self.c == 2:
self.x = 350
#350
else:
self.x = 450
#450
self.y += self.vel
pygame.draw.rect(win, (0,0,255), (self.x,self.y,self.width,self.height))
evil = enemy(random.randint(1,3),0,50,50)
#def redrawGameWindow():
# evil.draw(win)
# pygame.display.update()
running = True
gameOver = False
while running:
clock.tick(60)
while gameOver:
win.blit(gameover, (0,0))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
if pygame.event.type == pygame.KEYUP:
if event.key == pygame.K_SPACE:
gameOver = True
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
if event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
x+=100
if event.key == pygame.K_LEFT:
x-=100
win.fill((0,0,0))
win.blit(bg, (bgx, bgy))
evil.draw(win)
dist = math.hypot(evil.x - x, evil.y - y)
if dist <= 50:
print("Game Over!")
running = False
gameOver = True
pygame.draw.rect(win, (255,0,0), (x,y,width,height))
pygame.display.update()
#redrawGameWindow()
while gameOver:
win.blit(gameover, (0,0))
pygame.display.update()
keys = pygame.key.get_pressed()
if keys[pygame.K_SPACE]:
gameOver = False
pygame.quit()
主要的问题是,你的游戏场景是在主循环后面的循环,当你到达它的时候,没有办法回到第一个循环。当你触摸邪恶的对象时,你设置
running = False
,离开main并进入while gameOver:
循环在这个循环中,您还需要调用
pygame.event.pump()
,否则pygame.key.get_pressed()
函数不能正常工作,窗口会在一段时间后冻结,因为没有处理事件。如果您想重新启动游戏,您应该只使用嵌套的while gameOver
循环。实际上,我建议您更进一步地重构场景并使用有限状态机(这里有一个answer,我使用函数作为场景,但也可以查看下面注释中的链接)这是你的代码的工作版本。我已经改变了一些事情,并添加了注释来解释这些变化
相关问题 更多 >
编程相关推荐