1
Bonjour, je m'introduit sur ce forum en vous balançant ce que j'ai fait de mieux en trois ans de prog Ti-basic : mon magnifique, extraordinaire, splendide ! TTRIAD !

Alors c'est quoi ? C'est un jeu de cartes, que beaucoup connaissent puisque il est intégré au jeu Final Fantasy VIII.

Sachez que le prog est très stable, mais je n'ai eu pour l'instant personne autre que moi pour le tester :'(

Des testeurs ! Oui j'en veux pleins !

Bon bah sinon voila le lien : http://www.wikisquare.com/public/ttriad.RAR

ahh et aller, puisque je suis heureux aujourd'hui, voila une capture d'écran :

ttriad3.jpg

Bon jeu à vous !
avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
2
Bienvenue ici myst6re n2,

Il a l'air bien réalisé, mais je connais vraiment pas le principe de ce jeu tongue
Ha sinon tu peux l'inscrire au concours, c'est demain soir la date limite smile ( comme ça il sera testé, critiqué constructive ment, un peu exposé smile )
3
Salut !

Je connais pas les règles du jeu. J'ai regardé rapidement pour ce soir : les curseurs du menu et du choix des cartes (?) me semblent un peu lents. Pour le code, il y a quand même pas mal de répétitions inutiles. Par exemple le programme TTDB, excuse-moi si je te vexe, mais il est vraiment moche. L'optimisation est plutôt facile.

Je regarderai plus en détail demain, bonne prog !
4
Ouais n'hésite pas à l'inscrire à zContest 2008 smile
5
Moi j'y ai joué dans FFVIII, mais y'a des trucs que je pigeais pas quand j'y jouais...
En tout cas, ça à l'air sympa! Faut que tu participes au Zcontest, mais indiquer les règles...
6
Il a l'air bien fait ton jeu, je le testerai a l'occasion (moi je connais les regles du jeu, soyez pas deg' :P)
7
(Je les connais aussi oui, d'ailleurs je serais surement juge en TI-Basic cette année s'il est proposé.)
8
very (./2) :
Ha sinon tu peux l'inscrire au concours


Ouai, c'est fait
Baruch (./3) :
J'ai regardé rapidement pour ce soir : les curseurs du menu et du choix des cartes (?) me semblent un peu lents. Pour le code, il y a quand même pas mal de répétitions inutiles. Par exemple le programme TTDB, excuse-moi si je te vexe, mais il est vraiment moche. L'optimisation est plutôt facile.


Pour la lenteur, je joue sur une ti 84+ et je trouve que c'est raisonnable compte tenu de tout ce qui se passe en interne du programme quand tu veux pointer une carte. (bon ok, c'est un peu lent)

Par contre je serai ravi que tu me montres des optimisations pour TTDB. J'ai quasiment utilisé toutes mes cartes (je pense que je vais transformer une partie de TTDB en une matrice). IL est sacrément optimisé niveau poids, je suis curieux de ce que tu vas trouver smile

Sinon pour ceux qui ont du temps à tuer et qui veulent apprendre les règles, regardez ici
Bon je sais ça fait des truc à lire, en tout cas vous allez remarquer que y'a des règles qui ne sont pas dans mon Triple triad, notamment parce qu'il aurait fallu recréer Final Fantasy VIII avec lui ^^. Par exemple, on ne peux pas choisir ses cartes, et on ne peut pas en gagner à la fin. (Aléatoire : OUI => distribution totalement aléatoire | NON => distribution équilibrée avec l'adversaire).

Merci à vous tous smile
avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
9
Ben il suffit d'utiliser la fonction sub et des listes :

Pour trouver la valeur à stocker dans Str5 :

On prend L la longueur du plus grand nom. Pour chaque nom, on associe une chaîne de longueur L, en complétant avec des espaces.
On prend Str0 la chaîne concaténée de toutes les chaînes de nom.

Il suffit alors de faire :

sub(Str0,AnsL-L+1,L->Str5

Pour les 4 autres chaînes, tu peux faire pareil (avec L=1), mais c'est pas la meilleure méthode.
Le mieux c'est d'obtenir l'expression de ces chaînes avec une liste. Donc tu fais sub("123456789",L1(A),1) (avec A la valeur initiale de Ans).
Pour éviter d'avoir une trop grande liste, tu peux utiliser la méthode de stockage de chiffres dans un nombre. Comme ça, tu peux mettre 4 chiffres dans un élément, tu les extrais, puis tu les convertis en chaîne.

Pour les If K, il suffit de trouver la condition à vérifier pour effectuer ce test, puis tu te débrouilles avec une liste pour avoir la valeur à stocker dans la matrice.
Fantastique !
J'essaye de suite !

Wouhouu ! ça accélère tout ton truc de malade ! Je t'ai dis merci ? Non ? Merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci, merci !

Bon, j'ai pas encore fini moi !

édit : Comment on converti en chaine ?
avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
Héhé mais c'est un plaisir de t'aider ^^.

Convertir quoi en chaîne ? Si c'est juste des chiffres, c'est facile (avec un sub).

Maintenant tu peux aussi améliorer l'autre prog ^^. Envoie-moi ta version optimisée si tu veux.
J'ai une liste lZ de dimension 110 (comme "110 cartes").
J'ai dans chaque ligne de la liste un nombre à 4 chiffres qui sont les positions dans la chaine "123456789A"

Si je veux afficher les 4 valeurs de la carte n°1, je fais donc :
text(1,1,sub("123456789A",(pos1),1
text(1,1,sub("123456789A",(pos2),1
text(1,1,sub("123456789A",(pos3),1
text(1,1,sub("123456789A",(pos4),1

Problème : :'( je vois vraiment pas comment extraire (pos1/2/3/4) de la liste !

Je peux toujours faire une liste à dimension 440 sinon ^^
avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
Faut faire un peu de maths, t'a plein de moyens.

Un des plus simple:

Pour avoir le n-iém chiffre en partant de la droite, tu divises par 10^(N) (le chiffre se retrouve juste après la virgule), et ensuite fpart, puis tu x10 et prend la partie entière (ipart).

donc: ipart(10*fpart(X/10^N))

Où X est ton nombre. Mais doit y avoir plus simple.
Raaaa j'avais fait un superbe post, mais grâce à un joli bug j'ai tout perdu.

Tant pis, je te donne quand même le code :

For(Z,1,4
1+10fPart(.1int(N10^(Z-4
Text(1,1,sub("123456789A",Ans,1
End

Avec N le nombre de 4 chiffres ABCD, avec A=pos1, B=pos2, ...
very (./13) :
Faut faire un peu de maths, t'a plein de moyens.


Lol, ça ne va pas de soi, même si je connais ces deux fonctions, je ne me suis pas dit ça !
Mais bon, c'est bien vu.

(Une petite optimisation ^^ : ipart(10fpart(X/10^N)) )


ok, bah c'est noté en tout cas
Baruch (./14) :
For(Z,1,4
1+10fPart(.1int(N10^(Z-4
Text(1,1,sub("123456789A",Ans,1
End


Tiens, pendant que tu me parles de for(, tu as sans doute remarqué que j'en utilise pas tout le temps. Si je fais ça c'est juste histoire de gagner de précieuses millisecondes (au détriment des octets, mais bon parfois faut choisir).
avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
A mon avis les quelques millisecondes sont bien négligeables devant les octets gagnés. En plus en racourcissant ton code, tu gagnes du temps à chaque Goto.
myst6re n2 (./15) :
(Une petite optimisation ^^ : ipart(10fpart(X/10^N)) )


Si tu veux t'amuser à optimiser des constantes de taille, tu peux retirer les parenthèses fermantes aussi, et utiliser le symbole '10^', le petit E. ( je donnais juste une formule mathématique ) [ Dans le même genre Baruch retire le .1 et fait Z-3. D'ailleurs c'est rigolo tu fais pareil dans l'autre sens ]
Ah, tu as aussi un programme de Camille Galet qui utilise une belle astuce pour convertir un nombre en chaine de caractère:
http://www.ticalc.org/archives/files/fileinfo/343/34379.html
(Whoa ! c'est vraiment un forum de oufs ici ^^)

Elle (il ?) utilise "Equ►Str", je comprend l'idée.
avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
very -> attention, avec E on ne peut pas mettre de puissance variable.

gon33-> c'est une bonne astuce, mais à utiliser pour des nombres avec beaucoup de chiffres, car c'est assez lent.
c'est assez lent.


tout à fait d'accord avec toi
avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
Bon, je crois que j'ai fait ce qu'il fallait, ça à l'air de fonctionner.
Problème : quand on déplace le curseur de sélection c'est pas beaucoup plus rapide qu'avant...

J'ai une idée : lors de la distribution, j'ai qu'à créer une chaine qui regroupe uniquement les noms des cartes distribuées. Je suppose qu'après, ce sera plus rapide...
avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
Tu peux uploader le code pour que je puisse voir où tu en es ?
Nan ! Bon d'accord, sous quelle forme ? copier-coller ? ou alors je t'envoie ttriad.8xp ?

edit : Voila :

==distribution des cartes==

Au niveau du premier appel de TTDB, j'ai mis ça :
:θ→[B](D,5
:iPart(10fPart(∟Z(THETA)/{E}5→[B](D,6
:If D<6 and Y
:Then
:For(V,1,4
:iPart(10fPart(&#8735;Z(THETA)/10^V&#8594;[B](D,V
:if not(Ans
:10&#8594;[B](D,6
:End
:End


Ici c'est l'affichage un peu plus loin
:iPart(10fPart(&#8735;Z(THETA)/{E}1
:Text(J,I-4,sub(Str9,Ans+1,1
:iPart(10fPart(&#8735;Z(THETA)/{E}4
:Text(J+3,I,sub(Str9,Ans+1,1
:iPart(10fPart(&#8735;Z(THETA)/{E}2
:Text(J,I+4,sub(Str9,Ans+1,1
:iPart(10fPart(&#8735;Z(THETA)/{E}3
:Text(J-3,I,sub(Str9,Ans+1,1


==navigation avec le curseur pour choisir une carte==

Au niveau du deuxième appel de TTDB :
:Lbl M
: DelVar K[B](J,5&#8594;&#952;
:sub(Str6,&#952;12-11,12&#8594;Str5
:inString(Ans,"-",3
:If Ans
:sub(Str5,1,Ans-1&#8594;Str5
:If U and [B](J,6
:Then
:sub("TPNEFSRV",[B](J,6),1
:Text({-}1,56,24,Str0
:Text(57,45-2length(Str5+Ans),Str5," (",Ans,")
:Else
:Text({-}1,56,24,Str0
:Text(57,48-2length(Str5),Str5
:End


==On pose une carte==

Affectation des valeurs de la carte choisie à [A]
:For(&#952;,1,4
:iPart(10fPart(&#8735;Z([A](X,6))/10^&#952;&#8594;[A](X,&#952;
:if not(Ans
:10&#8594;[B](X,&#952;
:End


Affichage un peu plus loin :

:iPart(10fPart(&#8735;Z([A](X,6))/10
:Text(I-5,H+4,sub(Str9,Ans+1,1
:iPart(10fPart(&#8735;Z([A](X,6))/{E}3
:Text(I-8,H+8,sub(Str9,Ans+1,1
:iPart(10fPart(&#8735;Z([A](X,6))/{E}4
:Text(I-2,H+8,sub(Str9,Ans+1,1
:iPart(10fPart(&#8735;Z([A](X,6))/{E}2
:Text(I-5,R-6,sub(Str9,Ans+1,1


Bon, tu l'auras remarqué, à cause du A(=10), je suis obligé d'utiliser pleins de fois la liste. (je dois afficher A et pas 10, je dois affecter 10 et pas A)

De plus j'ai optimisé dans la même optique le truc avec "if K"
sub("TPNEFSRV",[B](J,6),1 avec [-B-](J,6) une valeur entre 1 et 8.
avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
Tu peux héberger le code sur Mirari.

Pour l'optimisation globale, je ne peux pas t'aider puisque je ne sais pas à quoi correspondent les vars.

Par contre, en ce qui concerne l'optimisation locale :

Pour l'affichage, tu vois que tu répètes 4 fois la même chose pour chaque {E}n

Il suffit d'exprimer les constantes ajoutées à I et J en fonction de n.

Hop : I+4(n<3)(2(n=2)-1
Et : J+3(n>2)(2(n=4)-1


Pour la navigation avec le curseur, tu répètes 2 fois la ligne Text({-},...
Donc faut la mettre avant le If (puisque cette ligne est toujours exécutée).

Pour l'affectation ... Fais plutôt ça :
:iPart(10fPart(10^-θ∟Z([A](X,6

Pour l'affichage, débrouille-toi (en prenant le modèle de l'affichage précédent, mais un peu différent).


Si tu veux que je t'aide pour l'optimisation globale, donne moi la structure de ton jeu et la liste des vars.
Baruch (./25) :
Pour l'affichage, tu vois que tu répètes 4 fois la même chose pour chaque {E}n

Il suffit d'exprimer les constantes ajoutées à I et J en fonction de n.

Hop : I+4(n<3)(2(n=2)-1
Et : J+3(n>2)(2(n=4)-1


Ouai je connais, je vais voir ça.
Baruch (./25) :
Pour la navigation avec le curseur, tu répètes 2 fois la ligne Text({-},...
Donc faut la mettre avant le If (puisque cette ligne est toujours exécutée).


C'est voulu, depuis que j'ai tout modifié peut être que ça ne sert plus à rien de dupliquer ce texte d'effacement, je vais tester.
Baruch (./25) :
Pour l'affectation ... Fais plutôt ça :
:iPart(10fPart(10^-θ∟Z([A](X,6


Ouai c'est ce que je venais de me dire.
avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
myst6re n2 (./26) :
Baruch (./25) :
Pour l'affichage, tu vois que tu répètes 4 fois la même chose pour chaque {E}n

Il suffit d'exprimer les constantes ajoutées à I et J en fonction de n.

Hop : I+4(n<3)(2(n=2)-1
Et : J+3(n>2)(2(n=4)-1


Ouai je connais, je vais voir ça. Bon, c'est un peu plus lent...
Baruch (./25) :
Pour la navigation avec le curseur, tu répètes 2 fois la ligne Text({-},...
Donc faut la mettre avant le If (puisque cette ligne est toujours exécutée).


C'est voulu, depuis que j'ai tout modifié peut être que ça ne sert plus à rien de dupliquer ce texte d'effacement, je vais tester.
Baruch (./25) :
Pour l'affectation ... Fais plutôt ça :
:iPart(10fPart(10^-θ∟Z([A](X,6


Ouai c'est ce que je venais de me dire.

avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
Baruch (./25) :
Pour l'affichage, tu vois que tu répètes 4 fois la même chose pour chaque {E}n

Il suffit d'exprimer les constantes ajoutées à I et J en fonction de n.

Hop : I+4(n<3)(2(n=2)-1
Et : J+3(n>2)(2(n=4)-1


C'est un peu plus lent...

(lol impossible d'éditer, ça me créé un nouveau message à chaque fois ! ah non c'est bon maintenant)
avatar - TI-Editor ! Éditez vos programmes On-line !
- WikiSquare Le wiki des jeux Square Enix !
Oué c'est vrai, faut voir si à ce moment du code tu as besoin que ça aille vraiment vite ou pas. Tu peux aussi obtenir les incréments avec une liste.
Baruch (./20) :
very -> attention, avec E on ne peut pas mettre de puissance variable.


Ha ? même en parenthèsant ? (pour excuse je ne fais plus trop de ti-basic z80 depuis des années wink )

Sinon, pour uploader du code avec un simple copier-coller depuis Ti-graph-link, on peut utiliser zTXT ( http://tiforge.info/zTxt/ )