コード例 #1
0
def test_eliminar_lineas_baja_las_lineas_superiores():
    pieza_i = tetris.generar_pieza(pieza=tetris.I)
    juego = tetris.crear_juego(pieza_i)

    # Generar esta superficie:
    #   T
    # T T T
    # I I I I I I I
    # I I I I I I I
    # I I I I I I I
    # I I I I I I I
    #
    # Y verificar que al poner la última I queda así:
    #   T
    # T T T
    pieza_t = tetris.generar_pieza(pieza=tetris.T)
    juego = _ubicar_piezas_I(juego, -4, -1, pieza_t)
    if not juego:
        return False

    # Ubicar la T
    for _ in range(4):
        juego = tetris.mover(juego, IZQUIERDA)

    # Bajar la T hasta consolidarla
    juego, cambiar_pieza = tetris.avanzar(juego, pieza_i)
    while not cambiar_pieza and not tetris.terminado(juego):
        juego, cambiar_pieza = tetris.avanzar(juego, pieza_i)

    if tetris.terminado(juego):
        return False

    # Ubicar el resto de las I
    juego = _ubicar_piezas_I(juego, -1, 5, pieza_i)
    if not juego:
        return False

    # Revisar que no haya superficie en ningún lado excepto en
    # donde está la T
    ancho, alto = tetris.dimensiones(juego)

    pieza_t = tetris.generar_pieza(pieza=tetris.T)
    pieza_t = tetris.trasladar_pieza(pieza_t, 0, alto - 2)

    for x in range(ancho):
        for y in range(alto):
            if tetris.hay_superficie(juego, x, y) and not (x, y) in pieza_t:
                print(f"f en {(x, y)}")
                return False

    for x, y in pieza_t:
        if not tetris.hay_superficie(juego, x, y):
            print("no pieza t")
            return False

    return True
コード例 #2
0
def test_eliminar_filas_superiores():
    pieza_t = tetris.generar_pieza(tetris.T)
    juego = tetris.crear_juego(pieza_t)

    for _ in range(tetris.dimensiones(juego)[1]):
        juego = tetris.mover(juego, IZQUIERDA)

    juego, cambiar_pieza = tetris.avanzar(juego, pieza_t)
    while not cambiar_pieza and not tetris.terminado(juego):
        juego, cambiar_pieza = tetris.avanzar(juego, pieza_t)

    for _ in range(tetris.dimensiones(juego)[1]):
        juego = tetris.mover(juego, DERECHA)

    juego, cambiar_pieza = tetris.avanzar(juego, pieza_t)
    while not cambiar_pieza and not tetris.terminado(juego):
        juego, cambiar_pieza = tetris.avanzar(juego, pieza_t)

    # Se consolida la siguiente superficie:
    #
    #    T T T T T T T T T
    #      T     T     T

    # La cual al eliminar las filas debería resultar en
    #
    #
    #      T     T     T

    juego = tetris.mover(juego, IZQUIERDA)
    juego, cambiar_pieza = tetris.avanzar(juego, pieza_t)
    while not cambiar_pieza and not tetris.terminado(juego):
        juego, cambiar_pieza = tetris.avanzar(juego, pieza_t)

    juego, cambiar_pieza = tetris.avanzar(juego, pieza_t)

    ancho, alto = tetris.dimensiones(juego)
    superficies_esperadas = [(1, 17), (4, 17), (7, 17)]
    for j in range(alto):
        for i in range(ancho):

            # Superficie esperada no se encuenta en el juego
            if (i, j) in superficies_esperadas:
                if not tetris.hay_superficie(juego, i, j):
                    return False

            # Se encontro una superficie no esperada en el juego
            elif tetris.hay_superficie(juego, i, j):
                return False

    return True
コード例 #3
0
def test_avanzar_consolida_la_superficie_al_llegar_al_fondo():
    siguiente_pieza = tetris.generar_pieza(pieza=tetris.T)
    juego = tetris.crear_juego(tetris.generar_pieza(tetris.L))

    llego_al_piso = False
    # Avanzar n veces hasta que la pieza L esté justo antes de tocar el piso
    for _ in range(ALTO_JUEGO):
        pieza_actual = tetris.pieza_actual(juego)
        if any(py == ALTO_JUEGO - 1 for _, py in pieza_actual):
            llego_al_piso = True
            break

        juego, cambiar_pieza = tetris.avanzar(juego, siguiente_pieza)
        if cambiar_pieza == True:  # Si se consolidó antes hay un bug.
            return False

    if not llego_al_piso:
        return False  # Iteramos ALTO_JUEGO veces y la pieza nunca llegó al piso

    pieza_actual = tetris.pieza_actual(juego)
    juego, cambiar_pieza = tetris.avanzar(juego, siguiente_pieza)

    if not cambiar_pieza:
        return False  # La pieza tenía que consolidarse y no lo hizo

    # Debe haber superficie en todos los puntos que ocupaba la pieza actual antes de
    # consolidarse.
    superficie = []
    for py in range(ALTO_JUEGO):
        for px in range(ANCHO_JUEGO):
            if tetris.hay_superficie(juego, px, py):
                superficie.append((px, py))

    return sorted(superficie) == sorted(pieza_actual)
コード例 #4
0
def test_grilla_esta_vacia_al_iniciar():
    pieza_inicial = tetris.generar_pieza(tetris.T)
    juego = tetris.crear_juego(pieza_inicial)

    ancho, alto = tetris.dimensiones(juego)
    for y in range(alto):
        for x in range(ancho):
            if tetris.hay_superficie(juego, x, y):
                return False

    return True
コード例 #5
0
def dibujar_superficie(juego):
  '''Se dibujara la grilla del tetris'''
  gamelib.draw_image('img/fondo6.gif', -80, 10)
  ancho, alto = tetris.dimensiones(juego)
  gamelib.draw_line(600, 250, 900, 250, fill='white', width=3)
  gamelib.draw_text('PRÓXIMA PIEZA:', 630, 10, fill='white', anchor='nw')
  for x in range (0, 600, 66):
    gamelib.draw_line(x, 0, x, 900, fill='white', width=2) 
  for y in range (0, 900, 50):
    gamelib.draw_line(0, y, 595, y, fill='white', width=2)  
  for y in range(alto):
        for x in range(ancho):
            if tetris.hay_superficie(juego, x, y):  
              gamelib.draw_rectangle(x*66, y*50, (x+1)*66, (y+1)*50, outline='white', fill='purple')
コード例 #6
0
def dibujar_superficie(juego):
    """
    Recibe el juego y dibuja la superficie
    """
    ancho, alto = tetris.dimensiones(juego)
    proporcio = alto / ancho
    grilla_ancho = RES / proporcio
    lado_bloque = grilla_ancho / ancho
    for y in range(alto):
        for x in range(ancho):
            if tetris.hay_superficie(juego,x,y):
                gamelib.draw_rectangle(
                    x * lado_bloque,
                    y * lado_bloque,
                    (x + 1) * lado_bloque,
                    (y + 1) * lado_bloque,
                    fill="gray",
                )
コード例 #7
0
def test_eliminar_todas_las_lineas():
    pieza_i = tetris.generar_pieza(pieza=tetris.I)
    juego = tetris.crear_juego(pieza_i)

    # Acomodar todas piezas I y verificar que se eliminan todas
    # las líneas
    juego = _ubicar_piezas_I(juego, -4, 5, pieza_i)

    if not juego:  # El juego terminó antes de poder ubicar las I.
        return False

    # Revisar que no haya superficie en ningún lado
    ancho, alto = tetris.dimensiones(juego)
    for x in range(ancho):
        for y in range(alto):
            if tetris.hay_superficie(juego, x, y):
                return False

    return True