51. Moviendo en Tetris
Crea una función que simule el movimiento de una pieza de Tetris en un tablero de juego.
La función debe aceptar el tablero actual (una matriz, ej. 10x20), la pieza actual (otra matriz más pequeña), y las coordenadas de la pieza en el tablero (fila, columna). También aceptará una dirección de movimiento (’abajo’, ’izquierda’, ’derecha’). Devolverá una nueva matriz que representa el tablero con la pieza movida, o el tablero original si el movimiento no es válido (choca con paredes o con otras piezas).
# Representación de un tablero de Tetris (vacío)
tablero_vacio = [[' ' for _ in range(10)] for _ in range(20)]
# Representación de una pieza (ej. 'O')
pieza_O = [
['X', 'X'],
['X', 'X']
]
def mover_tetromino(tablero: list[list[str]], pieza: list[list[str]],
coordenadas: tuple[int, int], direccion: str) -> tuple[list[list[str]], tuple[int, int]]:
# Devolverá el nuevo tablero y las nuevas coordenadas, o el tablero/coordenadas originales si no se mueve
# Tu código aquí
pass
# Ejemplo de uso
# tablero_inicial = tablero_vacio # O un tablero con algunas piezas ya fijas
# pieza_actual = pieza_O
# coords_actuales = (0, 4) # Fila 0, Columna 4
# tablero_movido, nuevas_coords = mover_tetromino(tablero_inicial, pieza_actual, coords_actuales, "abajo")
# print(nuevas_coords) # (1, 4)
# print(tablero_movido) # Tablero con la pieza en la nueva posición
# Simula chocar con el fondo
# tablero_al_fondo = [[' ' for _ in range(10)] for _ in range(19)] + [['X' for _ in range(10)]] # Fila 19 llena
# pieza_pequeña = [['X']]
# coords_casi_fondo = (18, 0)
# tablero_chocado, coords_chocadas = mover_tetromino(tablero_al_fondo, pieza_pequeña, coords_casi_fondo, "abajo")
# print(coords_chocadas) # (18, 0) - No se movió
Ratoncito
Implementa el movimiento hacia ’abajo’, ’izquierda’ y ’derecha’, verificando colisiones con los bordes del tablero. Asume que la pieza y el tablero usan los mismos símbolos (’X’ para pieza, ’ ’ para vacío).
Dragón
Añade la detección de colisiones con otras piezas ya fijas en el tablero. Además, implementa la función para "fijar" la pieza al tablero cuando choca con algo (es decir, integrar la pieza X permanentemente en el tablero y detectar si alguna fila se ha completado para limpiarla).
Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.
Apóyame en Ko-fi