Poster un nouveau sujet Poster une réponse
premier programme : le morpion !
Auteur Message
matruck



Autorisation : Membre
Nb de messages : 8
Inscrit le : Dim 17 Nov 2013, 0:44
Posté le : Dim 17 Nov 2013, 1:40   Citer 

Hellow, je suis nouveau sur le forum, j'ai déjà regardé quelques sujets par-ci par là mais j'ai pensé qu'il était bon de m'inscrire happy.gif

J'ai appris le TI-BASIC le weekend dernier pour le trip, parce que j'ai hérité d'une TI-82 stats.fr (je connais déjà la programmation (dans le genre PHP, javascript et java, le PHP étant mon point fort)) Et pis bon, comme jsuis tenté par la section S pour l'année de première, je perdais rien a apprendre a me servir de ce gros rectangle noir cupsmiley.gif

Bon, j'aime pas vraiment le ti-basic ^^ ya pleins de trucs en français ET en anglais, ça donne un truc immonde, ya des trucs qui servent a rien (dans le style (while K!=B ---> Repeat K=B), on ne peut pas créer ses propres fonctions, les tableaux multidimensionnels s'appellent les matrices pour faire classe, mais c'est limité a deux dimensions en vrai ... bref, c'est pas tip top :p mais jme suis lancé dans un morpion pour mon premier programme (en excluant le + ou - et algos pour aller plus vite aux controles de math)




Code


//0->Xmin
//90->Xmax
//0->Ymin
//60->Ymax
//jsuis pas prétentieux au point de mettre mon pseudo au démarrage

Lbl L1
0->D
"VICTOIRE JOUEUR "->Chaîne1
EffEcr
EffDessin
FonctOff
AxesNAff
{9,5->dim([A]
9->V
{1,1->L1
//L1(1): nombre de tour (max 9) L1(2): joueur (1 ou 2)
//on efface tout et on initialise des variables
For(T,15,35,10
For(U, 55, 35, -10
V->[A](V,1
U->[A](V,2
T->[A](V,3
0->[A](V,4
V-1->V
End
End
1->H
For(W,72,92,10
W->[A](H,5
W+1->[A](H+1,5
W+2->[A](H+2,5
H+3->H
End
//[A](1: numéro de la case; 2: abscisse de la case; 3: ordonnée; 4: 0=vide, 1=rond, 2=croix; 5:touche correspondante)
For(B,10,40,10
Ligne(20+B,10,10+B,40
Ligne(30,B,60,B
End
//on dessine le morpion
Repeat L1(1)=10
//tant qu'on est pas au 10eme tour (9+1 pour souffler un peu)
Texte(55,5, "TOUR:", L1(1), " JOUEUR:", L1(2)
Repeat K!=0 // l'habitude, le symbole "différent" n'existe pas, je préfère != a =/= que je trouve pas très beau
codeTouche->K
For(E,1,9,1
//E = numéro de la case pour [A]
If [A](E,5)=K
then
If [A](E,4)=0
Then
//si la touche préssée correspond et que la case est vierge
L1(1)+1->L1(1
If L1(2)=1
Then
Cercle([A](E,2), [A](E,3),4
//un cercle si c'est joueur 1
1->[A](E,4
2->L1(2
Else
Ligne([A](E,2)-4,[A](E,3)+4,[A](E,2)+4,[A](E,3)-4)
Ligne([A](E,2)-4,[A](E,3)-4,[A](E,2)+4,[A](E,3)+4)
//une croix si c'est joueur 2
2->[A](E,4
1->L1(2
End
End
End
End
End
//maintenant, on vérifie a chaque tour si quelqu'un a gagné
For(P,1,2,1
//P= joueur
//deux boucles (avec F) pour les combinaisons des solutions verticales et horizontales
For(F,1,7,3
if([A](F,4)=P et [A](F+1,4)=P et [A](F+2,4)=P
P->D
End
For(F,1,3,1
if([A](F,4)=P et [A](F+3,4)=P et [A](F+6,4)=P
P->D
End
//les combinaisons diagonales
If([A](1,4)=P et [A](5,4)=P et [A](9,4)=P) ou ([A](3,4)=P et [A](5,4)=P et [A](7,4)=P)
Then
P->D
//D = vainqueur (0 ou 1 ou 2)
End
End
If D!=0
//si quelqu'un a gagné
Then
Texte(1,1,chaîne1,D
10->L1(1
End
End
If D=0
//si personne a gagné, égalité
Texte(1,1, "EGALITE"
Pause
Menu("QUE FAIRE ?", "REJOUER", L1, "QUITTER", L2)
Lbl L2



Le code est un peu lourd par rapport a ce que j'ai vu (86 lignes), mais il fait tout pleins de choses, avec l'écran graphique c'est assez simpatoche. Le seul point noir reste les ronds qui mettent entre 1sc et et 1sc5 a se tracer, mais je peux rien y faire je suppose ^^

En tout j'en ai pour pratiquement 800octets (786 pour être précis), j'ai vu des morpions beaucoup plus petits, mais les matrices c'est classe alors jm'en sert happy.gif

Enfin voilà, c'était une petite découverte du ti-basic, jvais me lancer dans un snake peut-être, si vous avez des conseils d'optimisation ou juste des remarques, n'hésitez pas !

 Adresse email Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Dim 17 Nov 2013, 10:14   Citer 

Bonjour,

Bienvenue sur le forum winkle.gif


Citer : matruck
Bon, j'aime pas vraiment le ti-basic ^^ ya pleins de trucs en français ET en anglais, ça donne un truc immonde, ya des trucs qui servent a rien (dans le style (while K!=B ---> Repeat K=B), on ne peut pas créer ses propres fonctions, les tableaux multidimensionnels s'appellent les matrices pour faire classe, mais c'est limité a deux dimensions en vrai ...

Je trouve que tu y vas un peu fort là crazy.gif
Français/Anglais: c'est parce que tu as une ti 82stats.fr, si tu voulais tout en anglais il fallait prendre une 82stats/83 ou autre modèle anglais (sans le .fr).
Des trucs qui ne servent à rien? Je ne connais pas personnellement.
Ce n'est pas parce que tu ne saisis pas bien à quoi ça sert que ça ne sert à rien. Pour reprendre ton exemple
(while K!=B ---> Repeat K=B)
Ce n'est pas toujours vrai: Repeat est à utiliser si tu veux que la boucle soit exécutée au moins une fois, et While qu'elle ne soit exécutée que si (et tant que) la condition est vrai. Donc l'équivalence est fausse.
On ne peut pas créer ses propres fonctions, c'est vrai, mais tu peux toujours te débrouiller à créer des routines (http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-ti-basic/un-end-qui-se-termine-ailleurs), même si ce n'est pas très pratique je te l'accorde.
Le fait que les matrices soient limitées à 2 dimensions: c'est la propriété d'une matrice non d'avoir 2 dimension :p
Les listes ont une dimensions, et les matrices 2, il n'y a juste pas de tableaux en ti basic (ou du moins des tableaux où on peut mettre ce qu'on veut).


Citer
jsuis pas prétentieux au point de mettre mon pseudo au démarrage

Ce n'est pas de la prétention, mais simplement pour que ceux qui utilisent le programme sachent qui a fait le prgm, c'est un droit que de le faire, et en rien une prétention.

Concernant les optimisations: je te conseille de faire un tour sur cet article:
http://tout82.forumactif.org/t50-candide-ou-l-optimisation

//0->Xmin
//90->Xmax
//0->Ymin
//60->Ymax
Cette partie m'inrigue: pourquoi mettre 90 et 60 au lieu des traditionnels 94 et 62 qui correspondent aux pixels?

Code

0->D
"VICTOIRE JOUEUR "->Chaîne1


Peut devenir:

Code
DelVar 0"VICTOIRE JOUEUR ->Chaîne1

Explications:
Les parenthèses/guillemets fermantes peuvent être omis en fin de ligne/avant un sto -> (encore un avantage du ti basic :p).
DelVar variable efface la variable de la mémoire. Sur des variables numériques, ça revient à la mettre à 0. De plus, après un DelVar, tu n'as pas besoin de mettre un retour à la ligne avant la prochaine instructions, dans certains cas cependant: http://tout82.free.fr/forum/sujet.php?sujet=2691

Repeat K!=0
Dans ce cas, tu peux mettre Repeat K
Explication: Quand tu veux faire un test, celui ci est négatif si la valeur renvoyé vaut 0, positif sinon.
Ainsi, si K vaut 0, ça renvoi "faux" (0), et si K!=0, ça renvoi vrai (1).
(J'utilise ici les booléens: http://tout82.free.fr/forum/sujet.php?sujet=2741)

If [A](E,4)=0
Pour tester si un nombre vaut 0:
If non([A](E,4
Si [A](E,4) renvoi "vrai", non([A](E,4)) renvoi "faux", et vice versa.

L1(1)+1->L1(1
Devient
1+L1(1->L1(1
Et tu gagne un octet.

Il y a certainement des optimisations possibles au niveau des tests que tu réalise, je ne me suis pas penché dessus.

C'est pas mal du tout, continue comme ça winkle.gif

----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
matruck



Autorisation : Membre
Nb de messages : 8
Inscrit le : Dim 17 Nov 2013, 0:44
Posté le : Dim 17 Nov 2013, 13:10   Citer 


Citer
Je trouve que tu y vas un peu fort là crazy.gif



Oui moi aussi minied.gif
Mais c'est parce que, par rapport a ce que je connais en programmation, c'est assez déroutant ^^
par exemple, dans 95% des langages, les conditions se font comme ça :

Code

if(A=B) {
//instructions
}
else {

}


En Ti-basic ça va être

Code
if A=B
Then
//instruction
//instruction
else
//instruction
end



Je m'y attendais pas ^^
et le "->" ça existe que en ti-basic aussi ^^
Mais bon le plus gros soucis c'est les fonctions quoi, c'est vraiment des flemmards chez texas instrument evil.gif
Et le franglais, si je prend une .fr c'est pour avoir en français, pas en anglais mixé français ^^ mais bon a la limite ça passe, c'est pour critiquer.
Et puis ya aussi l'origine pour les graphismes (traits points ronds) c'est en bas a gauche. Toute ma vie j'ai appris que c'était en haut a gauche :p


Sinon pour la différence repeat et while, je ne connaissais pas moodforlove.gif


Citer
Ce n'est pas de la prétention, mais simplement pour que ceux qui utilisent le programme sachent qui a fait le prgm, c'est un droit que de le faire, et en rien une prétention.


Évidement mais on est tellement habitués a voir 'Disp "BY XORTOR93"' au début d'un programme de 8lignes, je me moque merde, un peu d'humour dans ce monde de politiquement correct et d'auto-censure clown.gif



Citer
Concernant les optimisations: je te conseille de faire un tour sur cet article:
http://tout82.forumactif.org/t50-candide-ou-l-optimisation



je jetterai un oeil !


Citer
Cette partie m'inrigue: pourquoi mettre 90 et 60 au lieu des traditionnels 94 et 62 qui correspondent aux pixels?


... Parce que je faisais mes tests sur une feuille petits carreaux et que les chiffres ronds c'était mieux :p mais en soi ça change pas grand chose si on laisse 94 et 62 ^^


Citer
Peut devenir:

Code
DelVar 0"VICTOIRE JOUEUR ->Chaîne1



Tu n'as pas voulu dire...

Code
DelVar D"VICTOIRE JOUEUR ->Chaîne1


plutot ? parce que sinon, ma variable D passe a la trappe et supprimer le zéro n'est ptètre pas une excellente idée laugh.gif

Mais du coup, si ça marche aussi pour les matrices on peut economiser un octet ou deux en faisant :

Code
Delvar [A]


au début, et supprimer la ligne :

Code
 0->[A](V,4



Et j'ai réfléchi un peu a l'optimisation aussi, il vaudrait pas mieux faire deux variables distinctes au lieu du tableau L1 ? Parce que avec les parenthèses ça prend des octets !

Le reste je comprend ! Merci beaucoup happy.gif

Rendez vous le weekend prochain pour un snake crazy.gif

 Adresse email Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Dim 17 Nov 2013, 16:48   Citer 


Citer
Et puis ya aussi l'origine pour les graphismes (traits points ronds) c'est en bas a gauche. Toute ma vie j'ai appris que c'était en haut a gauche :p


Ca ca marche pour les fonctions qui utilisent le zoom (point-On/Off, Ligne, horizontale...), mais d'autres fonction utilisent le bon repère (pxl-on/off/change/test, Texte...). Après il ne faut pas oublier qu'à la base c'est une calto graphique, donc c'est plus facile par rapport aux fonctions qu'on trace etc si certaines instructions d'affichage se réfèrent au zoom.

Pour les fonctions, je suis d'accord, ça peut manquer parfois, mais dans ce cas (même s'il ne faut pas en abuser), tu peux toujours créer un autre prgm qui va jouer le rôle d'une fonction. Mais bon après le ti basic c'est un langage haut niveau, donc on a peu besoin d'autres fonctions généralement.


Citer
Évidement mais on est tellement habitués a voir 'Disp "BY XORTOR93"' au début d'un programme de 8lignes, je me moque merde, un peu d'humour dans ce monde de politiquement correct et d'auto-censure


Oui ça je suis d'accord, mettre son nom pour un prgm qui se contente de faire les racines d'un polynomes c'est éxagéré crazy.gif


Citer
Tu n'as pas voulu dire...


Code
DelVar D"VICTOIRE JOUEUR ->Chaîne1



Exact, autant pour moi.

Oui, tu peux effacer la matrice puis la recréer, elle sera vide.

Et c'est vrai qu'utiliser la liste L1 n'est pas une super idée: les listes sont plus lentes d'accès que les variables nombres, et demandent plus d'octets pour accéder à leurs termes, comme tu le fais remarquer.

Pour la matrice:
A quoi ça sert de stocker le "numéro" de la case?
Puisque de toute façon tu le connais (c'est le numéro de ligne).

Ensuite:
Code
If [A](E,5)=K
then
If [A](E,4)=0
Then

Pourquoi tester séparément?

Code
If [A](E,5)=K et non([A](E,4 //Edit: comme le signale linka j'avais oublié une matrice
Then

Du coup il faut enlever un End.

Et aussi: Puisque tu testes si quelqu'un a gagné a la fin, tu risque de te retrouver dans un cas où les 2 joueurs ont gagnés...

----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 20 Nov 2013, 21:09   Citer 

Manque une matrice dans ton dernier code m@thieu41.

Je suis bien d'accord pour dire qu'une calculatrice traduite à moitiée n'est pas agréable.

Je ne vois pas de détails évident à améliorer.
Tout ce que je pense est une gestion complètement différente des touches et des cases, donc pas la peine de le dire développer ici.

Utiliser la matrice pour toutes les informations est original.
Mais je ne trouve pas cela bénéficiaire.

Tu as dit que tu préfères "!=" des languages compilés à "=/=" de la TI mais tu ignores peut-être que le point d'exclamation "!" représente la factorielle dans une TI et que cela cause souvent des ambiguités. (même si cela doit être deviné facilement la plupart du temps)

Pour une matrice systématique comme la tienne je pense que tu aurais plus vite fait et sans lourdeur d'écrire la matrice en dur plutôt que générer par boucle, mais je n'en suis pas sûr et les boucles c'est plus élégant quand-même.

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



Autorisation : Membre
Nb de messages : 8
Inscrit le : Dim 17 Nov 2013, 0:44
Posté le : Mer 20 Nov 2013, 22:20   Citer 


Citer
Utiliser la matrice pour toutes les informations est original.
Mais je ne trouve pas cela bénéficiaire.



En fait, c'est une sorte d'habitude que j'ai pris(e?) avec la POO, et le php aussi, de faire tenir tous les éléments du programme en un seul tableau avec tout pleins de dimensions... c'est pour ça que je parle des matrices avec deux dimensions comme d'une limite, c'est ma manière de coder qui va pas avec le langage ^^


Citer
Tu as dit que tu préfères "!=" des languages compilés


La ti ne compile pas ? ça fonctionne comment ? (simple curiosité, si c'est trop compliqué a expliquer, oublie ^^)


Citer
"!" représente la factorielle dans une TI


j'ai fait un ptit tour sur wiki je ne connaissais pas, c'est intéressant mais je vois pas trop a quoi ça sert en pratique ^^


Citer
Pour une matrice systématique comme la tienne je pense que tu aurais plus vite fait et sans lourdeur d'écrire la matrice en dur plutôt que générer par boucle, mais je n'en suis pas sûr et les boucles c'est plus élégant quand-même.


Bon bin là j'avais fait les tests, c'était plus lisible mais plus lourd et plus long ^^ je gagne 2 lignes a le faire avec des boucles, même si j'ai encore des progrès a faire en optimisation happy.gif

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 20 Nov 2013, 23:10   Citer 

La factorielle et son cousin le gamma sont des fonctions qui apparaissent beaucoup dans les statistiques, probabilités et les développement limités. Va savoir à quoi d'autre ça sert.
J'ai désigné les programmes compilés mais je ne sais pas s'ils utilisent tous le symbole "!=", bien qu'il semble universel (sauf chez TI à cause des maths).

La calculatrice interprète le programme à chaque exécution. Elle doit lire les tokens (octets ou paires d'octets qui sont affichés à l'écran comme un emplacement de curseur, peu importe la taille de leur texte) qui composent les programme en mémoire.

----------------------
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 
 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink