RE:alguna ayuda con el tetris
Un método que yo emplée es el siguiente. Supongamos que las dimensiones de tu pantalla de juego son de 5 columnas y 10 renglones. Entonces, a nivel lógico, podemos esquematizar todo como una matriz bidimensional:
int mtxPantalla[][] =
{
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
};
Si aparece un cuadro en la esquina superior derecha, tenemos
int mtxPantalla[][] =
{
{ 0, 0, 0, 1, 1 },
{ 0, 0, 0, 1, 1 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
};
Entonces, lo único que tienes que hacer a nivel lógico es cambiar los 0s por 1s
int mtxPantalla[][] =
{
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 1 },
{ 0, 0, 0, 1, 1 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
};
En este ejemplo, el cuadro ya se desplazó un renglón. Para aquellos cuadros que ya no se pueden mover, tendríamos algo como:
int mtxPantalla[][] =
{
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 2, 2 },
{ 0, 0, 0, 2, 2 },
};
así, cada vez que desplaces la matrix, al detectar un 2 no lo mueves.
Luego, ya solo queda la cosa de interpretar 0, 1, 2 con un dibujo. En mi caso, emplee OpenGL. Así, haces un método que recorra la matriz y renderice la imagen correspondiente. Claro, yo lo hice de un sólo color.
Un amigo hizo una versión con diferentes colores de cuadros, y lo que hacía era el mismo algoritmo, pero con decimales:
float mtxPantalla[][] =
{
{ 0.0, 0.0, 0.0, 1.0, 1.2 },
{ 0.0, 0.0, 0.0, 1.1, 1.3 },
{ 0.0, 0.0, 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0, 0.0, 0.0 },
};
así, mi amigo interpretaba la parte entera -1- como un cuadro que se puede mover, y luego la decimal, con el color. En este caso, el cuadro sería -digamos- 1.0 (blanco), 1.1 (rojo), 1.2 (verde) y 1.3 (azul).
Por cierto, como nota, la palabra "Tetris" o cualquier otra terminación con "tris" para este tipo de juegos está patentada :P
Finalmente, en www.sourceforge.net hay varios juegos de estos, bájate uno y ve el algoritmo que emplea.
Saludos.