我是编程新手,有一段时间我一直在从事Space Invader游戏。但是现在我想出了一个问题,以便使用Game Over功能重新启动游戏。如果我是正确的,则其中一种方法是使用“ if”问题(在我的情况下是按钮),如果回答是,则再次调用SpaceInvader()。但是发生的是,它没有重新启动整个游戏,而是在第一个SpaceInvader()上方运行该函数。
我不知道,因为它是西班牙文,所以您无法理解这些变量,但这是按钮的代码:
def boton(mensaje,posx,posy,ancho,alto,ColorA,ColorDis,accion=None):
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if posx+ancho > mouse[0] > posx and posy+alto > mouse[1] > posy:
pygame.draw.rect(ventana,ColorA,(posx,posy,ancho,alto))
if click[0] == 1 and accion != None:
accion()
else:
pygame.draw.rect(ventana,ColorDis,(posx,posy,ancho,alto))
miniTexto = pygame.font.Font("prisma/Prisma.ttf",20)
textSurf, textRect = textos(mensaje, miniTexto)
textRect.center = ( (posx+(ancho/2)), (posy+(alto/2)) )
ventana.blit(textSurf, textRect)
这是游戏结束功能:
def gameOver():
if Perdiste==True:
for evento in pygame.event.get():
if evento.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.set_caption("Space Invader")
ventana.blit(ImagenFondo,(0,0))
miFuente2 = pygame.font.Font("prisma/Prisma.ttf",70)
Texto2 = miFuente2.render("Game Over",0,(green))
ventana.blit(Texto2,(240,170))
boton("Inicio",275,320,150,50,bright_green,green,SpaceInvader)
boton("Cerrar",500,320,150,50,bright_red,red,quit)
pygame.display.update()
这是主要代码:
def SpaceInvader():
global pausa
pausa
global puntos
puntos = 0
pygame.mixer.init()
pygame.display.set_caption("Space Invader")
pygame.mixer.music.load("Musica/Tha Aphex Twin.mp3") #Musica
pygame.mixer.music.play(3)
miFuenteSistema = pygame.font.Font("prisma/Prisma.ttf",40)
Texto = miFuenteSistema.render("Fin del juego",0,(green))
jugador = Nave.nave_espacial(ancho,alto)
cargarEnemigos()
enJuego = True #Sirve para determinar si el jugador esta vivo, en este caso el juego sigue en progreso
reloj =pygame.time.Clock()
while True:
reloj.tick(60)
tiempo = pygame.time.get_ticks()/1000
for evento in pygame.event.get():
if evento.type == QUIT:
pygame.quit()
sys.exit()
if enJuego==True:
if evento.type==pygame.KEYDOWN:
keys = pygame.key.get_pressed()
if keys[K_LEFT]:
jugador.movimientoIzquierda()
if keys[K_RIGHT]:
jugador.movimientoDerecha()
if evento.key ==pygame.K_p:
pausa = True
pausa1()
elif evento.key ==K_SPACE:
x,y = jugador.rect.center
jugador.disparar(x,y)
ventana.blit(ImagenFondo,(0,0))
score(puntos)
jugador.dibujar(ventana) #Aca imprime por pantalla los objetos
if len(jugador.lista_disparos)>0:
for x in jugador.lista_disparos:
x.dibujar(ventana)
x.Trayectoria()
if x.rect.top<-10:
jugador.lista_disparos.remove(x)
else:
for enemigo in listaEnemigo:
if x.rect.colliderect(enemigo.rect):
listaEnemigo.remove(enemigo)
jugador.lista_disparos.remove(x)
global puntos
puntos = puntos+100
if len(listaEnemigo)>0:
for enemigo in listaEnemigo:
enemigo.comportamiento(tiempo)
enemigo.dibujar(ventana)
if enemigo.rect.colliderect(jugador.rect):
jugador.destruccion()
enJuego = False
detenerTodo()
if len(enemigo.lista_disparos)>0:
for x in enemigo.lista_disparos:
x.dibujar(ventana)
x.Trayectoria()
if x.rect.colliderect(jugador.rect):
jugador.destruccion()
enJuego = False
detenerTodo()
if x.rect.top>900:
enemigo.lista_disparos.remove(x)
else:
for disparo in jugador.lista_disparos:
if x.rect.colliderect(disparo.rect):
jugador.lista_disparos.remove(disparo)
enemigo.lista_disparos.remove(x)
if enJuego==False:
pygame.mixer.music.fadeout(3000) #La musica se atenue por 3 segundos y luego se detenga
ventana.blit(Texto,(290,170))
global Perdiste
Perdiste = True
gameOver()
pygame.display.update()
introJuego() SpaceInvader()
答案 0 :(得分:0)
我没有尝试。但是似乎您仍处于while True:
循环中。也许您需要在break
函数的末尾添加if enJuego==False
语句。
退出游戏循环后,您可以添加所需的任何内容。
或者,您将while循环更改为while enJuego==True:
或(while enJuego:
)