## Tetris en BASIC puro
He estado trabajando en una implementación de Tetris en Locomotive BASIC como solución para Rosetta Code.
El programa incluye:
- Las siete piezas (ITOSZJL), en siete colores diferentes
- Un generador aleatorio de bolsa de 7 («7-bag randomizer»), asegurando que cada pieza aparezca una vez por cada conjunto de siete
- Vista previa de la siguiente pieza, eliminación de líneas, y caídas rápida («hard drop») y suave («soft drop»)
- Puntuación basada en las líneas eliminadas y el nivel actual
- Dificultad creciente, subiendo de nivel cada diez líneas
- Control por teclado mediante las teclas de cursor, el teclado numérico o las teclas de letras, incluyendo rotación en sentido horario y antihorario
Se prestó mucha atención al rendimiento, en particular para evitar trabajo innecesario en el bucle principal del juego:
- Renderizado precalculado: cada pieza y rotación cuenta con cadenas predefinidas para dibujar/borrar, por lo que el movimiento no necesita decodificar la figura ni redibujar el tablero.
- Detección de colisiones rápida: las cuatro celdas ocupadas de cada rotación se decodifican una sola vez. Un tablero aplanado, desplazamientos lineales en caché y límites con margen de relleno («padding») mantienen las comprobaciones de colisión simples y las detienen tan pronto como se detecta una.
- Eliminación de líneas eficiente: el conteo de ocupación de filas se mantiene de forma incremental, y solo es necesario comprobar las filas tocadas por la pieza bloqueada. Las filas completadas se eliminan desplazando una ventana de BASIC en lugar de redibujar todo el tablero.
También experimenté con renderizado consciente de superposiciones («overlap-aware rendering»), pero lo descarté: la pequeña ganancia potencial no compensaba el trabajo extra de inicio ni la complejidad adicional.
El resultado es un programa en BASIC compacto de ~175 líneas.
Fuente: [Tetris: Rosetta Code]( Tetris - Rosetta Code )
También se puede ejecutar con CPCBasicTS v0.5.8
¡Comentarios y sugerencias son bienvenidos!
