Pumpktris - Tetris pumpa (5 / 10 steg)
Steg 5: Programmering spelet
Beskriva formerna
Det finns sju tetrominos, alla med 4 pixlar, och var och en med fyra möjliga rotationer. Vi lagrar allt detta i en multi-dimensionell array: den första dimensionen som består av sju figurer, den andra dimensionen som innehåller de fyra rotationer för varje form, de tredje som innehåller fyra pixel beskrivningar som varje består av en X- och Y samordna.
Till exempel, beskriver detta formen "T":
/* T */ {
/ * vinkel 0 * / {{0,1} {1,1}, {2,1}, {1,2}},
/ * vinkel 90 * / {{1,0} {1,1}, {2,1}, {1,2}},
/ * vinkel 180 * / {{1,0} {0,1}, {1,1}, {2,1}},
/ * vinkel 270 * / {{1,0} {0,1}, {1,1}, {1,2}}
}
Spåra den aktiva bit
För att hålla reda på lappa för närvarande i lek, har programmet en activePiece variabel. Det här är index för den aktiva formen på den högsta nivån i matrisen. Det håller också en rotation variabel som innehåller indexet för nuvarande rotation. En xOffset variabel spår hur långt åt vänster eller höger (0-7) varje bit är och yOffset spårar hur långt (0-15) styrelsen det har fallit. Om du vill rita den aktiva bit lägger programmet till X och Y kompensera värdena för X och Y-koordinaterna för varje pixel drog från nuvarande rotation av valda lappa.
Spåra de fasta bitarna
En 16 byte-array används för att hålla reda på de fasta bitarna, med varje byte representerar en rad. Exempelvis skulle matrisen nedan representerar en L-form som sitter i mitten av botten två rader (som anges av 1s i de sista två byte):
byte sampleGrid [16] ={
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00100000,
B00111000
};
Kollision upptäckt
När ett försök görs att flytta den aktiva bit, kontrolleras först den nya positionen mot matrisen för fasta bitar. Om det finns inga kollisioner, flytten är tillåtet och matrisen ritas om. Om en kollision upptäcks vid försök att flytta till vänster, höger, eller rotera är åtgärden förbjudet. Om en kollision upptäcks vid försök att släppa en bit, stycke blir fast i sin ståndpunkt och läggs till i arrayen fasta pixlar.
Släppa bitar automatiskt
Takten i spelet styrs av variablerna gravityTrigger och stegräknare . Varje slinga av programmet steg stegräknare, och varje gång stegräknare når antalet lagrade i gravityTrigger, det droppar den aktiva stycke en nivån.
Under spelets gång minskas gravityTrigger så att den aktiva bit tappar allt oftare tills slutligen det sjunker i varje slinga av programmet.
Varje gång en aktiv bit fast nätet kontrolleras för full bytes/rader (B11111111). Om den hittar något, det blinkar dem av och på tre gånger, sedan tar bort dem och droppar raderna ovan för att fylla tomrummet.
Felsökning
Om bitarna är inte faller från toppen till botten, men istället gå från sida till sida, ändra värdet gått i raderna "matrixTop.setRotation(1);" eller "matrixBottom.setRotation(1)," i "setup()" slingan.
Om bitarna börjar i fel matrisen, växla den fysiska platsen för varje matris eller omvänd adresserna deklareras i "matrixTop.begin(0x70);" och "matrixBottom.begin(0x71);" rader av "setup()" slingan.
Om några rader eller kolumner inte ljus, vicka mini LED matrix i kvinnliga rubriker. De kan inte göra bra kontakt.