我对编程很陌生,有一段时间我一直在做一个太空入侵者游戏。但是现在我遇到了一个问题,为了使用game Over函数重新启动游戏。如果我是正确的,其中一个方法是使用一个“If”问题(在我的例子中是一个按钮),如果答案是yes,则再次调用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()
简介() 太空入侵者()
我没试过。但似乎你仍然在你的
while True:
循环中。可能需要在if enJuego==False
函数的末尾添加break
语句。你知道吗当你退出游戏循环,你可以添加任何你想要的。 或者将while循环更改为
while enJuego==True:
或(while enJuego:
)相关问题 更多 >
编程相关推荐