Autorisation : Membre
Nb de messages : 6
Inscrit le : Lun 16 Avr 2012, 20:20
Posté le : Mar 17 Avr 2012, 1:03
Salut à tous ! Tout d'abord je suis nouveau sur ce forum et je tiens à me présenter .
Je suis actuellement en classe de 2nd et donc j'ai acquis une merveilleuse calculatrice graphique . Le modèle -> Ti-82 Stat.fr
J'ai comme passion la programmation (tien sa tombe bien ) et j'ai donc appris le Ti basic sur le site du zéro.
(Au passage j'ai commencer à apprendre le C ainsi que le HTML/CSS mais bon passons ).
Je fais appel au dieux du TI Basic car c'est vacance je me suis lancer dans la prog d'un morpion.
Il est fonctionel, mais : il est lourd (~2100 octet), j'ai essayer de faire un IA mais, il lui manque le I et je doute pour ma condition de victoire (biensur, je ne l'ai pas écrite pour l'IA vu qu'il ne gagneras jamais ).
Bref, mon programme pourais être opptimiser, voir améliorer .
Fini les explication voici mon code .
:Lbl Ø
:4->A:7->B
:While 1
:codeTouche->K
:Output(A,B,"X
:If K=24 et B>3
:Then
:Output(A,B," "
:If I>0:Then
:If [A](A,B)=2
:Output(A,B,"X
:If [A](A,B)=3
:Output(A,B,"O
:End
:B-4->B
:End
:If K=25 et A>2
:Then
:Output(A,B," "
:If I>0:Then
:If [A](A,B)=2
:Output(A,B,"X
:If [A](A,B)=3
:Output(A,B,"O
:End
:A-2->A
:End
:If K=26 et B<11
:Then
:Output(A,B," "
:If I>0:Then
:If [A](A,B)=2
:Output(A,B,"X
:If [A](A,B)=3
:Output(A,B,"O
:End
:B+4->B
:End
:If K=34 et A<6
:Then
:Output(A,B," "
:If I>0:Then
:If [A](A,B)=2
:Output(A,B,"X
:If [A](A,B)=3
:Output(A,B,"O
:End
:A+2->A
:End
:If K=105 et [A](A,B)=/=3:Then
:M+1->M
:2->[A](A,B
:1->I:2->G:3->H
:If [A](G,H)=2 et [A](G,H+4)=2 et [A](G,H+8)=2 ou [A](G+2,H)=2 et [A](G+2,H+4)=2 et [A](G+2,H+8)=2 ou [A](G+4,H)=2 et [A](G+4,H+4)=2 et [A](G+4,H+8)=2 ou [A](G,H)=2 et [A](G+2,H)=2 et [A](G+4,H)=2 ou [A](G,H+4)=2 et [A](G+2,H+4)=2 et [A](G+4,H+4)=2 ou [A](G,H+8)=2 et [A](G+2,H+8)=2 et [A](G+4,H+8)=2 ou [A](G,H)=2 et [A](G+2,H+4)=2 et [A](G+4,H+8)=2 ou [A](G,H+8)=2 et [A](G+2,H+4)=2 et [A](G+4,H)=2
:Goto 99
:If Ø=1:Goto 2
:If Ø=2:Goto 3
:End:End
//Fin tour J1 + Vérif
//Début du pseudo IA
:Lbl 2
:If M=9:Goto W
:1->C:C->D
:While 1
:If [A](C,D)=1 ou [A](C,D)=2 ou [A](C,D)=3
:Then
:entAléat(1,7->C
:entAléat(1,13->D
:End
:If [A](C,D)=0:Then
:M+1->M
:Output(C,D,"O
:3->[A](C,D
:Goto Ø
:End:End
//Fin du pseudo IA
//Début tour J2 + Vérif
:Lbl 3
:If M=9:Goto W
/*
Reprendre le tour du J1 et changer (A,B) par (G,H) et I>0 par Z>0
Pour la vérif laisser (G,H) mais remplacer tout les =2 par des =3
(Normal vu que le J2 joue les ronds :) ),pour toute les commande
De matrice remplacer 2 par 3, bref si ya un problème demander moi.
Tout a la fin aprés le Goto 99 mettre un Goto Ø.
Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mar 17 Avr 2012, 10:43
Juste une question avant de chercher à optimiser le code : pourquoi utilise tu une matrice de 7*13 cases alors qu'une grille de morpion ne fait que 3*3 cases? à moins que ce soit volentairement une grille plus grande que la normale?
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Mar 17 Avr 2012, 10:57
Bienvenue sur le fofo' Apeple
Je trouve ça plutôt pas mal pour un premier programme en tous cas ... même si l'IA n'a pas de I ^^ (bon après sur ce sujet j'ai peu à dire j'en ai même pas intégré dans mon morpion ...).
Donc !
Je propose en premier une optimisation de l'interface
Code
Lbl 1
EffEcr
{1,13,5,9 -> L1
For(I,1,7
For(K,1,4
Output(I,L1(K),"*
1 -> [A](I,L1(K
End
End
{7,1,3,5 -> L1
For(I,1,13
For(K,1,4
Output(L1(K),I,"*
1 -> [A](L1(K),I
End
End
EffVar B2 -> A
Repeat A=6 et B=12
B+2->B
If B=14:Then
2->B:A+2->A
End
1->[A](A,B
End
EffVar IEffVar M
Voila ... je ne suis pas un champion de l'optimisation mais ça devrait pas être trop mal. (et évidemment je sens que je vais me faire contredire ... )
Pour le reste je euh ... laisse les autres *sifflote*
Mis à part ça pour ton morpion tu peux t'inspirer sinon du mien (bien que ce ne soit pas le meilleur, dans la signature), ou alors :
- celui de Persa, complet et avec des graphismes léchés superbes ici
- ceux de Linka et Sango moprions de moins de 400 octets (sisi ...) la
---------------------- 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 17 Avr 2012, 12:38
Il est possible de regrouper des portions de codes identiques et d'utiliser une variable et des tests pour les parties différentes.
Par exemple une seule boucle pour J1 et J2, et les affichages etc différents sont soumis à des tests sur une variable J pour savoir qui joue.
Si j'ai bien compris, la grille est gérée sous la forme
Il est possibled'utiliser une matrice 3*3 pour les cases à jouer et de gérer des déplacements de cursuer uniquement dans les cases.
---------------------- 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 17 Avr 2012, 13:11
En effet des disp sont bien plus courts. P'tite erreur de visualisation ^^'
---------------------- 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 : 6
Inscrit le : Lun 16 Avr 2012, 20:20
Posté le : Mar 17 Avr 2012, 23:56
Pour la matrice de 7*13 c'est que ces mon premier prog avec des matrices
Et donc pour placer les 2 et 3 je voulais utiliser les coordoner exacte des X et O
Après pour l'interface, ... Je n'ai jamais utliser disp (bien que se soit le base je le sais )
Bref je vois que j'ai encore bcp a apprendre je vais revoir mon code avec vos proposition.
Je ferais une modif sur celui d'origine.
Une autre question, c'est mieux de tout mettre dans un seul programme ou bien il vaut mieux en créé plusieur et les appeler dans un prog principal ? Car un de mes amis a des jeux (lui sur casio) qui son diviser en plusieur programme.
Apeple.
---------------------- Toujours plus loin, Toujours plus haut, Toujours plus fort !!!!!!!!
Prochain projet -> Un RPG ! (Enfin je vais essayer ) sur écran numérique, car ne comprend pas la prog sur écran graphique
Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mer 18 Avr 2012, 0:04
c'est comme tu veux : c'est un petit peu plus lourd et lent avec des sous programmes, mais ça facilite souvent l'organisation et permet de remplace certians goto par des return. En plus c'est parfois plus facile à programmer quand tu ne mélange pas tout.
Donc fait comme tu préfère.
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Mer 18 Avr 2012, 21:13
Désolé J'aurais pu citer ceux de plein de monde également ... en fait je tenais à prendre les meilleurs que je connaisse - sur le forum -, du point de vue "complet" et optimisation. Si je cite le mien bah ... (mais je ne l'inclue ni dans l'une ni dans l'autre catégorie de ce que je viens de citer).
---------------------- 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 : 6
Inscrit le : Lun 16 Avr 2012, 20:20
Posté le : Mer 18 Avr 2012, 23:05
Pas besoin de t'énerver je suis aller voir aucune de ces propositions
Je veux y arriver par moi même d'ailleur j'ai fini de revoir le code (par contre je n'ai plus mon IA)
Voila ce que sa donne
Code
:{3,3->dim([A]
:Remplir(0,[A]
:/* Ici on garde le même menu que le précédent code
:*/
:Lbl 1
:EffEcr
:Disp "+---+---+---+","! ! ! !","+---+---+---+","! ! ! !","+---+---+---+","! ! ! !","+---+---+---+
:0->M:1->J:2->N
:Lbl Ø
:2->T:2->U
:4->A:7->B
:Repeat M=9
:codeTouche->K
:Output(A,B,". // Croix du curseur graphique
:If K=24 et B>3
:Then
:Output(A,B," "
:If 1=[A](T,U
:Output(A,B,"X
:If 2=[A](T,U
:Output(A,B,"O
:U-1->U
:B-4->B
:End
:If K=25 et A>2
:Then
:Output(A,B," "
:If 1=[A](T,U
:Output(A,B,"X
:If 2=[A](R,U
:Output(A,B,"O
:T-1->T
:A-2->A
:End
:If K=26 et B<11
:Then
:Output(A,B," "
:If 1=[A](T,U
:Output(A,B,"X
:If 2=[A](T,U
:Output(A,B,"O
:U+1->U
:B+4->B
:End
:If K=34 et A<6
:Then
:Output(A,B," "
:If 1=[A](T,U
:Output(A,B,"X
:If 2=[A](T,U
:Output(A,B,"O
:T+1->T
:A+2->A
:End
:If K=105 et N-[A](T,U:Then
:M+1->M
:If J=1:Output(A,B,"X
:If J=2:Output(A,B,"O
:J->[A](T,U
:1->T:1->U
:If [A](T,U)=J et [A](T,U+1)=J et [A](T,U+2)=J ou [A](T+1,U)=J et [A](T+1,U+1)=J et [A](T+1,U+2)=J ou [A](T+2,U)=J et [A](T+2,U+1)=J et [A](T+2,U+2)=J ou [A](T,U)=J et [A](T+1,U)=J et [A](T+2,U)=J ou [A](T,U+1)=J et [A](T+1,U+1)=J et [A](T+2,U+1)=J ou [A](T,U+2)=J et [A](T+1,U+2)=J et [A](T+2,U+2)=J ou [A](T,U)=J et [A](T+1,U+1)=J et [A](T+2,U+2)=J ou [A](T,U+2)=J et [A](T+1,U+1)=J et [A](T+2,U)=J
:Goto 99
:If Ø=1:Goto 2
:If Ø=2:Then
:DelVar Ø:2->J:1->N
:Goto Ø
:End
:If J=2:Then
:1->J:2->N:2->Ø
:Goto Ø
:End:End
:End
:Goto W
:Lbl 2
:EffEcr
:Disp "EN COUR DE PROG.
:Pause
:EffEcr
:Disp
:Lbl 99
:EffEcr
:Output(4,5,"GG :)
:Pause
:EffEcr
:Disp
:Lbl W
:EffEcr
:Output(4,4,"MATCH NUL
:Pause
:EffEcr
:Disp
Voila il ne fais plus que 1200 octet (bien qu'a se que j'ai compris c'est encore bcp pour un simple morpion )
Je précise que j'ai fais et poster ce morpion pour avoir l'avis de personne sachant bien prog en Ti-Basic. Et donc, je ne cherche pas de morpion pour jouer (hé puis sinon j'aurais pu le faire tout seul )
En tout cas j'attend vos remarque, amélioration est autre ...
Merci
Apeple.
---------------------- Toujours plus loin, Toujours plus haut, Toujours plus fort !!!!!!!!
Prochain projet -> Un RPG ! (Enfin je vais essayer ) sur écran numérique, car ne comprend pas la prog sur écran graphique
Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Jeu 19 Avr 2012, 0:32
quelques idées :
Code
:If [A](T,U)=1
:Output(A,B,"X
:If [A](T,U)=2
devient
Code
:If 1=[A](T,U
:Output(A,B,"X
:If 2=[A](T,U
(présent en plusieurs examplaires
Code
:If K=105 et [A](T,U)=/=N:Then
devient
Code
:If K=105 et N-[A](T,U:Then
Code
:1->T:T->U
devient
Code
:1->T:1->U
(plus rapide mais autant lourd)
Code
:2->J:1->N:0->Ø
devient
Code
:DelVar Ø2->J:1->N
Suprime le stop à la fin, il est totalement superflux (sauf si tu veux l'utiliser en sou prgramme, et même lç c'est que si tu veut arreter en même temps le programme principal.
Sandro
PS: pour le poid, ne t'en fait pas, mon premier morpion faisait plus de 5000 octès, avec je crois 65 sous programmes, une mocheté affreuse et une entrée de position en tapant un chiffre (avec prompt)
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 6
Inscrit le : Lun 16 Avr 2012, 20:20
Posté le : Jeu 19 Avr 2012, 1:26
Ha sa me rassure je ne suis pas si mauvais alors
En tout cas merci du fond du coeur car grâce au réponse que la communauté apporte sur une majeur partie des topic, j'ai pu apprendre ou bien comprendre certaine chose (en particulier les matrices ).
Donc continuer comme ça ce forum est niquel .
J'ai fais les modif que tu ma proposer sur le deuxième code
Apeple.
---------------------- Toujours plus loin, Toujours plus haut, Toujours plus fort !!!!!!!!
Prochain projet -> Un RPG ! (Enfin je vais essayer ) sur écran numérique, car ne comprend pas la prog sur écran graphique
:(K=26 et B<11)-(K=24 et B>3 -> C
:(K=34 et A<6)-(K=25 et A>2 -> D
:If C+D
:Then
:Output(A,B," "
:If 1=[A](T,U
:Output(A,B,"X
:If 2=[A](T,U
:Output(A,B,"O
:U+C->U
:B+4C->B
:T+D->T
:A+2D->A
:End
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Jeu 19 Avr 2012, 12:39
Si je te propose des morpions c'est pour que tu voies, par exemple, comment on peut faire une IA efficace. Pas pour y jouer
---------------------- 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