Home

 Logithèque

TI83

Jeu - TI-tris


Code

Ce programme utilise quatre sous-programmes.

Programme principal "TITRIS" :

ClrHome:Output(4,6,"TI-TRIS")
{8,12}->dim([H]):Fill(0,[H])
" *O0e"->Str2
0->T:10->R:90->S
T+R->U:T+S->V
For(I,1,8)
Output(I,13,":"):End
Output(2,14,"SCO"):Output(5,14,"PIE"):0->A:0->N
Output(4,6," ")
prgmZTPIE
Lbl L
If K=0:getKey->K
If U<T:Goto R
Lbl U
If V<T:Goto S
Lbl V
T+3->T:Goto L
-------------
Lbl R
X->B
Y->C:[G]->[F]
If K=24:C-1->C
If K=26:C+1->C
If K=25:[F]*[[0,1][­1,0]]->[F]
If Y!=C or K=25
Then
prgmZTCOLL
If Ans=0:Then
prgmZTHIDE
prgmZTAFF

End:End
T+4->T:T+R->U
0->K:Goto U
-------------
Lbl S
Y->C
X+1->B:[G]->[F]
prgmZTCOLL
If Ans=0
Then
prgmZTHIDE
prgmZTAFF

Else
If X<2:Then
Output(5,5,"/======."):Output(6,5,"' FINI'"):Output(7,5,".======/"):Stop:End
M-1->M:0->B:0->C
M->[H](X,Y)
For(I,1,3)
[G](I,1)->Z:M->[H](X+Z,Y+[G](I,2)):min(B,Z)->B:max(C,Z)->C
End
X+B->B:X+C->C
0->Z:For(I,B,C)
1->W:For(J,1,12):If 0=[H](I,J):0->W:End
If W:Then
For(W,2,I)
rowSwap([H],1,W)->[H]:End
*row(0,[H],1)->[H]:I->Z:End
End
For(I,Z,1,­1)
For(J,1,12)
Output(I,J,sub(Str2,[H](I,J)+1,1)):End:End
T+8->T
A+M->A:1+N->N
prgmZTPIE
End
T+3->T:T+S->V
Goto V

Le signe "!=" symbolise 'différent de'.

Sous-Programme "ZTAFF" :

T+3->T:Output(X,Y,Str3)
For(I,1,3)
X+[G](I,1)->Z
If Z>0
Output(Z,Y+[G](I,2),Str3):End

Sous-Programme "ZTCOLL" :

If B>8:Goto Z
If C<1 or 12<C
Goto Z
If [H](B,C)!=0
Goto Z
T+2->T
For(I,1,3)
[F](I,1)+B->Z
[F](I,2)+C->W
If Z>8:Goto Z
If W<1 or 12<W
Goto Z
If Z>0:Then
If [H](Z,W)!=0
Goto Z:End
End
T+I->T:0:Return
Lbl Z:T+7->T:1

Sous-Programme "ZTHIDE" :

Str3->Str4
" "->Str3
prgmZTAFF
Str4->Str3
B->X:C->Y:[F]->[G]

Sous-Programme "ZTPIE" :

2+int(5*rand)->M:sub(Str2,M,1)->Str3
If M=2:[[0,­1][0,1][0,2]]->[G]
If M=3:[[­1,0][1,0][0,1]]->[G]
If M=4:[[­1,0][0,1][0,2]]->[G]
If M=5:[[1,0][0,1][0,2]]->[G]
If M=6:[[­1,0][0,1][1,1]]->[G]
1->X:6->Y
prgmZTAFF
Output(3,14,A)
Output(6,14,N)
T+5->T


Mode d'emploi

Il s'agit d'un ènième avatar de Tétris (R), (C), (TM) etc etc.

Lancer le programme. Le déplacement des pièces se fait avec les touches flèches droite et gauche, la rotation avec la touche flèche vers le haut.

On observe l'habituelle gestion du temps par la variable T un peu partout dans le programme.

Ce programme est original. Si vous affirmez où que ce soit être l'auteur de ceci ou vous comportez comme tel, vous êtes idiot.


Programmation de l'ensemble

Le programme utilise une matrice pour représenter l'aire de jeu, [H], et une autre pour représenter la pièce en cours de chute. Les tests de collision sont frustres, ne vérifiant que l'emplacement d'arrivée en cas de rotation par exemple...

Le sous-programme ZTAFF affiche la pièce en cours telle que sa forme est décrite dans la matrice [G].

Le sous-programme ZTCOLL détermine si une collision a eu lieu. Si c'est le cas et qu'on est à moins de 2 lignes du haut de l'écran, la partie est finie.

Le sous-programme ZTHIDE efface la pièce en cours simplement en l'affichant avec un caractère 'vide', puis met à jour les coordonnées et la forme (qui peut avoir tourné).

Le sous-programme ZTPIE choisit la prochaine tuile, avec son caractère d'affichage présent dans Str2. La forme elle-même est codée dans la matrice [G] en donnant les coordonnées des points "pleins", en supplément avec le centre qui est réputé toujours plein (économie d'une ligne de matrice). On finit par donner la position d'apparition de la tuile, qui est toujours la même (vous pouvez changer cela si cela vous chante), afficher la pièce et rafraîchir le score et le nombre de tuiles arrivées. Ce dernier traitement n'est fait qu'à l'arrivée d'une nouvelle pièce, il est donc normal de le placer ici.


Fichiers

Voici le programme et ses sous-programmes pour chargement direct dans votre machine via le "GraphLink" : TI83-TITRIS.83p, TI83-ZTAFF.83p, TI83-ZTCOLL.83p, TI83-ZTHIDE.83p et TI83-ZTPIE.83p.

Notez que c'est une bonne pratique de donner des noms uniformes aux sous-programmes d'un même programme. Comme le tri des programmes est toujours en ordre alphabétique dans l'écran de lancement, on utilise "Z" comme première lettre afin de cacher les sous-programmes en fin de liste. Pour former un préfixe unique identifiant, j'ai ensuite pris la première lettre du programme principal : "T". Le reste du nom du sous-programme est un descriptif de sa fonction. Voilà !