1
Bon voilà, j'essai de faire un RPG avec les mouvement sur l'écran graphique de la TI... Mais j'ai un problème : quand je test le pixel qui doit ce trouver devant le personnage (un carré...), normalement avec pxl-Test(Y,X)->P, si le pixel est étein, il doit me donner 0 sinon 1. Et ensuite, le personnage peut avance si P est égale à 0 sinon non, mais c'est là que ça marche pas... Bon je met le code source parce que j'arrive pas bien à éxpliquer :
Lbl 7
Repeat K=45
X->A:Y->B
RecallPic 3
getKey->K
If K=25:Goto 8
If K=34:Goto 9
If K=24:Goto 10
If K=26:Goto 11
Pt-On(X,Y,2)
End
Lbl 8
pxl-Test(Y+2,X)->P
If P=0:Y+1->Y:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 9
pxl-Test(Y-2,X)->P
If P=0:Y-1->Y:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 10
pxl-Test(Y,X-2)->P
If P=0:X-1->X:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 11
pxl-Test(Y,X+2)->P
If P=0:X+1->X:Pt-Off(A,B,2):Goto 7 If P=1:Goto 7


Bon voilà, là je comprend pas ça devrai marcher...
2
oui l'erreur reside dans le
pxl-Test(Y,X+2)->P
que tu mets au deplacements...
je m'explique: la TI va regarder si le pixel qui correspond au point du carre est allume:
comme ton point tu l'as dessinne en carre (pton(x,y,3) d'apres ce que tu dis, le centre du carre qui est le point lui meme n'est pas allumme, donc la TI va te faire avancer...
mais normalemet apres cet avancement de trop, il devrait s'arreter ton perso, non?
3
Enfaite c'est Pt-On(X,Y,2), donc c'est un carré. Mais comme, par exemple, pour aller vers le haut, j'ai fait : pxl-Test(Y+2,X)->P, le Y+2 devrait verifier le pixel qui est au dessu du carré et non pas au centre... Sinon j'ai toujours pas compris d'où viens le problème...
4
ah oui je comprends...
je vais mediter la dessus ^^
5
oui j'ai compris.
as tu oublie d'ecrire les then et end ou c'est juste en le tapant dans ce topic?
If P=0:X-1->X:Pt-Off(A,B,2):Goto 7
deviendra
If P=0:Then:X-1->X:Pt-Off(A,B,2):Goto 7 :End
6
Je croit que j'ai du les oublier... Je vais refaire le code avec et je te dit si c'était ça qui n'aller pas.

Edit : Nan, c'est bien ce que j'pensait, y'a un problème quand on met "End" à la fin de la ligne...
7
le Y+2 devrait verifier le pixel qui est au dessu du carré et non pas au centre... Sinon j'ai toujours pas compris d'où viens le problème...

C'est bien un carré de 3 sur 3 avec un trou au milieu ?
Alors dans ce cas si t'es collé au carré, Y+1 c'est la ligne du bas du carré, Y+2, c'est le centre ou y a rien, et Y+3 c'est la ligne du haut du carré non ?
8
Ouais, c'est un carré de trois pixel sur trois avec le centre vide. Mais normalement, Y c'est le milieu, Y+1 c'est la ligne du haut, et Y+2 le pixel devant le carré (enfin si je me trompe pas...) et Y+3 c'est 2 pixels au dessus du carré donc c'est trop. Voilà comment je voit le truc :

pixel4hc.png

(bah oui j'ai que ça à faire j'suis en vacance ^^)
9
Ah j'ai compris, le carrée c'est le perso... grin
Dans ce cas je penses en fait que Y,X c'est les coordonnées du point en bas a droite du carré.
Ah ouais, peut être que c'est ça qui aller pas... Je vais voir ça parce que là vraiment je comprenai pas, je croiyait que c'était le centre du carré le Y,X ... Je vais voir si c'était ça.

Edit : Nan ça marche toujours pas, bon je met le nouveau code (qui me parrait un peu mieu...
ClrHome:ClrDraw:CoordOff:AxesOff:GridOff:1->Xmin:1->Ymin:63->Ymax:95->Xmax
Lbl 7
Repeat K=45
X->A:Y->B
RecallPic 3
getKey->K
If K=25:Goto 8
If K=34:Goto 9
If K=24:Goto 10
If K=26:Goto 11
Pt-On(X,Y,2)
End
Lbl 8
pxl-Test(Y+4,X-1)->P
If P=0:Y+1->Y:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 9
pxl-Test(Y-1,X-1)->P
If P=0:Y-1->Y:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 10
pxl-Test(Y+1,X-3)->P
If P=0:X-1->X:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 11
pxl-Test(Y+1,X+1)->P
If P=0:X+1->X:Pt-Off(A,B,2):Goto 7 If P=1:Goto 7
oui deja tes points ne correspondent pas a tes pixels, normalement c'est ça le probleme, remplace
63->Ymax:95->Xmax
par
62->Ymax:94->Xmax
C'est bizarre... Je sais que l'écran de la TI fait 96x64 pixels, et qu'en basic on ne peut qu'utiliser 95x63 pixels... Enfin bon, ça marche toujours pas avec 94x62 pixels. sad

Edit : Mastercalto, j'ai bien regarder les coordonnés, c'est le centre du carré le Y,X... Donc c'est le premier code qui est bon (je le remet pas il est juste au dessus).
OUI TU PEUX UTILISER 95*65 MAIS SEULEMENT SUR LES 84
oups! (caps lock)
donc sur les 82 c'est 94*62
Nan, c'est une 82 STATS que j'ai donc une 83... et je t'assure que c'est du 95x63 dessus. Sinon c'est pas 95x63 que t'as voulu dire parce que 65 pixel dans l'axe x c'est bizarre.
je sais pas mais je suis sur qu'il faut mettre 94 Xmax et 62 Ymax c'est ce que j'utilise
Syfo-Dias :
je sais pas mais je suis sur qu'il faut mettre 94 Xmax et 62 Ymax c'est ce que j'utilise

C'est vrai.

Deeph : en fait je voulais dire le point en bas a gauche, car pour les caracteres comme les lettres ou chiffres c'est comme ca.
Lles coordonnées X et Y sont le centre du carré car je n'utilise pas la fonction Text(Y,X," mais Pt-On(Y,X,2) donc c'est pas pareille. Sinon c'est bizarre ça change tout le temps, l'autre coups ça marcher pas avec 94 et 62, il me mettai des coordonnées à virgules et maintant c'est des chiffres ronds... Enfin ça règle pas mon problème.
je sais que ça ne t'avance pas dans ton probleme mais tu as inverse les deplacements:
Lbl 8
pxl-Test(Y+4,X-1)->P
If P=0:Y+1->Y:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 9
pxl-Test(Y-1,X-1)->P
If P=0:Y-1->Y:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 10
pxl-Test(Y+1,X-3)->P
If P=0:X-1->X:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 11
pxl-Test(Y+1,X+1)->P
If P=0:X+1->X:Pt-Off(A,B,2):Goto 7 If P=1:Goto 7
devient
Lbl 8
pxl-Test(Y-1,X-1)->P
If P=0:Y+1->Y:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 9
pxl-Test(Y+4,X-1)->P

If P=0:Y-1->Y:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 10
pxl-Test(Y+1,X-3)->P
If P=0:X-1->X:Pt-Off(A,B,2):Goto 7
If P=1:Goto 7
Lbl 11
pxl-Test(Y+1,X+1)->P
If P=0:X+1->X:Pt-Off(A,B,2):Goto 7 If P=1:Goto 7
Bon ok, je vais tester comme ça mais à mon avis ça ne regle pas le problème de collision si le pixels est allumé devant le carré.
voila un code qui marche sur ma 82 et qui rame pas comme le tien (il utilise une boucle et pas des labels), alors essaie le et dit moi si c'est bon:
0->X:0->Y
While 1
0->E:0->D
PxlON(A,B
Repeat G
getkey->G
End
If G=24:-1->E
If G=25:-1->D
If G=26:1->E
If G=34:1->D
If pxlTest(A+D,B+E)=0:Then:PxlOff(A,B):A+D->A:B+E->B:End End
MERCI !!! grin J'avais pas penser à faire le code comme ça mais ça marche smile Sinon je vais faire ça avec Pt-On au lieu de Pxl-On. J'ai plus qu'a faire le scénario et tout et c'est bon j'ai mon jeu top
top j'ai hate de voir ça
Je me permets de faire une remarque:
- not(pxlTest(A+d,B+E)) devrait remplacer avantageusement If pxlTest(A+D,B+E)=0
- Pourquoi utiliser des variables intermédiares ? Par ce que vous {in/de}crémenter que si la condition est remplie ? Si le test est vrai dans une grande majoritée des cas, je pense que c'est plus profitable de faire l'inverse. ( incrémenter d'abord, faire le teste, et décrémenter dans le ce cas uniquement).
Sinon, lorsque l'on est vraiment motivé pour gagner du temps (quit à perdre de la place), y'a d'autres moyens que de faire quatre tests de If sur G...faut voir et tester à chaque fois, c'pas forcément évident le gain.

Perso je pense que j'ai encore des trucs à apprendre en TI-Basic, puisque, la preuve, la commande "not(" je sais même pas à quoi elle sert... La pluparts des tutos que j'ai lu ne parler que des commandes simples et basic (genre Basic Learn, Basic tuto et plein d'autre trucs comme ça...). Enfin si vous avez des liens avec des tutos qui traitent ces commandes ou qui peuvent m'apporter des connaissances en TI-Basic, je suis preneur.
Bha là il s'agit simplement de logique booléene.
En boléen, il y a deux 'valeurs' possible: 1 (oui / positif/ vrai) et 0 (non/négatif/faux)
Not( , en français non( ( cheeky ), est simplement la Négation:
Not(A) renvoi 0 si A est vrai (1), 0 si A est faux (0)

Lorsque tu fais un test ' if (machin = truc)', la proposition (machin=truc) est une proposition booléene, qui vaut par conséquant soit 1 (si c'est vrai), soit 0 (si c'est faux).

En booléen, machin=0 est vrai si machin vaut 0, faux si machin vaut 1. (le ti-basic étent bien sur ça à machin != 0 )
Not(machin) vaut donc 1 si machin est nul, 0 si il veut 1 (par extension, si machin est différent de 0), donc est strictement équivalent à (machin=0).

Lorsque les équivalences sont moins évidentes, on peut faire des tables logiques ou utiliser des règles plus avancées.
Bon, le match à repris...
Ok, je pense avoir compris un peu mieu... Sinon quelqu'un n'aurai pas un lien vers un tuto pour mieu comprendre des commandes en Basic ?
( bha tout ce qui est testes/logique booléenne, c'est très généraliste donc tu peux lire des trucs généraux dessus et l'appliquer en ti-basic ensuite)
Sinon, jamais vraiment regarder, mais jamais vraiment vu des tutos très avancés en basic. (sauf quelques lignes décrivant une astuce particulière)

Etudier et bricoler les programmes des autres (tant que tu ne le redifuse pas, ça ne pose de toute façon aucun pb) peut permettre de pas mal progresser.

Sinon, j'ai toujours dans l'idée de faire des topics de programmation ti-basic avancé sur zFAQ, mais bon ça attendra au moins la fin de mes concours.
oui j'ai pas utilise de booleenes, parce que deja c'est pas de l'optimise, ensuite c'est pas pour moi (quoi? c'est pas un argument?) et dernierement la flemme.
J'ai toujours dans l'idée de faire des topics de programmation ti-basic avancé sur zFAQ, mais bon ça attendra au moins la fin de mes concours.


Ce serai bien de faire ça, même si ce serai dans longtemps, ça rendra service à pas mal de monde (comme moi -_-).
A propos je répète que zFAQ est ouvert à tout le monde: si qqun veux poster un article, suffit de me demander par mini-message. (sauf pour ceux qui y ont déjà accès tongue)