Paso 5: Programación del juego
Describir las formas
Hay siete tetrominos, cada uno con 4 pixeles y cada una con cuatro posibles rotaciones. Almacenamos todo esto en una matriz multi-dimensional: la primera dimensión que consiste en las siete formas, la segunda dimensión que contiene las cuatro rotaciones de cada forma, las tercera que contiene cuatro píxeles las descripciones que consiste de un X e Y coordinan.
Por ejemplo, describe la forma de "T":
/* T */ {
/ * ángulo 0 * / {{0,1}, {1,1}, {2,1}, {1,2}},
/ * ángulo de 90 * / {{1,0}, {1,1}, {2,1}, {1,2}},
/ * ángulo 180 * / {{1,0}, {0,1}, {1,1}, {2,1}},
/ * ángulo 270 * / {{1,0}, {0,1}, {1,1}, {1,2}}
}
La pieza activa de seguimiento
Para hacer un seguimiento de la obra actualmente en juego, el programa mantiene una variable de activePiece . Este es el índice de la forma activa en el nivel más alto de la matriz. También mantiene una variable de rotación que contiene el índice de la rotación actual. Un xOffset variable pistas cuánto izquierda o derecha (0-7) es de cada pieza y yOffset rastrea hasta qué punto (0-15) la Junta ha caído. Para dibujar la pieza activa el programa agrega que x e Y offset valores para las coordenadas X e Y de cada píxel de la actual rotación de la pieza seleccionada.
Seguimiento de las piezas fijas
El programa utiliza una matriz de 16 bytes para realizar un seguimiento de las piezas fijas, con cada byte que representa una fila. Por ejemplo, la matriz siguiente representaría una forma de L en el centro de las dos filas inferiores (según lo indicado por el 1s en los últimos dos bytes):
sampleGrid Byte [16] ={
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00100000,
B00111000
};
Detección de colisiones
Cuando se intenta mover la pieza activa, el programa comprueba primero la nueva posición contra el conjunto de piezas fijas. Si hay no hay colisiones, se permite el movimiento y la matriz se vuelve a dibujar. Si se detecta una colisión mientras intentaba mover izquierda, derecha, o girar, la acción está prohibida. Si se detecta una colisión al intentar soltar una pieza, la pieza se convierte en fija en su posición y se añade a la matriz de píxeles fijadas.
Caída de piezas automáticamente
El ritmo del juego es controlado por las variables gravityTrigger y stepCounter . Cada lazo del programa aumenta a stepCounter, y cada vez que stepCounter llega a la cuenta en gravityTrigger, cae el nivel de una pieza activa.
Mientras el juego progresa, gravityTrigger se disminuye para que la pieza activa cae más con frecuencia hasta que finalmente está disminuyendo en cada loop del programa.
Cada vez que una pieza activa se fija a la red el programa comprueba bytes/filas completas (B11111111). Si encuentra alguno, les parpadea el encendido y apagado tres veces, luego elimina y las gotas de las filas para llenar el vacío.
Solución de problemas
Si las piezas no caen de arriba hacia abajo, pero en lugar de otro ir de un lado a otro, cambiar el valor en las líneas "matrixTop.setRotation(1);" o "matrixBottom.setRotation(1);" en el circuito "setup()".
Si las piezas se inicia en la matriz mal, cambiar la ubicación física de cada matriz o invertir la dirección declarada en el "matrixTop.begin(0x70);" y "matrixBottom.begin(0x71);" líneas del lazo "setup()".
Si no enciende algunas filas o columnas, menear la matriz LED mini en los jefes femeninos. No puede hacer buen contacto.