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
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
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)
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
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')
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", )
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