使用if语句重新启动函数时遇到问题

时间:2019-09-25 13:59:59

标签: python python-2.7

我是编程新手,有一段时间我一直在从事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()

1 个答案:

答案 0 :(得分:0)

我没有尝试。但是似乎您仍处于while True:循环中。也许您需要在break函数的末尾添加if enJuego==False语句。

退出游戏循环后,您可以添加所需的任何内容。 或者,您将while循环更改为while enJuego==True:或(while enJuego: