Autorisation : Membre
Nb de messages : 655
Inscrit le : Dim 13 Sep 2009, 8:27
Posté le : Mer 04 Nov 2009, 11:28
Voilà ma version :
Je la trouve assez rapide mais les blocs sont tous des carrés.
Dès que j'essaie de faire un tirage aléatoire entre deux formes le jeu ralentit énormément , je ne sais pas comment faire...
Code
EffDessin
0->Xmin
94->Xmax
0->Ymax
(-)62->Ymin
(-)1->;P
For(Z,0,1
Ligne(0+Z,0,0+Z,(-)62
Ligne(47+Z,0,47+Z,(-)62
Ligne(2,(-)1+Z,46,(-)1+Z
End
Ligne(2,(-)62,46,(-)62
Texte(3,60, «TETRIS !
Texte(30,58, « POINTS :
Lbl 1
P+1->P
Texte(30,85,P
21->X :(-)3->Y
Lbl 2
codeTouche->T
X->N :Y->O
If T=24 et pxl-Test((-)Y,X-2)=0
X-3->X
If T=26 et pxl-Test((-)Y,X+2)=0
X+3->X
If T=34 et pxl-Test((-)Y+5,X)=0
Y-6->Y
If pxl-Test((-)Y+2,X)=0
Y-3->Y
Pt-Off(N,O,2
Pt-On(X,Y,2
If pxl-Test((-)Y+2,X)=1:Then
0->[theta]
If Y=(-)6:Stop
For(Z,2,44,3
If pxl-Test((-)Y,Z)=0
1->[theta]:End
If [theta]=0:Goto 3
Goto 1:End
If T=105
Pause
If T=45:Stop
Goto 2
Lbl 3
(-)Y->A
Repeat A=6
For(Z,2,44,3
If pxl-Test(A-2,Z)=1:Then
Pt-On(Z+1,(-)A,2
Else
Pt-Off(Z+1,(-)A,2
End
End:A-3->A:End
Goto 1
Autorisation : Membre
Nb de messages : 853
Inscrit le : Sam 20 Jui 2009, 20:35
Posté le : Jeu 05 Nov 2009, 19:02
Eh,je viens de recopier,ça marche !
Pour moi ça peux nous sevir de base,si tu peux,faudrait que tu dises le rôle de chaque variable,on gagnerais du temps.
Juste un truc,pour le Text qui affiche les points faut remplacer le 85 par un 88.
Autorisation : Membre
Nb de messages : 14
Inscrit le : Mer 04 Nov 2009, 18:35
Posté le : Jeu 05 Nov 2009, 20:47
Sinon si ça vous intéresse, j'avais déjà vu quelque part (je ne sais plus où) un tétris dont les blocs sont simplement composés de la lettre 'L'.
Il faut avoir un brin d'imagination (faut penser à des tablettes de chocolat exposées à la lumière et dont seulement 2 côtés sont dans l'ombre)...
Ce qui donnerait quelque chose du genre
Code
L L
LLL L
L
LLL LLLLL LLL
LLLLLLLLLLL LLL
ça ne rend pas très bien avec le code, mais sur la calto, c'est flagrant.
Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Ven 06 Nov 2009, 7:17
Je l'avais télécharger ce tétris et il fonctionnait très mal: trop lent et avec des erreurs de copies (c'était un fichier 82p testé directement sous VTI).
Autorisation : Membre
Nb de messages : 853
Inscrit le : Sam 20 Jui 2009, 20:35
Posté le : Dim 08 Nov 2009, 18:54
Voilà,je suis parti du programme de sypotu que j'ai modifié pour que le jeu soit plus rapide.Maintenant,ce sont des objets entiers qui tombent,reste a trouver un algorithme qui permettrai de faire pivoter les objets.
Code
:EffDessin
:CoordRect:QuadNAff:AxesNAff
:0->Xmin:0->Ymax:94->Xmax:-62->Ymin
:For(Z,0,1
:Ligne(Z,0,Z,-62
:Ligne(47+Z,0,47+Z,-62
:End
:Ligne(0,-62,46,-62
:Lbl A
:0->D:3->E:3->F:3->G:3->I:0->J:3->H
:entAléat(1,5->C
:If C=2
:Goto 2
:If C=3
:Goto 3
:If C=4
:Goto 4
:If C=5
:Goto 5
:Lbl B
:21->X:-3->Y
:For(Z,0,9E99
:X->N:Y->O
:Y-3->Y
:codeTouch->T
:X-3(T=24)+3(T=26)->X
:If pxl-Test(-Y+1,X)=1 ou pxl-Test(-Y-J+1,X+I)=1
:N->X
:Pt-Off(N,O,2
:Pt-Off(N+I,O+J,2
:Pt-Off(N+D,O+E,2
:Pt-Off(N+F,O+G,2
:Pt-On(X,Y,2
:Pt-On(X+I,Y+J,2
:Pt-On(X+D,Y+E,2
:Pt-On(X+F,Y+G,2
:For(Z,0,H,3
:If C=5 et Z=H et pxl-Test(-Y-J+2,I)=1
:Goto C
:If pxl-Test(-Y+2,X+Z)=1
:Goto C
:End
:End
:Lbl C
:If Y[> ou =]-6
:Stop
:0->A
:For(Z,2,44,3
:A+pxl-Test(-Y+1,Z->A
:End
:If A<15
:Goto A
:-Y->A
:Repeat A[< ou =]6
:For(Z,3,45,3
:If pxl-Test(A-2,Z)=1
:Pt-On(Z,-A,2
:If pxl-Test(A-2,Z)=0
:Pt-Off(Z,-A,2
:End
:A-3->A
:End
:Goto A
:Lbl 2
:6->I:3->D:0->E:6->H
:Goto B
:Lbl 3
:0->F:6->G
:Goto B
:Lbl 4
:9->I:6->D:0->E:0->G:9->H
:Goto B
:Lbl 5
:6->I:3->J:3->D:0->E:6->H
:Goto B
J'ai testé et j'ai pas trouvé de bug mais ça ne veut pas dire qu'il n'y en a pas.
Pour les variables,j'ai rajouté:
-les couples (D;E) et (F;G) qui sont les coordonnées par rapport a X et a Y des points 3 et 4 de chaque objet.
-Le couple (I;J):les coordonnées du point 2 de chaque objet qui est toujours le point le plus à droite.
-H:le nombre de pixels de toutes les faces inférieures de chaque objet (sauf les deux pixels a l'extrème limite.
-C:Le type d'objet
C=1 c'est le carré
C=2 c'est le triangle
C=3 c'est le "L"
C=4 c'est la barre
C=5 c'est le "carré décalé"
Autorisation : Membre
Nb de messages : 853
Inscrit le : Sam 20 Jui 2009, 20:35
Posté le : Lun 09 Nov 2009, 18:50
Ou pas,j'ai oublié de mettre le "L" à l'envers,il faudrait le rajouter pour C=6,j'ai pas mis non plus le "carré décalé" vers la gauche.
Et du coup,comme le programme fait le pixel-Test de tous les points en dessous de Y,X et que pour le carré décalé la base de l'objet est plus basse que Y,le pixel-Test est effectué dans l'objet et pas à sa base,il faudrait rajouter 3 variables qui permettraient de gérer le décalage.
Enfin je me comprends,c'est difficile à expliquer,tu me comprendras quand tu auras étudié le programme.
Autorisation : Membre
Nb de messages : 655
Inscrit le : Dim 13 Sep 2009, 8:27
Posté le : Mer 11 Nov 2009, 8:17
Alors
=/= c'est le signe différent de
et avec les lbl ça donne :
-à rajouter entre les Pt-Off et les Pt-On :
Code
If T[différent de]25 ou C=1
Goto D
I->Z:J->I:Z->J
D->Z:E->D:Z->E
F->Z:G->F:Z->G
If C[différent de]2 et C[différent de]3
Goto D
F->Z:I->F:Z->I
G->Z:J->G:Z->J
Lbl D
La rotation se fait bien mais il arrive un moment où le bloc de coordonnées (X;Y) se retrouve au dessus d'un autre bloc,du coup le pxl-Test est égal à 1 et l'objet s'arrête tout seul dans le vide.
Alors Casse-tête:
soit un point de coordonnées (X;Y) et un point de coordonnées (X+I;Y+J) si X<X+I ou Y<Y+J,il faut que les deux points s'inversent autrement dit X devient X+I et X+I devient X,idem avec Y et Y+J.
J'avais donc mis dans un label le code suivant:
Code
:X+I->Z
:X->¤
:Z-¤->I
:Z->X
Mais j'ai pas eu le temps de finir,ni de reprogrammer depuis avant-hier.
PS:Après il faut rajouter un Lbl pour redéfinir les variables I,J,D,E,... pour chaque pièce lorsqu'il y a rotation puisqu'elle n'a plus le même nombre de blocs sur son "pied" et que ce pied change de forme.
PS2:J'ai aussi rajouté les deux types d'objets qui manquent et les trois variables K,L,M,qui permettent de faire le pixel-Test des points qui sont sous le pied quelque soit sa forme.
D'ailleurs voilà mon code (pas fini et sans l'inversion des points parce que j'ai eu piti problème):
Code
EffDessin
CoordRect:QuadNAff:AxesNAff
0üXmin:0üYmax:94üXmax:ú62üYmin
For(Z,0,1
Ligne(Z,0,Z,ú62
Ligne(47+Z,0,47+Z,ú62
End
Ligne(0,ú62,46,ú62
Lbl A
0üD:3üE:3üF:3üG:3üI:0üJ:3üH:ú1üK:ú1üL:0üM
entAl–at(1,7üC
If C=2
Goto 2
If C=3
Goto 3
If C=4
Goto 4
If C=5
Goto 5
If C=6
Goto 6
If C=7
Goto 7
Lbl B
21üX:ú3üY
For(Z,0,9û99
XüN:YüO
Y-3üY
codeTouch(üT
X-3(T=24)+3(T=26)üX
If pxl-Test(úY+2,X)=1 ou pxl-Test(úY-J+2,X+I)=1
NüX
Pt-NAff(N,O,2
Pt-NAff(N+I,O+J,2
Pt-NAff(N+D,O+E,2
Pt-NAff(N+F,O+G,2
If Tø25
Goto B4
IüZ:úJüI:ZüJ
DüZ:úEüD:ZüE
FüZ:úGüF:ZüG
Goto B4
If C=2
Goto E2
If C=3
Goto E3
If C=4
Goto E4
If C=5
Goto E5
If C=6
Goto E6
If C=7
Goto E7
Lbl B4
Pt-Aff(X,Y,2
Pt-Aff(X+I,Y+J,2
Pt-Aff(X+D,Y+E,2
Pt-Aff(X+F,Y+G,2
For(Z,0,H,3
If ZùK et Z÷L et pxl-Test(úY+2,X+Z)=1
Goto C
If ZùK et Z÷L
End
If pxl-Test(úY+2+M,X+Z)=1
Goto C
End
End
Lbl C
If Yùú6
Stop
0üA
For(Z,2,44,3
A+pxl-Test(úY+1,ZüA
End
If A<15
Goto A úYüA
Repeat A÷6
For(Z,3,45,3
If pxl-Test(A-2,Z)=1
Pt-Aff(Z,úA,2
If pxl-Test(A-2,Z)=0
Pt-NAff(Z,úA,2
End
A-3üA
End
Goto A
Lbl 2
6üI:3üD:0üE:6üH
Goto B
Lbl 3
0üF:6üG:6üH
Goto B
Lbl 4
9üI:6üD:0üE:0üG:9üH
Goto B
Lbl 5
3üD:6üG
Goto B
Lbl 6
6üI:3üJ:3üD:0üE:6üH:0üK:4üL:ú3üM
Goto B
Lbl 7
6üI:ú3üJ:3üD:0üE:ú3üG:6üH:0üK:2üL:3üM
Goto B
Lbl E2
Lbl E3
Lbl E4
Lbl E5
Lbl E6
Lbl E7
Désolé j'ai pas le temps de le rendre plus lisible ce soir.
Autorisation : Membre
Nb de messages : 655
Inscrit le : Dim 13 Sep 2009, 8:27
Posté le : Ven 13 Nov 2009, 16:49
J'ai testé avec les nouvelles formes et les variables K,L,M ça marche plutôt bien.
Par contre la nouvelle rotation ne marche pas, on se retrouve avec un bloc en 2 partie
Je me demande si il est vraiment utile dde faire une rotation complette...Qu'en pensez vous ?
Voici la liste des blocs avec leur rotation non complette :
Autorisation : Membre
Nb de messages : 853
Inscrit le : Sam 20 Jui 2009, 20:35
Posté le : Ven 13 Nov 2009, 19:52
Oui c'est vrai,ma rotation bug pour certains objets,je suis en train d'y réfléchir.
Le problème c'est que la rotation incomplète ne permet pas d'avoir des pièces comme
Code
OOO
O
OO
O
O
Après si on peut reprendre ton système en trouvant un moyen de continuer la rotation je suis pour.Au début je l'avais fait avec deux touches mais c'était le bordel j'ai arrêté,faudrai peut-être y réfléchir