1

Voilà, cela fait 1 ans que je bidouille un peu avec ma Ti 82 stats des petit programmes plus ou moins utile, mais tous assez simple (genre : "compte a rebours", et d'autre truc pouvant servirent en cours)

Bref, j'ai décidé de créé un petit jeu.
Mes connaissances en la matière reste limité, mais bon, j'espérais pouvoir me débrouiller seul...bah non !

J'avais fait quelque test pour faire bouger un points ou un carré sur l'écran et jusque a present sa fonctionné trés bien.

Mais dés que j'ai essayer d'en faire un jeu, sa ne fonctionne plus (et j'en suis qu'au debut fou )

Bref, un petit exemple vaux mieux qu'un long discours :

:dispgraph
:ClrDraw
:CoordOff
:AxesOff
:0->T
:0->S
:0->A
:-5->B
:randint (-8,8) -> C
:randint (-8,8) -> D
: [...menu...] (j'abreg')
:While 1
:getKey -> K
:Pt-On (A,B,2) (point "personnage")
:Pt-On (C,D,3) (point "objectif" )
:If K=24
:Then
:A-1->A
:Pt-Change (A+1,B)
:If K=26
:Then
:A+1->A
:Pt-change (A-1,B,2)
:If K=25
:Then
:B+1->B
:Pt-Change (A,B-1,2)
:If K=34
:Then
:B-1->B
:Pt-Change (A,B+1,2)
:If A=C and B=D
:Then
: S+1->S (S étant un compteur pas encors mis en place grin )



Voilà pour le moment il n'y a que sa...et sa ne fonctionne pas. En faite, lorsque je lance le programme, le point "personnage" ne se déplace pas du tout. Le curseur du graph re-apparaît et se déplace comme quand on appuie simplement sur grph.

Je ne comprend pas mon erreur et, si quelqu'un pouvait m'aider, sa m'arrangerais beaucoup !


J'ai ensuite une nouvelle question : Et il possible d'intégrer plusieurs boucles simultané dans un programme ? Je m'explique: je voudrais que pendant le jeu des ligne se déplace sur l'écran de manière a présenté des obstacles au joueur. Seulement si le déplacement de ces lignes est dans la même boucle que le déplacement du personnage, les lignes ne bougerons que lorsque le joueur déplacera sont personnage.

Voilà j'espère avoir été assez clair... hehe

2

Bien sur qu'on peut mettre des boucles dans des boucles (mais après ça ram un peu...). Sinon ton problème vennai principalement du manque des "End" à la fin de chaque boucle, voici ce que j'ai fait (c'est pas otpimiser, on est d'accord.) :
ClrDraw:CoordOff:AxesOff
0->T:0->S:0->A:-5->B
randInt(-8,8)->C
randInt(-8,8)->D
While 1
getKey->K
Pt-On(A,B,2)
Pt-On(C,D,3)
If K=24:Then:A-1->A:Pt-Change(A+1,B):End
If K=26:Then:A+1->A:Pt-Change(A-1,B,2):End
If K=25:Then:B+1->B:Pt-Change(A,B-1,2):End
If K=34:Then:B-1->B:Pt-Change(A,B+1,2):End
If A=C and B=D:Then: S+1->S:End End


Voilà, j'éspère t'avoir aidé (j'ai pas tester le programme mais il devrai marcher). Si tu as d'autre problèmes n'hésite pas à en parler.

3

( perso j'ai toujours trouvé la comande Pt-Change assez moche cheeky )
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

4

( perso j'ai toujours trouvé la comande Pt-Change assez moche cheeky )


Pas faux ! D'ailleurs, sa marchais mal, je l'ai remplacé par Pt-Off.

En tout cas, merci de ton aide Deeph. Au moins sa marche pour le moment. grin
Si tu as d'autre problèmes n'hésite pas


Il y a des chance que d'autre truc m'echappe tongue

5

j'ai justement ecrit un tutorial hier qui n'est pas exactement ce que tu cherches mais qui pourrait t'aider, au moins dans les deplacements:
http://syfo-dias.skyblog.com/

6

Ah, il a l'air bien ton blog !

J'ai pas l'habitude de parcourire les blog, mais le tien va faire exeption !

7

ben c'est sur la premiere page

8

Voilà, je coince encors sur quelque chose. Désolé.

(si mes questions sont trop simple, déplacez le topique vers la section débutant, sa ne me vexera pas grin )

Donc, je voudrais maintenant mettre en mouvement une croix sur l'écran (une grande croix (sur toute la longueur et la hauteur)

Je cherche à lui donner un mouvement aléatoire. (en gros, il s'agit d'un obstacle en mouvement, le joueur devant passer d'un coté a l'autre de l'écran pour l'éviter )

J'ai utilisé les fonctions "vertical" et "horizontal".

En gros, le code donne sa:

:Fix 0
:While 1
:RandInt (0,1) ->A:End (dans le doute, j'ai aussi essaye sans ces 2 "end" là)
:RandInt (0,1) -> B:End
:If A=0 : Then : C+1 ->C : End
:If A=1 : Then : C-1->C : End
:If B=0 : Then : D+1 ->D : End
:If B=1 : Then : D-1 ->D : End
:Vertical C : End
:Horizontal D : End
:If C>10 : Then : C-20->C
:If D>10 : Then : D-20->D
:End


Bah...les barres ne bouge pas. (Elle n'apparaissent pas toujours, pourtant mon repert a bien pour maximum 10 et -10 )

Ensuite, même si sa marchait, il me resterais un problème : Ce code n'efface pas les lignes : elles se deplacerais mais en restant a chaque fois derrière... Alors, comment faire pour effacer toute une ligne à la fois ? (sans supprimer points par points avec pt-off, c'est possible ?)


Et encors merci pour votre aide !

9

Il faut faire :
While 1
RandInt (1,4)->A (pas de End là, ce n'est pas une boucle)
If A=1:Then: C+1->C:End
If A=2:Then: C-1->C:End
If B=3:Then: D+1->D:End
If B=4:Then: D-1->D:End
Vertical C
Horizontal D
If C>10:Then: C-20->C:End
If D>10:Then: D-20->D:End End


Voilà ce que j'ai modifier :

- Pour le "randInt(", une seul variable suffit;
- Il n'y a pas de "End" derriere "Vertical" et "Horizontal" car ce ne sont pas des boucles non plus.
- Il manquait les "End" derriere "If C..." et "If D...", car là, ce sont des boucles.

Je n'ai pas tester non plus mais ça devrai marcher. J'éspère t'avoir encore un peu aider lol smile

10

petite remarque: ta modification de deux randint en un seul n'est pas du tout équivalente, puisque au ./8 il a y forcément un mouvement gauche/droite et un haut/bas (indépendant par ailleurs..), alors que toi tu n'introduit qu'un seul mouvement distribué aléatroirement sur haut/bas/gauche/droite.
Il y a bien effectivement 4 possibilités dans chacun des cas, mais elles sont assez différentes: {gauche,droite,haut,bas} contre {gauche+haut,gauche+bas,droite+haut,droite+bas}


Sinon effectivement Clown noir, tu devrais révise run peu tout ce qui structures et boucles...

j'ai également envie de te dire que tu peux te dispenser des 'then...end' lorsqu'il n'y a qu'une seule instruction conditionelle derrière un if, mais bon c'est p-t pas plus mal de comencer à conaitre coment ça marche 'normalement'
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

11

Effectivement on peut mettre deux "randInt(" si on veux que les mouvements gauche-droite et haut-bas soivent utiliser en même temps. Sinon les boucles c'est simples, je peut te les décrire ici vite fait :

"While 1
[...]
End"

Cette boucle répète tout ce qu'il y a entre "While 1" et "End" à l'infini.

"For(NomDeVariable,ValeurDuDébut,ValeurDeFin,NombrePourL'IncrémentationDeLaVariable
[...]
End"

Cette boucle répète tout ce qu'il y a entre "For(" et "End" pendant un certain nombre de tour, exemple :

"For(A,0,2
Disp "TI"
End"

Répétera deux fois "TI" à l'écran.

"Repeat NomDeVariable
[...]
End"

Cette boucle ce répétera jusqu'a ce que la variable ne soit plus égale à 0.

Bref, "Repeat" = "Tant que" et "While" = "Jusqu'a ce que". Voilà smile (J'ai pas tout écrit mais ça devrai être un bon début).

12

Remarque2: Si t'a envie Deeph, et comme je l'ai expliqué implicitement dans le ./10 (4 possibilitées), tu peux n'utiliser qu'une seule variable, mais dans ce cas tu sera amené à faire:

[nosmile]
RandInt (1,4)->A
If A=1:Then: C+1->C:D+1->D:End
If A=2:Then: C+1->C:D-1->D:End
If A=3:Then: C-1->C:D+1->D:End
If A=4:Then: C-1->C:D-1->D:End 



Mais je ne suis pas du tout persuadé que tu gagne en temps par rapport à

RandInt (0,1) ->A
RandInt (0,1) -> B
If A=0:C+1 ->C
If A=1:C-1->C
If B=0:D+1 ->D
If B=1:D-1 ->D


( par contre en taille du programme, tu gagne à utiliser 2 variables )

Ensuite, pour continuer à être pointilleux:
pour while et repeat, la syntaxe génral s'énonce normalement plutôt comme:

While (proposition_boléene)
..
.. instructions à éxécuter
End


ie "variable" ce n'est pas très précis comem terme. (même si bien sur la Ti sait faire une conversion trivial variable réele -> condition bolléene, qui se résume à:
si variable_réel !=0 => proposition_boléenne = 1
Si varible_réel =0 => proposition_boléenen = 0
)

L'avantage pour un débutant de lui dire 'proposition boléenne" est qu'il comprenne bien qu'il peut faire des teste, genre:
While ( n < 15 ):....:End

edit: oups j'ai oublié de remplacer un B par un A (c/c...)
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

13

Je sais mais c'est pour ça que j'ai marquer :
(J'ai pas tout écrit mais ça devrai être un bon début)


J'ai juste citer quelques boucles pratiques. Après c'est sur qu'on peut faire des tests avec les fonctions pour les boucles.

14

Merci pour cette explication du fonctionnement des boucles ! cool

Je vous passe une image de ce que j'eesaye de faire, si sa peut vous aider a comprendre mon erreur.

cadrevz6.gif

Voilà en gros, c'est sa.
(ce n'est pas un screen, juste une image que j'ai faite pour illustré ce que je dit grin)

15

Bon bah tu doit faire avec deux "randInt(" pour que ça fasse ce que tu voulai :
While 1
randInt(1,2)->A
randInt(1,2)->B
If A=1:Then: C+1->C:End
If A=2:Then: C-1->C:End
If B=1:Then: D+1->D:End
If B=2:Then: D-1->D:End
Vertical C
Horizontal D
If C>10:Then: C-20->C:End
If D>10:Then: D-20->D:End End


Voilà là ça devrai faire ce que tu voulai au départ.

16

Non, les tests sur B sont incorrects.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

17

Ha ouais, j'édite tout de suite.

18

ok, j'avais recifié sa tout seul entre temps (faut bien que j'arrive a faire des truc hein tongue)
merci !

Et sinon, quelqu'un a une idée pour mon autre question ? (pour la suppretion des ligne compléte)



[cite=very]j'ai également envie de te dire que tu peux te dispenser des 'then...end' lorsqu'il n'y a qu'une seule instruction conditionelle derrière un if, mais bon c'est p-t pas plus mal de comencer à conaitre coment ça marche 'normalement'[/cite]

Bah en faite, avant je faisait comme sa, sans mettre tout les then (juste là ou il fallait quoi) mais comme certain de mes programmes plantaient, j'ai preferé en mettre partout pour être sur de pas faire une boulette là dessus. Donc, je prefert faire le normalement comme tu dit, pour le moment. grin

19

Tu veux dire supprimer les lignes deja à l'écran ? Pour ça tu peut mettre un "ClrDraw" juste avant les vertical et horizontal.

20

ouais, c'est ce que j'ai fat pour le moment, mais pour un jeu, sa fait tout clignoter. Pas super pratique quoi.
Mais existe-t-il une autre solution plus...hestetique ? même si elle doit être plus lourde, sa ne me pose pas de problémes.

Enfin, je ne veux pas non plus vous deborder de questions, donc aprés, je me calme grin

21

Deeph :
Je sais mais c'est pour ça que j'ai marquer :
(J'ai pas tout écrit mais ça devrai être un bon début)


Je sais, mais bon je préferais l'indiquer, pour ce que ça coute.

Deeph :
J'ai juste citer quelques boucles pratiques. Après c'est sur qu'on peut faire des tests avec les fonctions pour les boucles.

bha j'ai pas les mêmes 'boucles pratiques' que toi alors smile Je suis un fanatique du for –je déteste les While 1, je n'utilise While que rarement et avec une condition non triviale–, et je n'ai jamais utilisé les repeat: ça peut toujours se remplacer par un while ou un for très façielment, à tel point que ça ne me vient jamais à l'idée d'utiliser un repeat.

Pour les boucles infi, j'ai toujours eu une préférence pour les for(i,1,1E99). ( préférence esthétique, léger avantage en temps -si je me souviens de mes testes sur le sujet-, et utilité du compteur. )

Sinon, je n'ai pas été exhaustif non plus, par exemple en ce qui concerne le pas optionel dans le for(. (qui se rével parfois assez pratique, ça économise quelques multiplications)

«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

22

Clown noir :
ouais, c'est ce que j'ai fat pour le moment, mais pour un jeu, sa fait tout clignoter. Pas super pratique quoi.
Mais existe-t-il une autre solution plus...hestetique ? même si elle doit être plus lourde, sa ne me pose pas de problémes.

Enfin, je ne veux pas non plus vous deborder de questions, donc aprés, je me calme biggrin.gif

Soit tu 'sais' ou sont les ancienes lignes et tu les efface proprement (avec des ptoff, pxloff, pxlineoff et ce genre de trucs..) –c'est souvent la meilleur solution–, soit tu y vas au ClrDraw mais en diminuaant la fréquence ( tu t'arrange pour que plus de temps passe entre deux ClrDraw) lorsque tu peux le faire.

mais rien ne t'empéche d'imaginer des trucs plus créatifs: genre tu fais un programme qui efface l'écran avec PxlOff dans une double boucle triso (comme ça , cela sera tellement lent que ça devrait moins clignoter cheeky )
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

23

et je n'ai jamais utilisé les repeat: ça peut toujours se remplacer par un while ou un for très façielment, à tel point que ça ne me vient jamais à l'idée d'utiliser un repeat.


Normal, While est l'inverse de Repeat, donc :

While A=20 et Repeat A=/=20 sont éxactement la meme chose.

24

very
: Pour les boucles infi, j'ai toujours eu une préférence pour les for(i,1,1E99). ( préférence esthétique, léger avantage en temps -si je me souviens de mes testes sur le sujet-, et utilité du compteur. )
sick C'est ultra moche ça ! Pour une boucle infinie, le mieux en BASIC reste sûrement un While True (ou While 1 si le mot-clé True n'existe pas dans votre environnement)
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

25

/23> Pour répéter, il me semble qu'un For(I,1,1E99 est plus rapide sur Ti z80 qu'un While 1 – Bon ça faut s'appeler Ti, chépow, j'imagine que comme avec n'importe quel autre nombre ils doivent convertir le '1' en expression booléene interne triso, puis tester la proposition – et l'indice de boucle est en général pas inutile (donc aller le refaire à la main dans un While 1 va faire perdre encor plus de temps...)

Puis je sais pas, je dois trouver ça trop fonctionel, je n'ai jamais beaucoup aimé les While tongue


./23> ha j'ai du confondre (à force de ne jamais l'utiliser ), je croyais que la différence était le test en début/fin du bloc d'instructions. ( juste pour une contraposition, c'est effectivement assez con...)
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

26

Bon, après avoir bien assimilé vos conseils, je me suis relancé dans plusieurs tentatives de programmation pour ce jeu. Tentatives toutes infructueuse...

Bref, j'ai complètement revus mes objectif, et j'ai décidé de faire un jeu avec pour base, la fonction Output(.

J'ai d'ailleurs réussit quelque chose de bien plus avancé qu'en utilisant le graph.
Enfin, il reste un truc qui me chiffonne. Ce nouveau jeu (qui en faite, au fils des modification, n'as strictement plus rien a voir avec le premier grin ) consiste a dirigé un "vaisseau", et a éviter des obstacle qui travers l'écran.

Donc, les grande ligne du code: (je vous explique mon problème a la fin)


:5->E:15->F:5->S:1->A:1->B:0->D
:ClrHome
:Menu(...etc...)
:While 1
: F-1->F
:ClrHome (j'ai remarqué qu'un ClrHome n'était pas vraiment gênant avec un Output(... )
:Output(E,F,"X") (un obstacle)
:Output(8,9, «VIE» )
:Output(8,15,S)
Output(A,B,">") (le personnage “vaisseau” )
:GetKey->K
:If K=25 or D=1 :Then :A-1->A: 1->D:End
:If K=34 or D=2 :Then :A+1->A: 2->D:End
:If K=24 or D=3 :Then :B-1->B: 3->D:End
:If K=26 or D=4 :Then :B-1->B: 4->D:End
:If A<1 : Then :A+7->A:End
:If B<1 : Then :B+15->B : End
:If A>7 : Then :A-7->A : End
:If B>15 : Then :B-15->B : End
:If F<1 : Then : F+15->F : End (ligne qui devrait faire revenire le x à droite de l'écran...enfin, je crois tongue)
:If A=E and B=F: Then : S-1->S: End
:If K=105 : Then : Disp “Pause” : Pause : End
:End


Bon, voilà, en gros, le problème c’est que lorsque le X (l’obstacle) arrive a gauche de l’écran, au lieux de suivre la ligne :
:If F<1 : Then : F+15->F : End


J’ai une ERR : DOMAIN

Voilà, si vous avez une idée sur le pourquoi du comment…

27

Habituelement les erreurs Domain provienne du fait que tu essai d'afficher quelque chose en dehors de l'écran. A mon avis pour corriger ça il faudrai la placer plus haut dans ta boucle afin que le programme vérifie les colisions avant d'incrément la variable F. Essai comme ça et dit moi si tu ne comprend pas quelque chose (Sinon t'as fait de beau progrès en programmation, maintenant y'a plus d'erreur dans les boucles smile).

28

Ouais, t'as raison, c'est sa, sa fonctionne parfaitement maintenant.
Chapeau !
(Sinon t'as fait de beau progrès en programmation, maintenant y'a plus d'erreur dans les boucles smile ).

Merci bien.

Il me reste plus qu'as étoffer le programmes, et j'aurais fini mon premier petit jeu ! (interpretez cette phrase comme l'expression d'une satisfaction personnelle tongue)

Encors merci de votre aide a tous !

29

Tu nous dira dès qu'il est finit, j'aimerai bien le tester grin

30

ok, pas de problèmes ! (enfin, si un: il serra en TAP, j'ai pas de cable TI/PC )

Et puis, c'est vraiment un truc simple et classique.