Proyecto: Yet Another Tetris Clone

Leonardo Herrera
Creado: 4/5/2003
Última Actualización: 21/9/2004

¡Este es un trabajo en desarrollo!

Objetivo

Crear un programa que sea similar en funcionalidad al mundialmente conocido juego Tetris. Implementar una arquitectura extensible, separando la lógica del juego de la presentación utilizando un mini engine visual que permita portabilidad. Divertirse haciéndolo.

Metas

Un programa ejecutable, bajo Windows, que emule la jugabilidad de Tetris pero llevándolo un poco más allá. Gráfica atrayente y dinámica, en 3D, y muchos efectos especiales para aportar un poco de dinamismo a un juego por lo demás monótono (a pesar de que no es menos divertido)

Descripción del Juego

La mecánica del juego consiste en un set de figuras compuestas de cubos unidos (Tetrominos), que caen en una superficie. El objetivo es formar "líneas"; una línea es una fila de cubos ininterrumpuda desde un borde a otro de la superficie del juego. Cuando una línea es completada, es eliminada y todas las piezas restantes caen una fila. Las piezas que caen pueden ser rotadas y desplazadas hacia los costados, y además acelerar su caída.

El juego es básicamente una grilla rectangular; cada elemento de la grilla o matriz es una parte que se puede llenar, por la caída de un determinado tetromino. Visualmente es más sencillo de comprender:

Tetris DOS

 

En este screenshot se puede ver la versión original del Tetris, y se aprecian los elementos básicos del juego: el nivel de dificultad actual, que señala la velocidad con la que caen los tetraminos, la cantidad de líneas que han sido completadas, y un puntaje otorgado por cada figura que ha sido colocada. Cabe destacar que desde más alto se dejen caer las figuras, mayor puntaje otorgan, además si se completa más de una fila el puntaje es mayor, etcétera.

Para una explicación más detallada de la lógica del juego, ver "Standard Tetris" Specification, un subcapítulo del excelente trabajo de Colin Fahey, Tetris AI System.

Para la versión que pretendo recrear, conservaré el nivel, el puntaje y la cantidad de líneas completadas. No se mostrarán las estadísticas, pues es un detalle no muy necesario desde el punto de vista de la jugabilidad.

Habrá, además, una ventana mostrando la siguiente figura en juego.

Punteo sobre la implementación

  • Existirán varios módulos relativamente independientes.
  • Se implementará usando C++ (me gusta, ¿ya?)
  • Cada módulo será representado por un objeto que interactuará con los otros
  • A modo de borrador:
    • Módulo del Juego: sabrá sobre Tetraminos, mantendrá las posiciones actuales de cada tetramino y de cada cubo independiente (que ya haya caído), etc. No se actualizará automáticamente, sino que expondrá métodos que permitirán avanzar (y posiblemente retroceder) una jugada en el juego. Será posible grabar "demos" gracias a este approach (por ejemplo, game.nextFrame() avanzaría un frame de juego)
    • Módulo de Entrada/Salida: será el encargado de escribir en el módulo del juego. Accederá a ciertos métodos, por ejemplo, game.moveLeft(), que le permitirán modificar el "comportamiento" del juego.
    • Módulo de Visualización: este mini-engine sabrá sobre Tetris. Es una lástima desde el punto de vista arquitectónico, pero es muy conveniente para crear diferentes módulos de visualización orientados a Tetris. Compartirá storage con el módulo del juego; por ejemplo, tendrá acceso a la superficie del juego, a los diferentes cubos presentes en la pantalla, al tetramino en juego, su posición anterior, y su posición actual (para las animaciones). El módulo del juego será el encargado de actualizarlo.
    • Módulo de Sonido, idéntico al anterior.

Recursos

 

Este sitio es mantenido con ePublish