Voy a empezar a explicar como he creado el Tetris en una serie de post con los que espero dejar claro su funcionamiento y concepción intentando no dejarme ningún cabo suelto.

Lo primero que tuve que razonar fue como crear las piezas que forman el Tetris. Estas a medida que se van realizando lineas se van desglosando perdiendo la forma original así que no podía usar una imagen de la figura completa una vez se completa la linea. Para evitar posible quebraderos de cabeza decidí hacer la pieza desglosada desde el principio.

Para ello como imagen solo incorpore al Content del juego la textura más simple, el cuadrado que forma la figura. Así, para formar la figura simplemente repetiría esta textura en la posición correspondiente y cuando se completen lineas borraría ese posición. Sencillo.

Pieza básica
Pieza básica

Para posicionar cada cuadrado donde quiero utilice una List de Points para así poder remover los necesarios en cada momento.

Dado este punto cree una clase abstracta llamada Data.cs con una serie de métodos estáticos que crearan las figuras al ser llamados.

Para cada forma de la figura hay un método que la configura, de este modo cuando rotemos la figura lo único que hacemos es cambiar la posición de los Points de la List dejando previamente la List vacía.

public static void P0O(List pieces)
{
pieces.Add(new Point(20, 0));
pieces.Add(new Point(0, 0));
pieces.Add(new Point(0, 20));
pieces.Add(new Point(0, 40));
}

P0O es un acrónimo de Pieza-0-Opuesta. Hay un P0N(ormal), P0I(zquierda), P0O(puesto), P0D(erecha) para cada una de las piezas cambiando el numero de pieza yendo desde el 0 al 6. Como parámetro de entrada se le pasa la List que forma la pieza.