Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Morpion, by The K ! - Page 1 / 2
The K le 17/11/2011 à 19:21
Bonsoir !
je vous présente mon premier programme que je poste sur le site : un morpion ! Je sais, c'est très original, mais il est certifié débuggé, et, dans l'ensemble, plutot rapide, et avec interface graphique !
Il fait entre 1000 et 1100 octets voila
Voila ... si vous avez donc, une question, une remarque, une suggestion ... n'hésitez pas
Voici le programme : KMORPION :
Code
SauveBDG 1
Fonct
AxesOff
FnOff
0ü (
) Xmin
94ü (
) Xmax
0ü (
) Ymin
62ü (
) Ymax
Lbl M
Menu(" KMORPION ","JOUER !",J,"QUITTER",Q
Lbl J
39ü (
) A:23ü (
) B:1ü (
) C:EffVar KEffVar F:1ü (
) G
EffVar [E]
{3,3ü (
) dim([E]
EffDessin
Ligne(17,1,17,61
Ligne(37,1,37,61
Ligne(57,1,57,61
Ligne(77,1,77,61
Ligne(17,1,77,1
Ligne(17,21,77,21
Ligne(17,41,77,41
Ligne(17,61,77,61
While G
EffVar D
If C=3:1ü (
) C
Texte(28,5,"J",C
Ligne(A,B,A+16,B
Ligne(A,B,A,B+16
Ligne(A,B+16,A+16,B+16
Ligne(A+16,B,A+16,B+16
Repeat K
CodeToucheü (
) K
If K=45:Goto Q
If K=24 ou K=25 ou K=26 ou K=34:Then
Ligne(A,B,A,B+16,0
Ligne(A,B,A+16,B,0
Ligne(A,B+16,A+16,B+16,0
Ligne(A+16,B,A+16,B+16,0
If K=24:Then
A-20ü (
) A
If A=ú (
) 1:59ü (
) A
End
If K=25:Then
B+20ü (
) B
If B=63:3ü (
) B
End
If K=26:Then
A+20ü (
) A
If A=79:19ü (
) A
End
If K=34:Then
B-20ü (
) B
If B=ú (
) 17:43ü (
) B
End
End
If K=105:Then
If A=19:1ü (
) J
If A=39:2ü (
) J
If A=59:3ü (
) J
If B=43:1ü (
) H
If B=23:2ü (
) H
If B=3:3ü (
) H
If non([E](H,J
Cü (
) [E](H,J
If C=1:Cercle(A+8,B+8,7
If C=2:Then
Ligne(A+1,B+1,A+15,B+15
Ligne(A+1,B+15,A+15,B+1
End
1ü (
) D
End
For(E,1,2
For(J,1,3
If [E](J,1)=E et [E](J,2)=E et [E](J,3)=E ou [E](1,J)=E et [E](2,J)=E et [E](3,J)=E ou [E](1,1)=E et [E](2,2)=E et [E](3,3)=E ou [E](1,3)=E et [E](2,2)=E et [E](3,1)=E:Then
Ombre(0,94
69!:69!
EffDessin
Texte(28,20,"JOUEUR ",C," A GAGNE !
Pause
EffVar G
End
End
End
If D:C+1ü (
) C
If D:F+1ü (
) F
If F=9 et G:Then
Ombre(0,94
69!:69!
EffDessin
Texte(28,30,"EGALITE ...
Pause
EffVar G
End
End
End
End
Goto M
Lbl Q
EffDessin
Text(28,24,"MADE BY THE K :)
Pause
RappelBDG 1
EffVar BDG1EffVar [E]
EffEcr
Output(1,1,"
Et voila ... bon recopiage à présent
EDIT : plus de routine et un pgrm allégé après le K=105 ^^
Voici les liens de download :
TI/83+ et supérieur :
http://www.mediafire.com/file/[...]e1e/MORPION.8xp
Familles des TI-82 :
http://www.mediafire.com/file/[...]bb/KMORPION.83g tapenad le 17/11/2011 à 20:14
il a l'air bien mais je prefere le mien (+ court mais pas en graphique,un bien pur un mal...)The K le 17/11/2011 à 22:45
C'est sur que le tien est bien moins compliqué a recopier ... Le mien parait lourd en comparaison
Mais honnêtement je pense qu'il y a moyen de simplifier les 9 boucles qui présentent la routine ! Mais je ne bois pas comment ... Une liste peut être ? Avec une boucle for ?

ashtrail le 18/11/2011 à 18:07
Bon bin tu l'as posté je l'essaierai mais la j'ai pas le temps de l'ecrire...The Werty le 03/01/2012 à 23:37
Bonjour a tous
J'ai un petit problème, je ne trouve pas la fonction Func.
J'ai une TI 82 stat fr

linkakro le 04/01/2012 à 12:27
Func se traduit par Fonct et se trouve dans le menu mode et dans le catalogue.
Ma signature contient un lien vers un article pour trouver des traductions et des fonctions.The K le 04/01/2012 à 13:44
Woops merci de signaler ça je corrige ^^ et j'en profite pour voir si je n'avais pas laissé autre chose de british ^^The Werty le 04/01/2012 à 14:46
Je me suis inscris!!
Merci beaucoup je vais commencer à le recopier
Bon boulot en tout cas

calcugeek le 04/01/2012 à 16:12
Personnellement j'ai fait un morpion en graphique (avec vérification de victoire) de moins de 400 octets

donc c'est possible de faire un morpion léger en graphique! Bon il n'est peut être pas super beau mais je l'ai fait en 5-10 min alors...
Petite astuce, pour les tests de cases, j'utilise une matrice et des boucles for( avec les coordonnées. Je le poste si vous voulez même si j'ai pas beaucoup de temps

The K le 04/01/2012 à 17:39
J'édite mon morpion et simplifie une grosse partie avec la routine - que je supprime.
Ne t'inquiète pas je me charge de simplifier les conditions de win
Voila c'est un peu mieux non ?

calcugeek le 04/01/2012 à 18:50
c'est pas mal du tout

je posterai le mien pour que tu compares car la structure n'est pas tout à fait la même

sinon ça me paraît bien quoiqu'un peu long pour un morpion

The Werty le 04/01/2012 à 18:53
Bien joué

j'avais copié/collé le code, pour ensuite tout recopier, ça marchait et maintenant que vois-je? Qu'il y a une version améliorée... Ô malheur! Bon je mange et je recopie tout ça

sandro le 04/01/2012 à 19:45
Tu pourrais m'expliquer s'il te plait à quoi sert la ligne {1,1 -> dim([E] presque tout à la fin?
SandroThe K le 04/01/2012 à 19:47
Il n'y a que deux passages modifiés

Après le "If K=105" et "For(E,1,2" ne recommence pas tout
Citation
sinon ça me paraît bien quoiqu'un peu long pour un morpion
T'as pas vu le vieux morpion de Sango toi xD
Citation
Tu pourrais m'expliquer s'il te plait à quoi sert la ligne {1,1 -> dim([E] presque tout à la fin?
A susciter des commentaires *sifflote* (bon ok j'édite xD)
Na en réalité j'ai rajouté le EffVar [E] après et j'ai du oublier d'effacer la ligne ... enfin un truc du genre merci de me le signaler ^^
sandro le 04/01/2012 à 21:12
De rien,
d'ailleurs, ne pourrait-on pas remplacer
Code
If [E](J,1)=E et [E](J,2)=E et [E](J,3)=E ou [E](1,J)=E et [E](2,J)=E et [3,J]=E ou [E](1,1)=E et [E](2,2)=E et [E](3,3)=E ou [E](1,3)=E et [E](2,2)=E et [E](3,1)=E
Par
Code
If [E](J,1)[E](J,2)[E](J,3)=E [^3] ou [E](1,J[E](2,J)[3,J]=E [^3] ou [E](1,1)[E](2,2)[E](3,3)=E [^3] ou [E](1,3)[E](2,2)[E](3,1)=E [^3]
avec [^3] étant le symbôle cube.
Sandro
The K le 05/01/2012 à 22:29
Les booléens n'ont jamais été ma spécialité ... Vu comme je le comprend la il n'y aurait même pas besoin du cube ... (si les trois conditions sont vraies alors 1*1*1=1)
Peux-tu m'expliquer comment ce petit bout de code marcherait-il ? Micii

linkakro le 06/01/2012 à 01:06
E représente le joueur par 1 ou 2. [E] contient des triplets de 0,1 ou 2.
Quand trois variables vallent E alors le produit de ces variable vaut E^3.
De plus :
0*x*x=0
1*1*1=1=1^3
1*1*2=2
1*2*2=4
2*2*2=8=2^3
Donc réciproquement le produit de ces variables vaut E^3 si chacune vaut E, ce qui est recherché.
==
Ce programme est joli pour un poids raisonnable. C'est sympa.
==
HS:
Mon morpion ne possède aucun graphisme mais est probablement le plus léger de tous les morpions avec tests. Téléchargez le via ma signature s'il vous intéresse. (pour ne pas trop encombrer ici)
Je l'ai écrit pour un concours d'optimisation dans lequel je me suis surpassé.
EDIT : 445 octets
Sangohan38 le 06/01/2012 à 06:41
Combien d'octets ton morpion le plus optimisé?
J'arrive à 450 pour mon plus optimisé avec pour seul inconvénient de pouvoir remplacer une croix par un rond.
Et mon premier morpion ... no comment, on a tous fait des premiers programmes hyper lourds.
Sangohan38linkakro le 06/01/2012 à 09:02
Il occupe 445 octets avec des tests mais aucun graphisme digne de ce nom. (sans blague, on a pratiquement le même poids

)
Sangohan38 a écrit :
Et mon premier morpion ... no comment, on a tous fait des premiers programmes hyper lourds.
Je confirme !!! plusieurs milliers pour mon premier.
Sangohan38 le 06/01/2012 à 10:35
Poste ton programme, moi le miens et on vois si on peut pas faire encore plus léger.
Sangohan38The K le 06/01/2012 à 16:19
Vous voulez dire un programme dans l'écran graphique ou pas ?

linkakro le 06/01/2012 à 20:08
Sango : Je préfère poster mon morpion dans un autre sujet, tu y posteras aussi le tiens, cela limitera notre HS.
K : non, mon morpion optimisé n'est pas dans le graphique.

The K le 18/06/2012 à 15:03
Up : et depuis tout ce temps j'avais oublié de mettre les liens
C'est désormais réparé ^^
F-BVXT le 21/06/2012 à 10:57
Un peu lent mais super ton morpion !
Sinon, je crois que tu as fait une petite erreur dans ton code :
Code
If [E](J,1)=E et [E](J,2)=E et [E](J,3)=E ou [E](1,J)=E et [E](2,J)=E et [3,J]=E ou [E](1,1)=E et [E](2,2)=E et [E](3,3)=E ou [E](1,3)=E et [E](2,2)=E et [E](3,1)=E:Then
Ce n'est pas [3,J]=E mais [E](3,J)=E. Ou alors je n'ai rien compris

The K le 21/06/2012 à 11:21
Euuuuh oui faute de frappe désolé ! Merci de l'avoir remarqué ^^
(ps : c'est juste les cercles qui sont lents ... mais ça j'y peux rien !)
En tous cas mici de le regarder ^^The K le 21/06/2012 à 11:29
Oulala mais je viens de m'apercevoir qu'en effet il est beaucoup plus lent que sur ma calculatrice (testé sous emu) et truffé de qqes bugs. Je corrige ça.
Edit : je ferai ça cet apremF-BVXT le 21/06/2012 à 11:43
Oui, les cercles c'est vraiment long à tracer... Je sais pas s'il n'y aurai pas une astuce pour les tracer plus vite parce que dans mon morpion c'est aussi long.blg_flg le 21/06/2012 à 12:03
A part l'ASM, je crois qu'il n'y a pas, malheureusement, de solution pour tracer plus vite les cercles.F-BVXT le 21/06/2012 à 12:08
Je viens de découvrir quelque chose de surprenant.
Si tu trace un cercle avec la fonction Cercle(, tu vois tous le tracé du cercle, alors que quand tu trace une ligne c'est quasi instantané.
J'ai donc essayé de découper un cercle en plusieurs ligne et devinez quoi, bien que beaucoup plus long, ça trace nettement plus rapidement qu'avec la fonction Cercle(.
Par exemple, pour un Cercle(50,30,6, il faut faire ça :
Code
Ligne(52,36,48,36
Ligne(52,24,48,24
Ligne(52,25,54,25
Ligne(46,25,48,25
Ligne(54,26,55,26
Ligne(45,26,46,26
Ligne(45,27,45,28
Ligne(55,27,55,28
Ligne(56,28,56,32
Ligne(44,28,44,32
Ligne(45,32,45,34
Ligne(55,32,55,34
Ligne(54,34,54,35
Ligne(46,34,46,35
Ligne(47,35,48,35
Ligne(52,35,53,35
blg_flg le 21/06/2012 à 12:10
C'est surtout bcp plus lourd et long à écrire, pour un résultat moins précis!F-BVXT le 21/06/2012 à 12:16
C'est effectivement beaucoup plus lourd. Pour ce qui est de la précision, je ne vois pas de différence à l'oeil nu mais il faut se casser la tête avec des calculs...
La question c'est est-ce que dans un morpion où il y a 9 possibilités de positionnement de cercle, le poids ralentirait plus le programme que cette "astuce" ne l’accélérerait ?blg_flg le 21/06/2012 à 12:20
Il faudrait tester, mais le nombre d'octets économisés avec la fonction Cerle( est considérable par rapport à tes lignes.F-BVXT le 21/06/2012 à 12:24
Oui mais il doit y avoir un moyen de réduire tout ça avec un "For(" je pense.

blg_flg le 21/06/2012 à 12:31
J'ai testé et les lignes se dessinent les unes après les autres, certes plus vite qu'avec un cercle, mais ce n'est pas exceptionnel non plus.

F-BVXT le 21/06/2012 à 12:45
Ah bon, parce que moi c'est plus rapide de 2 secondes sur ma calculette (82 stats.fr) : 2s78 pour un cercle normal contre 0s76 avec les lignes.blg_flg le 21/06/2012 à 13:11
Je voulais dire que le rapport rapidité/mémoire doit être plus intéressant avec Cercle( dans de nombreuses configurations. Même avec un For( , on utilise bcp d'octets. Après tout dépend de sa priorité: mémoire ou rapidité.
Et je pense que la différence de rapidité entre les deux dépend aussi de la RAM.F-BVXT le 21/06/2012 à 13:17
Dans l'état actuel, c'est vrai que +1800 octets dans un programme pour des cercles c'est trop. Mais en simplifiant, ça pourrait devenir tolérable, à voir...The K le 21/06/2012 à 16:10
C'est vrai que c'est plus rapide avec des lignes mais tu t'en fiches 2,76 secondes c'est le temps que tu mets pour passer ta calculatrice à l’adversaire
D'ailleurs mon programme ne fait qu'à peine plus de 1000 octets

(1001 sur ma calto)
blg_flg le 22/06/2012 à 15:00
Sur la Ti 83+ (je ne sais pas si ça marche sur les autres modèles, vu que j'ai testé sur wabbitemu) écrire Cercle(20,30,10,{i} au lieu de Cercle(20,30,10 permet de tracer le cercle à partir de 4pts au lieu d'un.

Cela divise donc le temps par 4!
The K le 22/06/2012 à 21:05
Intéressant ... Bah dans l'immédiat désolé j'ai pas encore corrige mon post en fait je fais ça quand je peux mais la je révise (oral de français) donc voilà ! Mais merci

linkakro le 22/06/2012 à 22:38
Cela fonctionne sur toutes les ti flash.
De même Text(-1,Y,X,"txt") permet d'écrire dans le graphique avec la police normale.The K le 22/06/2012 à 23:16
Ah zut cette astuce de cercle fonctionne que sur les flash ? Hum bon ... Dommage ...sandro le 23/06/2012 à 11:33
Oui, le -1 pour le texte et le {i pour les cercles ne foctionnent qu'à partir de la TI83+blg_flg le 23/06/2012 à 11:37
Cela veut dire que toutes les TI au dessus de la 83 sont des flashs? Qu'est-ce que ça apporte d'être flash?
ps hs: aujourd'hui, c'est le 100° anniversaire de la naissance d'
Alan Turing.
linkakro le 23/06/2012 à 11:43
"flash" est une référence au modèle de composant mémoire (d'archive) présent dans les ti z80 à partir de la ti83plus : mémoire flash.
PS : je me suis bien amusé avec le doodle Alan Turing !
Remercions le d'avoir fondé l'informatique, sans lui serions-nous rassemblés ici ?
Joyeux 100ème anniversaire Alan !
F-BVXT le 23/06/2012 à 11:46
Et dans les TI 82stats(.fr) c'est quoi comme type de mémoire alors ? C'est quand même pas mécanique, si ?blg_flg le 23/06/2012 à 11:47
Je crois qu'il y a juste la mémoire d'archive en moins.
ps: j'ai pas trop compris le doodle, mais bon...linkakro le 23/06/2012 à 11:50
Sa mémoire "rom" est probablement une eprom voire une prom. (je ne pense pas à eeprom)
La mémoire flash est à la fois rapide, non-volatile et réinscriptible.
Tandis que la eprom nécessite d'être effacée entièrement pour être reprogrammée, et une prom ne peut pas être reprogrammée.
La mémoire eeprom quant à elle est souvent utilisée dans dans cartes de jeux pour consoles portables comme la nintendo_ds, mais je ne crois pas qu'il y en ai dans les TI (bien qu'elle soit réinscriptible et non-volatile).blg_flg le 23/06/2012 à 11:55
Si une prom ne peut pas être reprogrammée, il ne peut pas s'agir de cela, si?

F-BVXT le 23/06/2012 à 12:04
Si parce que la "rom" n'est pas reprogrammable sur les 82stats(.fr) : on ne peut pas modifier l'OS. Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.