Forum

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

(Jeu) UPMario (Jeu) - Page 1 / 3

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:
http://tout82.free.fr/forum/sujet.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