Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 12350
Réponses : 41
Type : discussion
Etat : réponses autorisées

(Jeu) UPMario (Jeu)

S.L le 26/07/2012 à 17:36
Salut! Je vous présente ici le résultat d'une de mes "expériences" en matière de programmation. Je voulais créer un programme où l'on pouvez faire sauter un personnage en l'air et qu'il retombe sur le sol.
J'ai donc fait dans ce programme Mario (à ma façon godgrace.gif ) qui saute du sol et qui peut se déplacer de droite à gauche. J'ai rajouté un but à ce programme en mettant des obstacles à éviter: ils apparaissent au hasard en haut ou en bas et se dirigent vers Mario, vous devez sauter ceux du bas et laisser Mario au sol quand il y a ceux du haut. Enfin, à chaque fois que vous sautez, ça vous rajoute +1 au compteur des UP et quand vous touchez un obstacle, vous perdez et voyez votre nombre de UP. Bon, assez parlé et place au programme.
PS: Deux petites images pour vous montrer la différence entre le Mario de ce programme et le vrai Mario bigmouth.gif .
Image manquante

Notez que Mario met le poing en l'air laugh.gif

Les commandes sont:
[<-] (flèche de droite) : Se déplacer à droite
[->] (flèche de gauche) : Se déplacer à gauche
[Î] (flèche du haut) : Sauter
[annul] (touche annuler) : Quitter le jeu

Nom: UPMARIO
Taille: 676 octets
Auteur: S.L

-> : flèche sto
>= : signe plus grand ou égal
<= : signe plus petit ou égal
TI Stats.fr (fonctions en Français)

Code
PROG:UPMARIO
:EffEcr
:7->A
:3->B
:6->C
:2->D
:6->E
:5->F
:5->G
:3->H
:0->I
:1->Z
:1->U
:16->Y
:9->T
:Output(1,1,"----------------   //il y a 16 tirets
:Output(2,6,"UPMARIO
:Output(4,1,"GAME BY S.L
:Output(7,5,"POUR TI 82/83
:Output(8,1,"----------------   //il y a 16 tirets
:Pause
:While 1
:If B+1=Y et A=X
:Goto 1
:If B+1=T et A=S
:Goto 1
:If F=Y et E=X
:Goto 1
:If F=T et E=S
:Goto 1
:If Z=1:7->X:If Z=2:4->X
:If U=1:7->S:If U=2:4->S
:Y-1->Y
:T-1->T
:codeTouche->K
:If K=45:Then:EffEcr:Stop:End
:If K=26:Then:B+1->B:D+1->D:F+1->F:H+1->H:End
:If K=24:Then:B-1->B:D-1->D:F-1->F:H-1->H:End
:If D<=1:Then:2->B:1->D:4->F:2->H:End
:If F>=16:Then:14->H:16->F:13->D:14->B:End
:EffEcr
:Output(X,Y,"<
:Output(S,T,"<
:Output(8,1,"----------------   //il y a 16 tirets
:Output(A,B,"JL
:Output(C,D,"*()
:Output(E,F,"*
:Output(G,H,"(-
:If G=4:G+1->G
:If E=4:E+2->E
:If C=5:C+1->C
:If A=6:A+1->A
:If K=25:Then:G-1->G:E-2->E:C-1->C:A-1->A:I+1->I:End
:If Y<=1:Then:16->Y:entAléat(1,2)->Z:End
:If T<=1:Then:16->T:entAléat(1,2)->U:End
:End
:Lbl 1
:EffEcr
:Output(4,4,"GAME OVER!
:Output(5,6,I
:Output(5,9,"UP
:Pause
:Stop


Voilà! Bon jeu à tous! bigmouth.gif
linkakro le 26/07/2012 à 18:01
Corrige cette ligne en remplaçant 16->T par 16->Y
Code
:If Y<=1:Then:16->Y:entAléat(1,2)->Z:End


C'est sympathique, surtout avec le mario, mais je m'attendais à mieux.
S.L le 26/07/2012 à 18:12
Désolé pour l'erreur de recopiage moodforlove.gif
Comme je le disais, c'est une "expérience" et comme c'est la première fois que je fais ça, c'est normal qu'il est pas parfait godgrace.gif si tu veux l'optimiser, tu es le bienvenu glasses.gif
ld le 26/07/2012 à 22:40
Il n'y a qu'à demander ? bigmouth.gif
Moi si c'est possible je voudrais quelque chose qui ressemble à çà s'il te plait happy.gif Merci S.L !
http://us.cdn4.123rf.com/168nw[...]e-est-pret.jpg
S.L le 26/07/2012 à 22:50
Ok, je te fais ça tout de suite happy.gif
ld le 26/07/2012 à 23:11
Rhoo minied.gif <3 laugh.gif
S.L le 27/07/2012 à 00:03
Voilà ta bannière glasses.gif
Image manquante
ld le 27/07/2012 à 00:35
Mille merci ! C'est tout juste impressionnant bigmouth.gif
Tu as un générateur de Gif ?
S.L le 27/07/2012 à 10:26
De rien happy.gif T'as plus qu'à la mettre dans ta signature !
Non ce n'est pas un générateur mais plutot un editeur, je crée chaque image une par une /il y en a une quarantaine/ et je les assemble avec ce logiciel. Je peux même définir la durée de chaque image laugh.gif
S.L le 27/07/2012 à 14:42
Juste pour revenir au sujet et mettre celui de bannière d'un autre côté, j'ai créé un sujet spécialement pour:
https://tout82.pages-perso.fre[...].php?sujet=3369
snap le 30/07/2012 à 00:32
Un peu d'optimisation ne fait pas de mal ;p

Code
:If B+1=Y et A=X
:Goto 1
:If B+1=T et A=S
:Goto 1
:If F=Y et E=X
:Goto 1
:If F=T et E=S
:Goto 1


Peut tout simplement se transformer en

Code
:If B+1=T et A=S ou B+1=Y et A=X ou F=Y et E=X ou F=T et E=S
: Goto 1


Ensuite :

Code
:If K=26:Then:B+1->B:D+1->D:F+1->F:H+1->H:End
:If K=24:Then:B-1->B:D-1->D:F-1->F:H-1->H:End


Peut devenir :

Code
(K=26)-(K=24 -> Z
B+Z -> B : D+Z -> D : F+Z -> F : H+Z -> H


Puis :

Code
:If G=4:G+1->G
:If E=4:E+2->E
:If C=5:C+1->C
:If A=6:A+1->A


Devient

Code
G+(G=4 -> G
E+2(E=4 -> E
C+(C=5 -> C
A+(A=6 -> A


Sinon, pour perdre tu peux mettre toutes les instructions dans le while que l'on transformera en repeat pour plus de confort crazy.gif

A la fin, ça donne :

Code
PROG:UPMARIO
:EffEcr
:7->A
:3->B
:6->C
:2->D
:6->E
:5->F
:5->G
:3->H
:Effvar I1->Z
:1->U
:16->Y
:9->T
:Output(1,1,"----------------   //il y a 16 tirets
:Output(2,6,"UPMARIO
:Output(4,1,"GAME BY S.L
:Output(7,5,"POUR TI 82/83
:Output(8,1,"----------------   //il y a 16 tirets
:Pause
:Repeat B+1=Y et A=X ou B+1=T et A=S ou F=Y et E=X ou F=T et E=S
:If Z=1:7->X:If Z=2:4->X
:If U=1:7->S:If U=2:4->S
:Y-1->Y
:T-1->T
:codeTouche->K
:If K=45:Then:EffEcr:Stop:End
(K=26)-(K=24 -> Z
B+Z -> B : D+Z -> D : F+Z -> F : H+Z -> H
:If D<=1:Then:2->B:1->D:4->F:2->H:End
:If F>=16:Then:14->H:16->F:13->D:14->B:End
:EffEcr
:Output(X,Y,"<
:Output(S,T,"<
:Output(8,1,"----------------   //il y a 16 tirets
:Output(A,B,"JL
:Output(C,D,"*()
:Output(E,F,"*
:Output(G,H,"(-
:G+(G=4 -> G
:E+2(E=4 -> E
:C+(C=5 -> C
:A+(A=6 -> A
:If K=25:Then:G-1->G:E-2->E:C-1->C:A-1->A:I+1->I:End
:If Y<=1:Then:16->Y:entAléat(1,2)->Z:End
:If T<=1:Then:16->T:entAléat(1,2)->U:End
:End
:Lbl 1
:EffEcr
:Output(4,4,"GAME OVER!
:Output(5,6,I
:Output(5,9,"UP
:Pause


Voila, si quelque chose pose un probleme n'hesitez pas, je n'ai pas testé mes modifications mais normalement, pas de problèmes winkle.gif
S.L le 30/07/2012 à 11:12
Merci, mais je n'ai pas compris ça:
snap a écrit :

Code
(K=26)-(K=24 -> Z
B+Z -> B : D+Z -> D : F+Z -> F : H+Z -> H

...
Code
G+(G=4 -> G
E+2(E=4 -> E
C+(C=5 -> C
A+(A=6 -> A

Tu pourrais m'expliquer? minied.gif
snap le 30/07/2012 à 12:46
Bien sur! happy.gif

Il faut d'abord savoir que j'ai utilisé dans ces deux méthodes des bolééns.
Des bolééens (je sais plus si sa s'écrit comme ça :p ) sont des conditions (comme le if) que te renvoie 1 ou 0 en fonction de la véracité de la condition.

Exemple :

Code
1 -> A
2+(A=1)


Te donnera 3 car A est égal à 1 donc (A=1) te renvoie 1 qui additionner a 2 te donne trois. Je sais pas si je suis compréhensible :p

donc :

Code
(K=26)-(K=24 -> Z
B+Z -> B : D+Z -> D : F+Z -> F : H+Z -> H


Dans ce code : Si K=26, alors (K=26)-(K=24) donne 1-0 donc Z=1
Si K=24, alors (K=26)-(K=24) donne 0-1 donc Z=-1
Si K=/= 24 et K=/=26, alors (K=26)-(K=24) donne 0-0 donc Z=0

Pour l'autre partie c'est pareil :

Code
G+(G=4 -> G
E+2(E=4 -> E
C+(C=5 -> C
A+(A=6 -> A


Si G=4, alors (G=4) renvoie 1 donc G+(G=4) donne G+1
Si E=4, alors 2(E=4) renvoie 2(1) qui donne 2 donc E+2(E=4) donne E+2
Etc

Voila, j'espere avoir été claire, si il y a des trucs que tu ne comprend pas n'hésite pas winkle.gif
S.L le 30/07/2012 à 14:34
Ok merci c'est clair happy.gif si j'ai besoin, je te ferais appel!
linkakro le 30/07/2012 à 18:44
snap a écrit :
Code
:If K=26:Then:B+1->B:D+1->D:F+1->F:H+1->H:End
:If K=24:Then:B-1->B:D-1->D:F-1->F:H-1->H:End
Peut devenir :
Code
(K=26)-(K=24 -> Z
B+Z -> B : D+Z -> D : F+Z -> F : H+Z -> H
Puis :
Code
:If G=4:G+1->G
:If E=4:E+2->E
:If C=5:C+1->C
:If A=6:A+1->A
Devient
Code
G+(G=4 -> G
E+2(E=4 -> E
C+(C=5 -> C
A+(A=6 -> A
Ceci réduit le poids du code mais ralentit le programme.
aide le 11/09/2012 à 22:11
a ligne Output(s,t,"<
ma calculatrice m'indue une erreurs sur le dernier signe pourquoi quelqu’un peu n'aider happy.gif
blg_flg le 12/09/2012 à 13:06
A mon avis, cela vient du fait que S et T ne sont pas définis ou pas sur l'écran.

Quelle est la sorte d'erreur? Erreur syntaxe? Domaine? etc.
owd le 20/09/2012 à 18:35
Moi j'ai une ligne qui ne passe pas:

:Output(G,H,"(-

Il me dit erreur: Domaine.
Cytropus le 20/09/2012 à 18:40
Vérifie bien le programme et regarde combien vaut G et H
seluj78 le 22/09/2012 à 01:03
Entaléas c quoi en anglais ? J'ai pas la ti en fr moi !! maxiangry.gif
Samos le 22/09/2012 à 10:24
RandInt(
Ti-82-stats-fr-snake le 28/09/2012 à 19:13
Bonjours, j'ai une erreur domaine au niveau d'ICI:
Code
PROG:UPMARIO
:EffEcr
:7->A
:3->B
:6->C
:2->D
:6->E
:5->F
:5->G
:3->H
:0->I
:1->Z
:1->U
:16->Y
:9->T
:Output(1,1,"----------------   //il y a 16 tirets
:Output(2,6,"UPMARIO
:Output(4,1,"GAME BY S.L
:Output(7,5,"POUR TI 82/83
:Output(8,1,"----------------   //il y a 16 tirets
:Pause
:While 1
:If B+1=Y et A=X
:Goto 1
:If B+1=T et A=S
:Goto 1
:If F=Y et E=X
:Goto 1
:If F=T et E=S
:Goto 1
:If Z=1:7->X:If Z=2:4->X
:If U=1:7->S:If U=2:4->S
:Y-1->Y
:T-1->T
:codeTouche->K
:If K=45:Then:EffEcr:Stop:End
:If K=26:Then:B+1->B:D+1->D:F+1->F:H+1->H:End
:If K=24:Then:B-1->B:D-1->D:F-1->F:H-1->H:End
:If D<=1:Then:2->B:1->D:4->F:2->H:End
:If F>=16:Then:14->H:16->F:13->D:14->B:End
:EffEcr
:Output(X,Y,"<      <----------------------------ICI
:Output(S,T,"<      <----------------------------ICI AUSSI JE PENSE PLEASE HELP
:Output(8,1,"----------------   //il y a 16 tirets
:Output(A,B,"JL
:Output(C,D,"*()
:Output(E,F,"*
:Output(G,H,"(-
:If G=4:G+1->G
:If E=4:E+2->E
:If C=5:C+1->C
:If A=6:A+1->A
:If K=25:Then:G-1->G:E-2->E:C-1->C:A-1->A:I+1->I:End
:If Y<=1:Then:16->Y:entAléat(1,2)->Z:End
:If T<=1:Then:16->T:entAléat(1,2)->U:End
:End
:Lbl 1
:EffEcr
:Output(4,4,"GAME OVER!
:Output(5,6,I
:Output(5,9,"UP
:Pause
:Stop

Au niveau de ça: " :Output(X,Y,"< ".
J'attend vite vos réponse, merci.
Cytropus le 28/09/2012 à 19:40
vérifie bien ces deux passages,
Code
:1->Z
:1->U
:16->Y

Code
:If Z=1:7->X:If Z=2:4->X
:If U=1:7->S:If U=2:4->S
:Y-1->Y


L'erreur domaine signifie que les coordonnées ne sont pas dans l'écran.
En espérant t'avoir aidé cupsmiley.gif
Kevin le 15/09/2013 à 20:42
Salut ! Alors je viens de tomber sur ce post et je l'ai trouvé sympa. Du coup, je l'ai recopié sur ma calculatrice. Mais au moment de lancer le programme, on m'indique une erreur de syntaxe au niveau de : :Output(8,1,---------------- et plus précisément au niveau du tiret. Quelqu'un pourrait me dire quel est le problème s'il vous plait ?
P.S : j'ai mis le tiret du signe moins.
m@thieu41 le 15/09/2013 à 21:13
Bonjour,

Il faut mettre un guillemet avant le tiret: Output(8,1,"----------------
rpgcreator le 16/09/2013 à 13:26
juste une remarque: mario laisse le poing en l'air, meme quand il redescend godgrace.gif
bon c'est un detail, mais je sais pas ou tu as trouve le sprite pour mario, c'est juste pas l'original crazy.gif
Wyrden le 20/09/2013 à 01:15
Salut !
:If K=45:Then:EffEcr:Stop:End
(K=26)-(K=24 -> Z
B+Z -> B : D+Z -> D : F+Z -> F : H+Z -> H
:If D<=1:Then:2->B:1->D:4->F:2->H:End
:If F>=16:Then:14->H:16->F:13->D:14->B:End

A la deuxième et troisième ligne y a pas : ?
Et sinon comment on fait pour revenir à la ligne sans mettre : ?
Je sais je suis pas très doué
Merci d'avance happy.gif
linkakro le 20/09/2013 à 20:14
Il y a effectivement des ":" en début de ligne. C'est un oubli.
Un retour à la ligne se fait simplement avec la touche entrer, et cela affiche toujours ":" qu'on n'a pas à saisir.
Les ":" écrits par le clavier servent à juxtaposer des commandes sans retour à la ligne.
Mets des guillemets dans ton message de forum autour des ":" quand tu les désignes. Moi j'ai cherché des points d'interrogation.
Wyrden le 20/09/2013 à 21:51
Ah oui désolé j'y penserai winkle.gif
ça marche !
merci encore happy.gif
tyler le 28/09/2013 à 09:54
bonjour a vous , j ai recopier srucpuleusement tout le code sur ma calculette. quand je veux lancer le programme il me met error syntax et me renvoie a la première ligne . je ne comprends pas pourquoi sad.gif pouvez vous m aidez ?
ps: je suis un simple débutant en matière de programmation cry.gif
m@thieu41 le 28/09/2013 à 10:37
Cette ligne? : PROG:UPMARIO
Elle n'est pas à mettre, c'est le titre du prgm.
slashy le 08/09/2014 à 23:19
Bonjour, je poste sur ce forum parce que une fois le programme lancé, Mario ne saute pas et ne se deplace pad.Savez vous comment y remedier ? Merci winkle.gif
linkakro le 09/09/2014 à 00:45
Toutes les lignes contenant K peuvent être défectueuses. K reçoit en effet le codeTouche (getKey) qui lit le clavier pour appliquer ensuite les actions.
XY le 19/09/2014 à 19:21
Et donc il faut faire quoi svp ?? pcq moi ca marche pas non plus (et je débute en programmation)
linkakro le 20/09/2014 à 01:39
Je n'ai aucune idée immédiate de la cause ni même si le programme saisi n'a pas une erreur de copie.

Vérifiez ceci tout d'abord.
Code
:codeTouche->K
:If K=45:Then:EffEcr:Stop:End
:If K=26:Then:B+1->B:D+1->D:F+1->F:H+1->H:End
:If K=24:Then:B-1->B:D-1->D:F-1->F:H-1->H:End
:If D<=1:Then:2->B:1->D:4->F:2->H:End
:If F>=16:Then:14->H:16->F:13->D:14->B:End
aurel0515 le 20/09/2014 à 19:27
Moi il est ecrit erreur domaine vers la fin:
Output(X,Y,"<
Pourquoi???
aurel0515 le 20/09/2014 à 19:39
Pourquoi quand je lance le jeu ca me met game over direct
linkakro le 21/09/2014 à 00:15
Erreur domaine car X ou Y ont des valeurs hors de l'écran. La cause peut être n'importe où X et Y sont modifiées.

Game Over

Le programme que j'ai déjà copié il y a longtemps fonctionne. Je suis persuadé que les erreurs viennent de vos copies. Et je ne peux pas tout deviner.
thebreakerdu88 le 02/10/2014 à 22:03
Hey ! Salut j ai un putain de problème j ai fait le pgrm pendant 1 h mais marche pas juste acceuil et game over quelqu un pourrais me dire sur crazy.gif une ti82+ cry.gif cry.gif eyeonly.gif Texte coloré
linkakro le 12/10/2014 à 20:33
Vous devez tous commettre la même erreur de recopiage et cela m'agace... Je l'ai testé et comparé token par token mon exemplaire avec le code source, aucun problème pour moi. Le code original et la modification postée plus tard marchent toutes les deux.
R0cks1 le 04/11/2014 à 19:22
J'ai un problème : J'ai recopié le programme exactement comme il fallait et malheureusement quand je lance le programme je vois l'écran d'accueil puis l'écran de mort
Need help !
linkakro le 04/11/2014 à 20:41
Je l'ai déjà et il fonctionne.

Je viens à peine de songer que tous les visiteurs qui se plaignent du gameover systématique ont certainement saisi des ":" au début de chaque ligne alors qu'il ne faut pas. Lorsque cela se fait en entête de commandes If cela est faux.
Voici un exemple, le premier endroit concerné. Les ":" sont ceux des retours à la ligne de la calculatrice, aucun ":" n'est à ajouter.
Code
:If B+1=Y and A=X
:Goto 1
Et si vous êtes trop noob pour utiliser correctement les lignes, alors vous pouvez écrire ainsi sur une seule ligne et il n'y a plus d'ambiguité sur l'entête de la seconde ligne.
Code
:If B+1=Y and A=X:Goto 1