Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 1516
Réponses : 7
Type : discussion
Etat : réponses autorisées

Puissance 4 leger ! graphique

Programaths le 18/07/2011 à 16:18
Voici un ptit puissance 4 graphique, un ptit bug sur la dernière colones, quand le jeux est plein il le dis, par contre j'aimerais y inclure une vérification de victoire, voici le code:

Code

Lbl JP
EffDessin
1ü ( ) Xmin
1ü ( ) Ymin
94ü ( ) Xmax
63ü ( ) Ymax
For(F,1,9
Ligne(1,65-F*8,49,65-F*8
Ligne(F*6-5,57,F*6-5,1
End
"                                             ü ( ) Cha ne1
Texte(0,2,"V
8ü ( ) dim(L
Remplir(9,L
1ü ( ) D
ú ( ) 1ü ( ) X
0ü ( ) G
entAl–at(1,2)ü ( ) J
Lbl B1
codeTouch(
Texte(0,0,Cha ne1+"     
Texte(25,52,"Player: ",J

Lbl B2
Texte(0,(X+D)*6+2,"V
codeTouch(ü ( ) K
If K
Texte(0,(X+D)*6+2,"   
If K=24
D-1ü ( ) D
If non(D
8ü ( ) D
If K=26
D+1ü ( ) D
If D=9
1ü ( ) D
If K=45:Stop
If (Kø21)(Kø105)(Kø34)
Goto B2
If L(D)=2
Goto B2
Texte(0,(X+D)*6+2,"V
L(D)ü ( ) R
Lbl PP
Dü ( ) B
If J=2
Goto CE
Ligne((D+X)*6+4,66-(L(D)-1)*8,(D+X)*6+2,68-(L(D)-1)*8
Ligne((D+X)*6+4,66-(L(D)-1)*8,(D+X)*6+6,68-(L(D)-1)*8
Ligne((D+X)*6+4,72-(L(D)-1)*8,(D+X)*6+2,70-(L(D)-1)*8
Ligne((D+X)*6+4,72-(L(D)-1)*8,(D+X)*6+6,70-(L(D)-1)*8
L(D)-1ü ( ) L(D)
Goto TS
Lbl CE
Texte((L(B)-1)*8-9,(X+B)*6+2,"O
Ligne((X+B)*6+4,66-(L(B)-1)*8,(X+B)*6+4,72-(L(B)-1)*8
Ligne((X+B)*6+2,68-(L(B)-1)*8,(X+B)*6+2,70-(L(B)-1)*8
Ligne((X+B)*6+6,68-(L(B)-1)*8,(X+B)*6+6,70-(L(B)-1)*8
L(B)-1ü ( ) L(B)
Lbl TS
G+1ü ( ) G
If G=56
Then
3ü ( ) P
Goto DD
End
J-(J=2)+(J=1ü ( ) J
Goto B1
Lbl DD
If P=3:Texte(0,0,"--- FULL ---

calcugeek le 31/07/2011 à 16:17
J'ai feuilleté comme ça ton prog et je peux te signaler que
Citation


" üCha ne1


Code

Peut s'écrire
:For(A,1,45
:chaine1+" "->chaine1
:end


Sinon je testerai quand j'aurai le temps mais ça me parait assez court (donc fluide) pour un puissance 4 en graphique. Bravo! godgrace.gif
Persalteas le 01/08/2011 à 13:31
Il est ou, le bug ?
Programaths le 02/08/2011 à 00:39
IL y en a plus :p

merci d'avoir test le programme, je voudrai y inclure une vérification de victoire (ça prendra plus d'octet mais bon winkle.gif )
Persalteas le 02/08/2011 à 09:04
Bravo il est déjà bien programmé.

On peut encore optimiser un ou deux petits trucs si tu veux...
linkakro le 02/08/2011 à 20:16
C'est très bien à première vue.

Mais mon curseur et les pions sont décalés de deux colonnes vers la droite par rapport à la grille malgré un copié/collé du programme.
Je cherche mon erreur (en espérant que ce soit bien la mienne)

Quand cela marchera, je continuerai à l'étudier pour voir quoi faire de plus.

EDIT : j'ai trouvé ce que j'avais mal copié. Maintenant j'écris une amélioration.
linkakro le 05/08/2011 à 20:01
Je n'ai pas compris tous les enjeux de certains éléments.
J'ai réécrit des choses.

Et surtout j'ai écrit une vérification de victoire bigmouth.gif , sans matrice glasses.gif
La méthode me trottait dans la tête depuis longtemps.
Je ne connais pas plus rapide comme test de victoire mais ce serait bien de l'accélérer encore plus.

Les touches bas, 2nde et entrer permettent toutes de valider un coup. (ça n'a pas changé mais personne ne l'a dit)

Code
ClrDraw
1->Xmin
1->Ymin
95->Xmax
63->Ymax
For(F,1,9
Line(1,65-F8,49,65-F8
Line(F6-5,57,F6-5,1
End
Text(0,2,"V
8->dim(L1
Fill(7,L1
1->D
0->G
randInt(1,2)->J

Lbl J
getKey
Text(25,52,"PLAYER : ",J
Text(0,D6-4,"V
Repeat sum(K={105,34,21,45,24,26
getKey->K
End
Text(0,D6-4,"   "
D-(K=24)+(K=26->D
If not(D
8->D
If D=9
1->D
If K=45:Stop
If K-105 and K-21 and K-34
Goto J
If not(L1(D
Goto J
L1(D)-1->L1(D
8L1(D->R
If J=1
Then
Line(D6-2,50-R,D6-4,52-R
Line(D6-2,50-R,D6,52-R
Line(D6-2,56-R,D6-4,54-R
Line(D6-2,56-R,D6,54-R
Else
Text(R+7,D6-4,"O
Line(D6-2,50-R,D6-2,56-R
Line(D6-4,52-R,D6-4,54-R
Line(D6,52-R,D6,54-R
End
G+1->G
If G=56
Goto F

//// début de la partie test victoire (facultative)

DelVar B
1->Z
For(W,-3,3
D6-3+6W->X
R+7+8W->Y
If X>0 and Y>0 and X<50 and Y<60
Then
pxl-Test(Y,X)+pxl-Test(Y+1,X->C
If C-J and W>0
DelVar Z
Z+B->B
If C-J and W<1
DelVar B
End
End
If B>3
Goto Z

DelVar B
1->Z
For(W,-3,3
D6-3-6W->X
R+7+8W->Y
If X>0 and Y>0 and X<50 and Y<60
Then
pxl-Test(Y,X)+pxl-Test(Y+1,X->C
If C-J and W>0
DelVar Z
Z+B->B
If C-J and W<1
DelVar B
End
End
If B>3
Goto Z

D6-3->X
DelVar B
1->Z
For(W,0,3
R+7+8W->Y
If Y>0 and Y<60
Then
pxl-Test(Y,X)+pxl-Test(Y+1,X->C
If C-J
DelVar Z
Z+B->B
End
End
If B>3
Goto Z

R+7->Y
DelVar B
1->Z
For(W,-3,3
D6-3+6W->X
If X>0 and X<50
Then
pxl-Test(Y,X)+pxl-Test(Y+1,X->C
If C-J and W>0
DelVar Z
Z+B->B
If C-J and W<1
DelVar B
End
End
If B>3
Goto Z

//// fin de la partie test victoire

3-J->J
Goto J
Lbl F
Text(0,0,"---- FULL ----
DelVar J
Lbl Z
If J
Text(31,52,"WIN
L'idée de base est de tester les cases à proximité des pions joués plutôt que de tester toute la grille à chaque fois.
L'idée secondaire est d'utiliser des pixel-Test à la place des matrices.

EDIT: avec du recul quelques mois après je me demande si un code si long en vaut la chandelle. Probablement plus long qu'un test basique mais plus rapide.
Programaths le 05/08/2011 à 20:13
Bravo ! happy.gif très court en effet.
Sans matrice je ne croyais pas ça possible ! l'impossible est fait glasses.gif