Forum

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

Morpion - Page 1 / 3

samsam le 15/06/2012 à 16:13
Bonjour,
Je suis en train d'essayer de faire un morpion, pour l'instant il se joue uniquement à 2 sur la même calculatrice, il n'y a pas de mode contre la machine.
Il est un peu lent sur les conditions et emploie pas mal de variables.
Je voudrai savoir comment utiliser la fonction CapVar( pour jouer avec le câble.
Bien sur il peut être améliorer notamment un mode contre la calculatrice.


Code


3->dim(L1
3->dim(L2
3->dim(L3
Remplir(0,L1
Remplir(0,L2
Remplir(0,L3
EffVar [A]
{3,3->dim([A]
Disp [A]

While 1
Prompt X,Y
Input "joueur:",[thêta]
[thêta]->[A](Y,X

Matr>Liste([A],L1,L2,L3
somme(L1->D
somme(L2->E
somme(L3->F
L1(1)+L2(1)+L3(1->G
L1(2)+L2(2)+L3(3->H
L1(3)+L2(3)+L3(3->I
L1(1)+L2(2)+L3(3->J
L1(3)+L2(2)+L3(1->K


If D=12 ou E=12 ou F=12 ou G=12 ou H=12 ou I=12 ou J=12 ou K=12
Then
Disp "joueur 4 a gagne
Disp [A]
Stop
End

If D=3 ou E=3 ou F=3 ou G=3 ou H=3 ou I=3 ou J=3 ou K=3
Then
disp "joueur 1 a gagne
Disp [A]
Stop
End
End





Le jeu se fait avec les matrices vous l'aurez deviné.
Le joueur 4 n'est pas le joueur 2 par soucis d'égalité des lignes.
J'aurai pu ne pas utiliser les listes mais après 4h à les étudier il fallait que je les case quelque part godgrace.gif
F-BVXT le 15/06/2012 à 16:46
Pour utiliser CaptVar(, il faut faire : CaptVar(Variable.

Du coup, si par exemple la variable que tu souhaite récupérer est L1, alors il faut faire :
Code
CaptVar(L1

Ce qui copiera la valeur L1 de l'autre calculatrice vers ta valeur de L1. Par contre, je crois que l'autre calculette doit être du même modèle que le tient (TI 82-Stats et TI 82-Stats.fr sont incompatibles par exemple).
The K le 15/06/2012 à 16:57
Ou utiliser les matrices, ou utiliser les listes, mais pas les deux winkle.gif

Dans ton cas voila ce que ça pourrait donner avec les listes, si tu préfères

Code
EffListe L1,L2,L3
3->dim(L1
3->dim(L2
3->dim(L3
While 1
EffEcr
Disp L1,L2,L3
Prompt X,Y,J                        //J comme joueur ^^
If Y=1
J->L1(X
If Y=2
J->L2(X
If Y=3
J->L3(X
For(A,3,12,9
If A=somme(L1) ou somme(L2) ou somme(L3) ou L1(1)+L2(1)+L3(1) ou L1(2)+L2(2)+L3(3) ou L1(3)+L2(3)+L3(3) ou L1(1)+L2(2)+L3(3) ou L1(3)+L2(2)+L3(1
Then
Output(7,8,J
Pause "JOUEUR   A GAGNE
Stop
End
End
End


Après je ne suis pas le meilleur programmeur ici ... je pense que qqun d'autre va sortir qqchose de mieux que çahappy.gif
Samos le 15/06/2012 à 17:02
Je devrai mettre le programme à l'identique sur la 2ème calculatrice mais avec un Captvar( en début de boucle? Ou une fois le CaptVar( lancé la calculatrice continue à échanger la variable?
The K le 15/06/2012 à 17:13
Du manuel (faut penser a le regarder ça sert à ça un manuel ...)

Citation
CaptVar() : capte le contenu d’une variable stockée sur une autre TI-82 Stats.fr et le mémorise dans variable sur la TI-82 Stats.fr de destination. variable peut être un nombre, un terme de liste, un nom de liste, un élément de matrice, un nom de matrice, une chaîne, une variable Y= , une base de données de graphe ou une image.

CaptVar(variable)
Samos le 15/06/2012 à 18:07
ça je l'ai vu mais ça ne répond pas à ma question cry.gif
La variable est captée une fois pour toute ou elle est régulièrement modifiée?
F-BVXT le 15/06/2012 à 18:11
J'ai jamais utilisé cette fonction mais la variable doit certainement être modifié à chaque passage de boucle, donc il faut un CaptVar à chaque fois que tu as besoin des données de l'autre calculette.
The K le 15/06/2012 à 22:44
Euh oui desole j'me suis un peu raté dans mon post précédant désolé ^^'

Donc eh ben une fois qu'elle est captée elle ne l'est qu'une fois ... Il faut recapter la valeur à chaque fois qu'elle est actualisée / qu'on en a besoin.

Et attention à la commande EnvoiVar( qui n'existe pas notgood.gif
F-BVXT le 15/06/2012 à 22:54
Comme je n'ai jamais utilisé cette fonction et apparemment samsam non plus, je devance sa question : Ca veut dire qu'il va falloir alterner Prompt et CaptVar une boucle sur deux, c'est ça ?
The K le 15/06/2012 à 22:58
Je n'ai jamais utilisé CaptVar( non plus. Il va falloir que j'integre ça a mon propre morpion winkle.gif

Donc euh ben ... Dans la boucle while Tu captvares puis tu promptes. Ou l'inverse. Peu importe tant que c'est avant l'intégration de la dernière case jouer à la matrice/liste et la vérification winkle.gif
F-BVXT le 15/06/2012 à 23:09
Citation
Dans la boucle while Tu captvares puis tu promptes. Ou l'inverse. Peu importe tant que c'est avant l'intégration de la dernière case jouer à la matrice/liste et la vérification

Ah bon, moi j'aurai plutôt fait quelque chose comme :
Code

EffVar I     //cette ligne ne sert que si on veut que ce soit toujours le même           
              joueur qui commence
...
If partDéc(I/2)=0
Then
Prompt X,Y,J
Else
CaptVar(X
CaptVar(Y
CaptVar(J
End
...
I+1->I
The K le 15/06/2012 à 23:14
Selon ma soluce tu prend mon optimisation proposée plus haut et juste avant le prompt tu rajoutes "CaptVar(L1,L2,L3
F-BVXT le 15/06/2012 à 23:19
Ah oui dans ce cas d'accord. Mais du coup je crois que si l'adversaire a gagné, tu devra quand même jouer, et si tu met un "coup gagnant" (oui, je sais j'ai trop regardé Roland Garros glasses.gif ) à ton tour il y aura donc 2 gagnants.
The K le 15/06/2012 à 23:26
Tout ça sont des détails winkle.gif

Tout comme le fait que tu peux jouer deux fois de suite ou plus ^^

Tout comme sans les CaptVar tu peux jouer deux fois la même case.

Des détails qui ne demandent qu'à être réglés dans une version plus complète du morpion winkle.gif
F-BVXT le 15/06/2012 à 23:32
C'est vrai que ça serait mieux que J s'initialise automatiquement à chaque tour de boucle, au lieu d'avoir à le rentrer. Surtout que contre des mauvais perdant, tu risque de te retrouver avec 3 croix alignés sans même avoir pu jouer cupsmiley.gif
The K le 15/06/2012 à 23:48
Yep ... Bon bah mon projet des vac's ^^ améliorer mon KMorpion ... Peut être même y intégrer une IA !
F-BVXT le 16/06/2012 à 00:30
Ah oui, tient je viens de regarder ton Morpion et bah comme ça on est deux à avoir fait un morpion graphique glasses.gif
Le tient est quand même plus légé que le mien mais ne barre pas les symboles à la fin de la partie. godgrace.gif
Sinon, pour l'A.I (ah non c'est vrai l'I.A vu qu'on est sur le forum des 82 stats.fr cupsmiley.gif ) si tu arrive chapeau parce que mes rares essais n'ont pas été très concluent (adversaire invincible ou totalement stupide en fonction des versions clown.gif ).
The K le 16/06/2012 à 09:54
Oh ben je vais étudier les IA de Sandro / Linka / Persa et J'vais bien voir comment ils ont fait godgrace.gif
Samos le 16/06/2012 à 13:15
J'ai une petite idée pour empêcher les rageurs!
Ils pourront toujours placer leurs "pions" sur les autres mais au moin c'est chacun son tour!


Code

9->dim(L4
1->L4(1
4->L4(2
1->L4(3
4->L4(4     // ECT jusqu'a 9
...
0->M

While 1
1+M->M
Prompt X,Y
L4(M)->[A](Y,X




Bon c'est un peu lourd mais j'ai pas trouvé mieu.
snap le 16/06/2012 à 13:18
si tu veux raccourcir un peu :

Code
1->L4(1
4->L4(2
1->L4(3
4->L4(4     // ECT jusqu'a 9
...


devient

Code
Remplir(1, L4
For(Z,2,8,2
4 -> L4(Z
End