Poster un nouveau sujet Poster une réponse
Valeur incohérente : pourquoi?
Auteur Message
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mer 21 Mar 2012, 15:59   Citer 

Bonjour,
lors du premier tour du TI-Concours, en basic il a fallut faire un morpion.

J'ai essayé de faire une version avec IA, mais elle bug (ça encore, c'est un peu normal pour un programme non finit), mais surtout j'ai une variable (B) qui prend des valeurs qu'elle ne devrait pas pouvoir (d'après mes prédiction) prendre : quand on lance le mode 1 joueur, puis qu'on fait 1 puis (une fois que l'IA a jouée) 2 et enfin après que l'IA a joué [On] pour quitter, B vaut 3 allors que la seule commende qui devrait affecter B est un "For(B,0,2 " et ce même si au départ je donne une valeur quelconque à B.


TIC.83p :
Citer : "BASIC Code"
:{1,1 -> L2
:ClrHome
:Output(4,5,"MORPION
:Output(5,4,"PAR SANDRO
:Pause
:StoreGDB 1
:PlotsOff
:FnOff
:CoordOff
:GridOff
:AxesOff
:ZStandard
:Lbl D
:ClrDraw
:Horizontal 10/3
:Horizontal -10/3
:Vertical 10/3
:Vertical -10/3
:ClrHome
:Disp "7!8!9","-+-+-","4!5!6","-+-+-
:Pause "1!2!3
:DelVar IMenu("JOUEURS:","2 JOUEURS",2,"1 JOUEUR",1
:Lbl 1
:1 -> I
:Lbl 2
:DispGraph
:9 -> dim(L1
:Fill(1,L1
:0 -> T
:1 -> G
:2 -> J
:While T<9G
:¦ T+1 -> T
:¦ If not(I) or fPart(.5T
:¦ Then
:¦ ¦ 2+2fPart(.5T -> J
:¦ ¦ Repeat sum(K={92,93,94,82,83,84,72,73,74
:¦ ¦ ¦ getKey -> K
:¦ ¦ End
:¦ ¦ 10fPart(.1K-.1 -> X
:¦ ¦ iPart(.1K-6 -> Y
:¦ ¦ Else
:¦ ¦
:¦ ¦ 1 -> A
:¦ ¦ 2+2fPart(.5T -> K
:¦ ¦ For(C,1,2
:¦ ¦ ¦ If C=2
:¦ ¦ ¦ 5-K -> K
:¦ ¦ ¦ For(B,0,2
:¦ ¦ ¦ ¦ If randBin(1,L2(C))AL1(1+3B)L1(2+3B)L1(3+3B)=K²
:¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ DelVar A
:¦ ¦ ¦ ¦ ¦ If 1=L(1+3B
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ 1 -> X
:¦ ¦ ¦ ¦ ¦ ¦ B+1 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ ¦ If 1=L(2+3B
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ 2 -> X
:¦ ¦ ¦ ¦ ¦ ¦ B+1 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ ¦ If 1=L(3+3B
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ 3 -> X
:¦ ¦ ¦ ¦ ¦ ¦ B+1 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦
:¦ ¦ ¦ ¦ If randBin(1,L2(C))AL1(1+B)L1(4+B)L1(7+B)=K²
:¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ DelVar A
:¦ ¦ ¦ ¦ ¦ If 1=L(1+B
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ 1+B -> X
:¦ ¦ ¦ ¦ ¦ ¦ 1 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ ¦ If 1=L(4+B
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ B+1 -> X
:¦ ¦ ¦ ¦ ¦ ¦ 2 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ ¦ If 1=L(7+B
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ B+1 -> X
:¦ ¦ ¦ ¦ ¦ ¦ 3 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦
:¦ ¦ ¦ ¦ If randBin(1,L2(C))AL1(1)L1(5)L1(9)=K²
:¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ DelVar A
:¦ ¦ ¦ ¦ ¦ If 1=L(1
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ 1 -> X
:¦ ¦ ¦ ¦ ¦ ¦ 1 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ ¦ If 1=L(5
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ 2 -> X
:¦ ¦ ¦ ¦ ¦ ¦ 2 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ ¦ If 1=L(9
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ 3 -> X
:¦ ¦ ¦ ¦ ¦ ¦ 3 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ If randBin(1,L2(C))AL1(3)L1(5)L1(7)=K²
:¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ DelVar A
:¦ ¦ ¦ ¦ ¦ If 1=L(3
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ 3 -> X
:¦ ¦ ¦ ¦ ¦ ¦ 1 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ ¦ If 1=L(5
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ 2 -> X
:¦ ¦ ¦ ¦ ¦ ¦ 2 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ ¦ If 1=L(7
:¦ ¦ ¦ ¦ ¦ Then
:¦ ¦ ¦ ¦ ¦ ¦ 1 -> X
:¦ ¦ ¦ ¦ ¦ ¦ 3 -> Y
:¦ ¦ ¦ ¦ ¦ End
:¦ ¦ ¦ ¦ End
:¦ ¦ ¦ End
:¦ ¦ End
:¦ ¦
:¦ ¦ If A
:¦ ¦ Then
:¦ ¦ ¦ Repeat 1=L1(X+3Y-3
:¦ ¦ ¦ ¦ randInt(1,3 -> X
:¦ ¦ ¦ ¦ randInt(1,3 -> Y
:¦ ¦ ¦ End
:¦ ¦ End
:¦ ¦

:¦ End
:¦ Text(21Y-14,32X-19,sub("OX",1+2fPart(.5T),1
:¦ 2+2fPart(.5T -> L1(3Y+X-3
:¦ If sum((2+2fPart(.5T))^3={L1(1)L1(2)L1(3),L1(4)L1(5)L1(6),L1(7)L1(8)L1(9),L1(1)L1(4)L1(7),
L1(2)L1(5)L1(glasses.gif,L1(3)L1(6)L1(9),L1(1)L1(5)L1(9),L1(3)L1(5)L1(7
:¦ Then
:¦ ¦ DelVar GText(30,20,"JOUEUR ",2-2fPart(.5T)," GAGNE
:¦ ¦ Pause
:¦ End
:End
:If G
:Text(30,20,"MATCH NUL
:Menu("RECOMMENCER?","OUI",D,"NON",F
:Lbl F
:RecallGDB 1
:DelVar GDB1FnOn

Generated by SourceCoder, © 2005-2012 Cemetech



Merci d'avance pour votre aide
Sandro

EDIT : correction des bugs d'affichages

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Mer 21 Mar 2012, 16:52   Citer 

Euh ... j'ai un peu de mal.
Tu peux supprimer tous les size et autres /size stp ? ^^'

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL

Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mer 21 Mar 2012, 17:01   Citer 

désolé, c'est corrigé

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Mer 21 Mar 2012, 17:36   Citer 

Les randBin modifieraient-ils cette valeur ?
(mais il est vrai que dans l'algo ya pas de problème enfin ...)


Je suis cependant intrigué par ton morpion : (déso d'être a moitié hs ^^') comment fonctionne ton ia ? happy.gif
(les randbin ça m'connait pas trop trop ...)

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL

Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Mer 21 Mar 2012, 20:02   Citer 

C'est normal qu'à la fin de ton for elle vaille 3 car ton for augmente de 1 la valeur de b avant de passer à la suite.

Sangohan38

 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Mer 21 Mar 2012, 21:19   Citer 

Si je me trompe pas ça met B+1 dans X. Donc B n'est pas modifiée. (non ?)

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL

Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 21 Mar 2012, 21:25   Citer 

Non la solution est celle annoncée par Sangohan38.
B prends successivement les valeur 0,1,2 pendant l'execution de la boucle puis 3 après l'execution car les For effectuent l'incrément avant le test de sortie.

----------------------
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)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mer 21 Mar 2012, 21:26   Citer 

Merci, j'avais jamais remarqué cet aspect du for ( moodforlove.gif ).
Sinon, pour les randBin( , en les tilisant de la manière randBin(1,P) , on optient on a une propabilité de P d'optenir 1 et sinon on optient 0. Si on remplace le 1 par n, dans ce cas la TI répète n fois l'opération et affiche la somme des 0 et des 1. On peut rajouter un 3ème argument : le nombre indique la dimmention de la liste à remplir par ce procédé.

Sinon, le princincipe de l'IA est :
1) la TI vérifie si elle peut gagner (C=1) en testant pour chaque ligne, colone ou diagonale s'il ne manque qu'un emplacement à la TI pour avoir la ligne complete (si oui, elle s'y met)
2) elle fait la même chose mais en cherchant des emplacements adverses (pour empecher l'adversaire de gagner.

Merci beaucoup
Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 21 Mar 2012, 21:42   Citer 

Pourtant nous avons eu l'occasion de discuter des For plusieurs fois sur deux forum et un tchat. winkle.gif

Je m'attendait à une IA avec plus d'options encore sachant comment tu sais parfois me surprendre. tongue.gif
Je suis surpris par l'usage des ranBin(1,...=K²) sachant que la probabilité vaut 0 ou 1.

----------------------
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)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mer 21 Mar 2012, 21:51   Citer 

javais l'intention d'en mettre plus, mais j'ai essayé de régler le bug avant d'envisager de continuer.
Sinon, la paranthèse du randBin( est refermée AVANT les listes : mon idée était de soumettre le test à une propabilité (dans mon programme de test 100% (1er ligne du programme)) affin de pouvoir régler la difficulté. En plus, au morpion, sauf fautes d'innatention, il est impossible de perdre, il est donc nécessaire de programmer une "faiblesse" de l'IA, mais qui soit variable (pas qu'estion qu'une suite de mouvements mêne sistématiquement à une victoire pour l'humain.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 21 Mar 2012, 22:10   Citer 

Effectivement, j'avais mal lu la parenthèse et donc le randBin sert bien à générer un peu d'aléatoire commandé.

Ta logique d'élaboration d'IA me convient tout-à-fait. bigmouth.gif
(j'ai fait la même chose pour le jeu des 21 alumettes. Mon IA a trois niveaux.
-dans tous les niveaux, jouer un coup gagnant si possible à la fin
-en niveau facile, jeu aléatoire
-en niveau moyen, jouer soit un coup infaillible (si possible) soit jouer aléatoirement
-en niveau difficile, jouer un coup infaillible si possible sinon aléatoire
)

Pense à éditer ton premier post qui dérange la page à cause de la longue ligne de test.

----------------------
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)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
Poster un nouveau sujet Poster une réponse





  Page générée en 9 requêtes