Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Morpion - Page 2 / 3
F-BVXT le 16/06/2012 à 13:28
Oui, sinon tu prend ce que j'ai mis plus haut en donnant directement la valeur de J :
Code
EffVar I //cette ligne ne sert que si on veut que ce soit toujours le même
joueur qui commence
...
If non(partDéc(I/2 //ca équivaut à si I est pair
Then
Prompt X,Y
4->J
Else
CaptVar(X
CaptVar(Y
1->J
End
...
I+1->I //I sera donc pair un coup sur deux
Ou, comme si J est égale à 1, J=1 renvoie 1, si J est égale à 4, J=4 renvoie 1 et dans les cas échéant ça renvoie 0, on peut faire ça :
Code
4->J
...
If J=4
Then
Prompt X,Y
Else
CaptVar(X
CaptVar(Y
End
...
4(J=1)+(J=4->J
[/code]
Voilà, j'espère que ça t'as aidé.
snap le 16/06/2012 à 13:33
AAAAAhhhhh!!!!
Code
If partDéc(I/2=0 //ca équivaut à si I est pair
Erreur monumentale
faut fermer parenthèses avant le =0
ou alors tout simplement
F-BVXT le 16/06/2012 à 13:36
Ah oui merci de me le faire remarquer j'ai Edit mon message. De toute façon ça aurait faire une belle Erreur Syntaxe à cette ligne.

snap le 16/06/2012 à 13:40
Non, la condition aurait juste toujours été fausse car que I/2=0 soit vrai ou faux, sa aurait donné 1 ou 0 or il n'y a pas de partie déciimale à 1 et 0 donc condition toujours fausseSamos le 17/06/2012 à 19:37
Il est presque au point grâce à vos conseils mais il manque un petit quelque chose...Un algorithme qui empêcherai de jouer 2 fois sur la même case!!
J'ai essayé quelque chose mais il fonctionne que la première fois puis il se fait oublier
Code
9->dim(L4
Remplir(1,L4
For(M,2,8,2
4->L4(M
End
27->dim(L4
EffVar M
{3,3->dim([A]
disp [A]
While 1
M+1->M
Repeat X != L4(10) ou L4(11) ou L4(12) ou L4(13) ou L4(14) ou L4(15) ou L4(16) L4(17) ou L4(18) et Y != L4(19) ou L4(20) ou L4(21) ou L4(22) ou L4(23) ou L4(24) ou L4(25) ou L4(26) ou L4(27)
Prompt X,Y
End
X->L4(M+9
Y->L4(M+18 //Après c'est la fin du premier programme
Je pense que le problème vient de la condition mais je n'en suis pas sur.
Merci d'avance.
F-BVXT le 17/06/2012 à 22:20
Code
Repeat X != L4(10) ou L4(11) ou L4(12) ou L4(13) ou L4(14) ou L4(15) ou L4(16) L4(17) ou L4(18) et Y != L4(19) ou L4(20) ou L4(21) ou L4(22) ou L4(23) ou L4(24) ou L4(25) ou L4(26) ou L4(27)
Ca serait pas plutôt des "et" à la place des "ou" ?
Sinon, si on es à la fin du programme, ta boucle Repeat se termine bien mais il n'y a pas de End pour le "While 1".
Samos le 18/06/2012 à 10:39
Disons que j'ai remplacé les "ou" par les "et" et la c'est tout le contraire, ça répète tout le temps même à la première valeur
Code
Repeat X != L4(10) et L4(11) et L4(12) et L4(13) et L4(14) et L4(15) et L4(16) et L4(17) et L4(18) ou Y != L4(19) et L4(20) et L4(21) et L4(22) et L4(23) et L4(24) et L4(25) et L4(26) et L4(27)
ça devient enervant

snap le 18/06/2012 à 11:08
ton erreur vient du fait que
Code
X != L4(10) ou L4(11)
veut dire si X pas égal à L4(10) ou L4(11) != 0
Il faut toujours remettre X!= si tu veux que sa marche
Ou alors tout simplement :
Code
Repeat min(X != {L4(10),L4(11),L4(12),L4(13),L4(14),L4(15),L4(16),L4(17),L4(18)}) et min(Y != {L4(19),L4(20),L4(21),L4(22),L4(23),L4(24),L4(25),L4(26),L4(27)
Samos le 18/06/2012 à 11:53
Ta méthode fonctionne mais il reste un petit hic, ou alors j'ai mal recopié mais quand on entre 3,3 et 1,1 on ne peu plus utiliser des coordonnées qui comportent 3 et 1 c'est assez embêtant
EDIT: Désolé ta méthode était bonne j'avais juste inversé X et Y
snap le 18/06/2012 à 11:58
Code
Repeat min(X != {L4(10),L4(11),L4(12),L4(13),L4(14),L4(15),L4(16),L4(17),L4(18)}) ET min(Y != {L4(19),L4(20),L4(21),L4(22),L4(23),L4(24),L4(25),L4(26),L4(27)
Ta bien mit le "et"? Si ta mis un "ou" sa fera ce que ta dit. Sinon je sais pas d'ou sa vient
PS : Regarde si ta bien fermer les parenthèses

Samos le 18/06/2012 à 14:33
Je crois que je vais devoir miser sur l'honnêteté de l'adversaire
De toute façon je suis même pas sur de pouvoir jouer contre un adversaire

Merci à tous pour votre aide!
The K le 18/06/2012 à 14:49
Ben sinon quand une case de liste / matrice est remplie par le morpion il suffit de dire "si cette case est remplie et qu'on réappuie dessus ça ne fait rien". Ou "remplir cette case si et seulement si elle n'est pas remplie".
Jette un coup d'oeil à mon morpion si tu veux voir comment j'ai fait

Samos le 18/06/2012 à 15:20
Pourquoi je suis allé me casser la tête avec tout ça
Code
Repeat non([A](Y,X
Prompt X,Y
End
Vachement plus léger

linkakro le 18/06/2012 à 18:47
Je voie que ça progresse : continuez comme ça !
The K a écrit :
Oh ben je vais étudier les IA de Sandro / Linka / Persa et J'vais bien voir comment ils ont fait 
Sachez que je n'ai pas écrit d'IA contrairement à persalteas et sandro.
Consultez le site du TI-Concours-2012 pour avoir un maximum d'exemples de morpions dont quelques uns contenant une IA.
The K a écrit :
Et attention à la commande EnvoiVar( qui n'existe pas 
Bien sûr que si cela existe ! utilise la fonction "Envoi()"
EDIT: d'après les messages qui suivent, seule CaptVar() permet d'échanger des données pour ce jeu.
The K le 18/06/2012 à 20:50
Je sais ce que je dis linka ^^
On ne me piègera pas sur le manuel ! La commande envoi( existe bel et bien mais elle ne permet pas d'envoyer des données à une autre TI ... Elle était ense servir au départ avec du matériel d'acquisition de données scientifiques je crois (capteurs et autres).
La commande EnvoiVar, qui permettait d'envoyer des données à une autre Ti n'existe par contre pas.
Oh et merci pour le ti concours 2012 je n'y avais pas pense

linkakro le 18/06/2012 à 21:53
D'accord.
manuel ti82statfr a écrit :
0: CaptVar( Capte une variable d’une autre TI-82 STATS
A: Capt( Capte une variable de CBL ou CBR
B: Envoi( Envoie une variable à CBL ou CBR
manuel ti82stat a écrit :
0: GetCalc( Capte une variable d’une autre TI-82 STATS
A: Get( Capte une variable de CBL ou CBR
B: Send( Envoie une variable à CBL ou CBR
Samos le 19/06/2012 à 16:17
Bon j'ai pris la peine d'essayer de le mettre en un seul morceau malgré les autres morpions qui ont l'air meilleurs! D'ailleurs je doute que beaucoup de personnes en veuillent (on ne sait jamais!)
Je préfère le mode matrice/liste dsl the K
Il prend 421 octets de mémoire et 1000 en plus avec les variables
Code
3->dim(L1
3->dim(L2
3->dim(L3
Remplir(0,L1
Remplir(0,L2
Remplir(0,L3
EffVar [A]
9->dim(L4
Remplir(1,L4
For(M,2,8,2
4->L4(M
End
27->dim(L4
EffVar M
{3,3->dim([A]
Disp [A]
While 1
M+1->M
If partDec(M/2)=0 // Je n'ai pas encore 2 calculatrices mais sur l'autre
Then // ça sera
If partDec(M/2)=0
CaptVar(X Then
CaptVar(Y Repeat non([A](X,Y
Else Prompt X,Y
Repeat non([A](X,Y End
Else
Prompt X,Y CaptVar(Y
End CaptVar(X
End
End
X->L4(M+9
Y->L4(M+8
L4(M->[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(2->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 2 a gagne
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
Stop
End
Disp [A]
End
Désolé pour les lignes sautées et les espaces j'ai eu un peu de mal avec la mise en page.
En parlant de 2 calculatrices, je suis à la recherche d'une TI qui a une bonne mémoire et qui est assez rapide, j'ai deja une 82stats.fr (qui a plus beaucoup de mémoire

) (ou l'on peu programmer bien-sur ) si vous avez quelques conseils à ce sujet

linkakro le 19/06/2012 à 17:39
82stat: os 1.10001
82statfr: os 1.11fr7 , carte mère similaire à une 83plus
83: os 1.10
6MHz
28ko ram
abscence de mémoire d'archive.
83plus : ram 25ko, flash 160ko , os1.12 , 6MHz
84plus : os2.43
84pocket : os2.55mp
ram 25 ko , flash 480ko , 15MHz , horloge intégrée
83plus-SE : os 1.19 (pas d'horloge)
84plus-SE : os 2.43/2.55mp , horloge intégrée
ram 25 ko , flash 1540ko , 15MHz
-----
La ti84plusSilverEdition est le meilleur choix mémoire (1540ko) options et vitesse (15MHz) des Z80 (76 à 86).
La ti84pocketfr est une miniature de 84plus(NON-SE). Elle dispose du même système mais de seulement 480ko. (même vitesse)
La ti89 (titanium ?) gère le calcul formel et des choses que j'ignore. Elle SEMBLE plus accessible que les autres 68k.
=======================
J'ai écrit un programme conçu pour fonctionner en liaison de deux calculatrices. C'est en quelques sorte une continuité de mon ancien morpion.
Cependant il BLOQUE et je ne trouve pas pourquoi.
Code
0identity(3ü (
) [A] // matrice carrée et nulle
2ü (
) X
2ü (
) Y
ClrHome
Output(4,X,"*
Output(Y,4,"*
0ü (
) A // permettra de compter les coups
Menu("","J1",1,"J2",2
Lbl 2
Ans+1
Lbl 1
Ans+1ü (
) I // chaque calculatrice possède un numéro
1ü (
) J // numéro du joueu actif
If I=1
Goto 5 // le joueu 1 commence
Lbl 3
If A=9 // au dernier tour, cela permet de détecter le match nul
Goto 6
Repeat J=I or J>2 // retient le joueu inactif
Pause
GetCalc(J
End
GetCalc([A]
GetCalc(X
GetCalc(Y
Output(Y,X,3-I
GetCalc(A
If J=4
Goto 6
If J=3
Goto 7
Lbl 5
Repeat K=105 and not([A](Y,X
Repeat K
getKeyü (
) K
End
Output(4,X," "
Output(Y,4," "
max(1,min(3,X-(K=24)+(K=26ü (
) X
max(1,min(3,Y-(K=25)+(K=34ü (
) Y
Output(4,X,"*
Output(Y,4,"*
End
Iü (
) [A](Y,X // stock du coup
Output(Y,X,I
A+1ü (
) A // compte des coups
3-Jü (
) J // changement de joueur
If min(I^3-{[A](Y,1)[A](Y,2)[A](Y,3),[A](1,X)[A](2,X)[A](3,X),[A](1,1)[A](2,2)[A](3,3),[A](1,3)[A](2,2)[A](3,1
Goto 3
3ü (
) J
Output(5,1,"GAGNE
Stop
Lbl 6
4ü (
) J
Output(5,1,"MATCH NUL
Stop
Lbl 7
Output(5,1,"PERDU
Je l'ai testé sous émulateur en m'assurant bien que les calcultatrices sont virtuellement reliées.
The K le 19/06/2012 à 19:25
Parce que tu n'as pas défini Ans au début du programme ?
Ou parce que ta condition avec min( semble avoir un bout manquant ?
Ou je raconte des bêtises ?

linkakro le 19/06/2012 à 20:31
Non.
Par contre je viens de trouver qu'une Pause est passée lorsque l'autre calculatrice prélève quelque chose, ce qui un gros problème.
Cela fait tourner en rond les boucles de blocages.
EDIT : j'ai trouvé une solution.
Il faut une Pause pour chaque transfert.
Dans ce programme, ne pressez jamais la touche "entrer" (sauf dans le menu initial).
Utilisez 2nde et les flèches pour jouer.
Les graphismes sont bas de gamme mais peuvent être améliorés.
Code
0identity(3ü (
) [A]
2ü (
) X
2ü (
) Y
ClrHome
0ü (
) J
0ü (
) A
Menu("","J1",1,"J2",2
Lbl 2
Ans+1
Lbl 1
Ans+1ü (
) I
If I=1
Goto 5
Goto 4
Lbl 3
If A=9
Goto 6
GetCalc(J
Pause
Pause
Pause
Pause
Pause
Lbl 4
Pause
GetCalc(X
GetCalc(Y
GetCalc(J
Output(Y,X,3-I
If J=4
Goto 6
If J=3
Goto 7
GetCalc([A]
GetCalc(A
Lbl 5
Output(4,X,"*
Output(Y,4,"*
Repeat K=21 and not([A](Y,X
Repeat K
getKeyü (
) K
End
Output(4,X," "
Output(Y,4," "
max(1,min(3,X-(K=24)+(K=26ü (
) X
max(1,min(3,Y-(K=25)+(K=34ü (
) Y
Output(4,X,"*
Output(Y,4,"*
End
Output(4,X," "
Output(Y,4," "
Iü (
) [A](Y,X
Output(Y,X,I
A+1ü (
) A
If min(I^3-{[A](Y,1)[A](Y,2)[A](Y,3),[A](1,X)[A](2,X)[A](3,X),[A](1,1)[A](2,2)[A](3,3),[A](1,3)[A](2,2)[A](3,1
Goto 3
GetCalc(J
3ü (
) J
Output(5,1,"GAGNE
Stop
Lbl 6
GetCalc(J
4ü (
) J
Output(5,1,"MATCH NUL
Stop
Lbl 7
Output(5,1,"PERDU
Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.