コード例 #1
0
def main():
    def crono():
        global segundos
        global minutos
        segundos = int(segundos)
        if segundos == 60:
            segundos = 0
            minutos += 1
            return crono()

        else:
            segundos += 1
            time.sleep(1)

            return crono()

    """ Programa Principal """
    pygame.init()

    puntuacion = pygame.mixer.music.load("Sonido/intro2.wav")
    pygame.mixer.music.play(2)
    sonido = pygame.mixer.Sound("Sonido/choque.wav")

    # Definimos el alto y largo de la pantalla
    dimensiones = [LARGO_PANTALLA, ALTO_PANTALLA]
    pantalla = pygame.display.set_mode(dimensiones)

    pygame.display.set_caption("Cronometro")

    def Reloj():

        fuente1 = pygame.font.SysFont("Algerian", 30)
        Reloj = str("Tiempo  " + str(minutos) + ":" + str(segundos))
        mensaje = fuente1.render(Reloj, 1, (BLANCO))
        pantalla.blit(mensaje, (600, 10))

    hilo = threading.Thread(target=crono, args=())
    hilo.start()

    # Creamos al protagonista
    protagonista = Protagonista("Imagenes/bola2.png")

    #imagenFondo = pygame.image.load("Imagenes/fondo1.jpg")
    #imagenFondo = pygame.transform.scale(imagenFondo, (800,600))

    # Creamos todos los niveles
    listade_niveles = []
    listade_niveles.append(Nivel_01(protagonista))

    # Establecemos el nivel actual
    nivel_actual_no = 0
    nivel_actual = listade_niveles[nivel_actual_no]

    lista_sprites_activos = pygame.sprite.Group()
    protagonista.nivel = nivel_actual

    protagonista.rect.x = 340
    protagonista.rect.y = ALTO_PANTALLA - protagonista.rect.height
    lista_sprites_activos.add(protagonista)

    listade_monedas = pygame.sprite.Group()
    listade_todos_los_sprites = pygame.sprite.Group()

    z = 200
    z1 = 590
    z2 = 300
    for i in range(4):

        # ESto representa un bloque
        monedas = Moneda("Imagenes/moneda.png")
        monedas2 = Moneda("Imagenes/moneda.png")
        monedas3 = Moneda("Imagenes/moneda.png")

        # Definimos una ubicación aleatoria para el bloque
        monedas.rect.x = z
        monedas2.rect.x = z1
        monedas3.rect.x = z2

        monedas.rect.y = 350
        monedas2.rect.y = 260
        monedas3.rect.y = 110

        z += 50
        z1 += 50
        z2 += 50

        # Añadimos el bloque a la lista de objetos
        listade_monedas.add(monedas)
        listade_todos_los_sprites.add(monedas)
        listade_monedas.add(monedas2)
        listade_todos_los_sprites.add(monedas2)
        listade_monedas.add(monedas3)
        listade_todos_los_sprites.add(monedas3)

    #Iteramos hasta que el usuario pulse sobre el botón de salida
    hecho = False

    # Lo usamos para gestionar cuan rápido se actualiza la pantalla.
    reloj = pygame.time.Clock()

    puntuacion = 0
    puntosMonedas = 0

    mifuenteSistema = pygame.font.SysFont("Algerian",
                                          30)  # obtener una fuente del sistema
    miTextoSistema = mifuenteSistema.render("Puntos: ", 0, BLANCO)
    miTextoSistema2 = mifuenteSistema.render("", 0, BLANCO)
    miTextoSistema3 = mifuenteSistema.render("x 0", 0, BLANCO)
    # -------- Bucle Principal del Programa -----------
    while not hecho:
        global segundos

        for evento in pygame.event.get():  # El usuario realizó alguna acción
            if evento.type == pygame.QUIT:  # Si el usuario hizo click en salir
                hecho = True  # Marcamos como hecho y salimos de este bucle

            if evento.type == pygame.KEYDOWN:
                if evento.key == pygame.K_LEFT:
                    protagonista.ir_izquierda()
                if evento.key == pygame.K_RIGHT:
                    protagonista.ir_derecha()
                if evento.key == pygame.K_UP:
                    protagonista.saltar()

            if evento.type == pygame.KEYUP:
                if evento.key == pygame.K_LEFT and protagonista.cambio_x < 0:
                    protagonista.stop()
                if evento.key == pygame.K_RIGHT and protagonista.cambio_x > 0:
                    protagonista.stop()

        # Actualizamos al protagonista.
        lista_sprites_activos.update()

        listade_impactos_bloque = pygame.sprite.spritecollide(
            protagonista, listade_monedas, True)

        for monedas in listade_impactos_bloque:
            puntuacion += 10
            puntosMonedas += 1
            sonido.play()
            puntaje = str(puntuacion)
            puntajeM = str(puntosMonedas)

            miTextoSistema2 = mifuenteSistema.render(puntaje, 5, BLANCO)
            miTextoSistema3 = mifuenteSistema.render(("X" + puntajeM), 5,
                                                     BLANCO)

            L = str(puntuacion)
            archi.creartxt("puntuaciones.txt")
            archi.grabartxt("puntuaciones.txt", ("puntos:" + L))
            print("La puntuacion es:", str(L))

        # Actualizamos los objetos en este nivel

        # Si el protagonista se aproxima al lado derecho, desplazamos su mundo a la izquierda (-x)
        if protagonista.rect.right > LARGO_PANTALLA:
            protagonista.rect.right = LARGO_PANTALLA

        # Si el protagonista se aproxima al lado izquierdo, desplazamos su mundo a la derecha (+x)
        if protagonista.rect.left < 0:
            protagonista.rect.left = 0

        # TODO EL CÓDIGO DE DIBUJO DEBERÍA IR DEBAJO DE ESTE COMENTARIO

        nivel_actual.update()
        nivel_actual.draw(pantalla)

        lista_sprites_activos.draw(pantalla)
        listade_todos_los_sprites.draw(pantalla)

        pantalla.blit(imagenMoneda, (10, 10))

        Reloj()

        pantalla.blit(miTextoSistema, (260, 10))
        pantalla.blit(miTextoSistema2, (380, 10))
        pantalla.blit(miTextoSistema3, (45, 10))

        # TODO EL CÓDIGO DE DIBUJO DEBERÍA IR ENCIMA DE ESTE COMENTARIO

        # Limitamos a 60 fps
        reloj.tick(60)

        # Avanzamos y actualizamos la pantalla con todo lo que hemos dibujado.
        pygame.display.flip()

    # Pórtate bien con el IDLE. Si te olvidas de esta línea, el programa se 'colgará' al salir.
    pygame.quit()