Autorisation : Membre
Nb de messages : 178
Inscrit le : Dim 27 Mai 2012, 20:38
Posté le : Sam 16 Jui 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é.
---------------------- Il y a 10 types de personnes dans le monde : celles qui comprennent le binaire et celles qui ne le comprennent pas.
Autorisation : Membre
Nb de messages : 369
Inscrit le : Dim 13 Fév 2011, 14:17
Posté le : Sam 16 Jui 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 fausse
Autorisation : Membre
Nb de messages : 300
Inscrit le : Lun 14 Mai 2012, 18:51
Posté le : Dim 17 Jui 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.
Autorisation : Membre
Nb de messages : 178
Inscrit le : Dim 27 Mai 2012, 20:38
Posté le : Dim 17 Jui 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".
---------------------- Il y a 10 types de personnes dans le monde : celles qui comprennent le binaire et celles qui ne le comprennent pas.
Autorisation : Membre
Nb de messages : 300
Inscrit le : Lun 14 Mai 2012, 18:51
Posté le : Lun 18 Jui 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)
Autorisation : Membre
Nb de messages : 300
Inscrit le : Lun 14 Mai 2012, 18:51
Posté le : Lun 18 Jui 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
Autorisation : Membre
Nb de messages : 300
Inscrit le : Lun 14 Mai 2012, 18:51
Posté le : Lun 18 Jui 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!
Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Lun 18 Jui 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
---------------------- La la la ...
Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
Un problème de programmation ? Allez consulter ce tutoriel crée pour cela : TUTORIEL PROGRAMMATION
Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTIONEN VIDEO
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 18 Jui 2012, 18:47
Je voie que ça progresse : continuez comme ça !
Citer : The K
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.
Citer : The K
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.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Lun 18 Jui 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
---------------------- La la la ...
Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
Un problème de programmation ? Allez consulter ce tutoriel crée pour cela : TUTORIEL PROGRAMMATION
Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTIONEN VIDEO
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 18 Jui 2012, 21:53
D'accord.
Citer : manuel ti82statfr
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
Citer : manuel ti82stat
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
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 300
Inscrit le : Lun 14 Mai 2012, 18:51
Posté le : Mar 19 Jui 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
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
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.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Mar 19 Jui 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 ?
---------------------- La la la ...
Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
Un problème de programmation ? Allez consulter ce tutoriel crée pour cela : TUTORIEL PROGRAMMATION
Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTIONEN VIDEO
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 19 Jui 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.
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
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)