Poster un nouveau sujet Poster une réponse Page: 1,      >>
Petit jeux de combat tres basique
Auteur Message
adrien41
Invité
Posté le : Ven 27 Fév 2015, 16:28   Citer 

Salut les gens.Cette fois-ci je reviens avec un petit programme que j'essaierai d'améliorer avec votre aide.

Code
10000->P
10000->V
Lbl 0
ClrHome
Menu("QUE FAIRE?","ATTAQUER",A,"SE SOIGNER",S,"PV,PV
Lbl A
randInt(5000,0)->B
V-B->V
If V (inferieur ou egal) 0:Goto P
ClrHome
Output 5,1,"PV IA:
Output 5,8,V
Pause "PAUSE"
Goto 1
Lbl S
randInt(5000,0)->B
P+B->P
If P>10000:10000->P
Output 5,1,"PV J1:
Output 5,8,P
Pause "PAUSE"
Lbl 1
randInt(2,1)->B
If B=1:randInt(5000,0)->E:E+V->V:If V>10000:10000->V:Goto 0
If B=2:randInt(5000,0)->E:P-E->P:If P<0:Goto P2:Goto 0
Lbl PV
ClrHome
Output 4,1,"PV J1:
Output 4,8,P
Output 6,1,"PV IA:
Output 6,8,V
Pause "PAUSE"
ClrHome
Goto 0
Lbl P
ClrHome
Output 5,1,"GAGNER
Pause "PAUSE"
10000->P
10000->V
Goto 0
Lbl P2
ClrHome
Output 5,1,"PERDU"
Pause "PAUSE"
10000->P
10000->V
Goto 0



  Haut de page Bas de page 
 
adrien41
Invité
Posté le : Sam 28 Fév 2015, 11:23   Citer 

bonjour tlm. Est-ce que quelqu'un aurai une idee pour les attaques et les soins,s'il vous plait?

  Haut de page Bas de page 
 
leo_85
Invité
Posté le : Lun 02 Mar 2015, 18:37   Citer 

j'ai bien une idée mais je te fais patienter jusque demain la j'ai pas le temps je suis sure qu'ont peut faire plus court et relativement bien optimisé ,si j'ai bien compris c'est un jeu de combat en mode texte avec attaque et guérison contre la calculette (mais peut être pourquoi pas contre un joueur?)bref je fais sa sur papier puis sur ma calto et je te dis ça demain happy.gif

  Haut de page Bas de page 
 
adrien41
Invité
Posté le : Mar 03 Mar 2015, 10:28   Citer 

Tiens regarde:j'ai essayé de le faire pour deux joueurs.

Code
 Lbl ZZ
10000->P
10000->V
Lbl 0
ClrHome
Menu("CHOIX DE J1","ATTAQUE",A1,"SOINS",S1
Lbl A1
randInt(5000,0)->A
V-A->V
If V<0:Goto V:End
Goto J2
Lbl S1
randInt(5000,0)->S
P+S->P
If P>10000:10000->P:End
Lbl J2
ClrHome
Menu("CHOIX J2","ATTAQUE",A2,"SOINS",S2
Lbl A2
randInt(5000,0)->A
P-A->P
If P<0:Goto P:End
Goto 0
Lbl S2
randInt(5000,0)->S
V+S->V
If V>10000:10000->V:End
Goto 0
Lbl V
ClrHome
Disp"VICTOIRE DE J1"
Pause
Goto ZZ
Lbl P
ClrHome
Disp"VICTOIRE DE J2"
Pause
Goto ZZ



  Haut de page Bas de page 
 
leo_85
Invité
Posté le : Mar 03 Mar 2015, 18:52   Citer 

Ma version du schmilblick ^^


Code
EffEcr
20->B
20->C
Disp "vie=20","Action:","Combattre!(1)","Se Soigner(2)"
Lbl 01
Prompt A
If A=1
Then
EffEcr
entAléat(2,5->D
C-D->C
If C&#8804;0 ou B&#8804;0
Then
Goto 03
Else
Disp "Degas a IA","Vie IA:",C
Goto 02
If A=2
Then
B+2->B
Disp "Soigne","Vie:",B
Goto 02
If A&#8800;1 et A&#8800;2
Then
Goto 01
Lbl 02
entAléat(1,4->E
If E<4
Then
entAléat(2,5->F
B-F->B
Disp "IA Frappe",F,"Votre Vie:",B
If B&#8804;0 ou C&#8804;0
Then
Goto 03
Else
Goto 01
If E=4
Then
C+2->C
Disp "IA Se Soigne","Vie IA:",C
Goto 01
If C>20
Then
20->C
Lbl 03
If B=0
Then
Disp "Perdu
If C=0
Then
Disp "Gagne!
End 



  Haut de page Bas de page 
 
leo_85
Invité
Posté le : Mar 03 Mar 2015, 19:00   Citer 

petit oublis (et énorme bug...) si l'IA ou le joueur se soigne sa met fin au programme... goutte.gif si quelqu’un a la soluce je suis preneur...

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 04 Mar 2015, 0:03   Citer 

J'ai lu quelques instants mais je n'ai pas le courage de l'étudier entièrement avec tous les abus de goto. Mon article Goto_vs_algo dans ma signature.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
leo_85
Invité
Posté le : Mer 04 Mar 2015, 12:55   Citer 

3 goto c'est abusé? moodforlove.gif il y a t-il une alternative? (elle optimiserait peut-être le programme?)je suis désolé mais mes connaissance en TI basic sont très limité pour te donner une idée c'est mon programme le plus long et le plus complexe...

  Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Mer 04 Mar 2015, 14:10   Citer 

A vrai dire je pense que tu as oublié de fermer presque toutes tes conditions, ce qui peut être la source des bugs. Le Goto est vraiment une arme de toute dernière nécessité en TI-Basic, car il est TOUJOURS possible de le remplacer par une boucle ou un test, et aussi parce que le Goto est une source illimitée de bugs. Regarde ce code par exemple :


Code
Lbl 1
For(A,1,53
Goto 1
End



On entre dans une boucle, et on en ressort. Mais on est encore dépendant de la boucle. Sauf qu'entre temps on y est entré à nouveau... Ainsi de suite jusqu'à l'inévitable Err:Memory.

De plus, les Goto sont très difficiles à lire dans un code (pour un lecteur humain), parce qu'il faut prendre en compte à chaque Goto le code qui y est rattaché, etc...

Pour éviter tout ça, je te conseille une structure comme celle ci :


Code
//Affichage de la console, textes fixes qui ne varient pas, commandes, etc
//Initialisations des points de vie, B et C
While BC             // un test booléen : si l'un des deux est nul, alors la condition d'entrée de boucle n'est pas vraie et le programme s'arrête
//Ton code pour faire varier les points de vie, et l'IA
End
//Affichages de fin de code



C'est une structure très simple, pas moins rapide puisqu'elle n'appelle aucune étiquette, et tu peux même y glisser un codeTouche :


Code
codeTouche->K           //stocke le code de la première touche pressée dans K
If K=92
//Si on a appuyé 1, alors il se passe ça
If K=93
//Si on a appuyé sur 2, alors il ce passe cette autre chose.



A insérer dans une boucle pour ce genre d'interaction. Ta boucle While fera l'affaire. Le code d'une touche est formé de sa ligne sur le clavier puis de sa colonne. Par exemple, la touche 2nd a pour code 21. La touche On n'a pas de code.

Essaye déjà de venir à bout du programme avec ces techniques, et on pourra te proposer des améliorations et/ou optimisations winkle.gif

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
leo
Invité
Posté le : Mer 04 Mar 2015, 17:02   Citer 

je suis désolé de te demander ça et je comprendrais que tu ne le fasse pas mais comme je l'ais dit mes connaissances en TI-Basic sont très limité alors pourrais tu refaire le code avec les nouvelles boucles? moodforlove.gif

  Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Mer 04 Mar 2015, 18:13   Citer 

Eh bien à vrai dire je n'ai pas vraiment le temps...

De plus, le meilleur moyen de progresser est de programmer toi même, de comprendre comment ça marche en faisant des erreurs et en les résolvant. Je te propose donc d'essayer déjà de le faire toi même happy.gif

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
leo_85
Invité
Posté le : Mer 04 Mar 2015, 18:48   Citer 

oui bien sur je comprend c'est pas grave... si j'ai bien compris un "goto" annule le "end" qui vient après? donc le programme va n'importe ou?

  Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Mer 04 Mar 2015, 18:53   Citer 

Le Goto saute directement à son label, donc forcément le End n'est pas lu (dans le code exemple). Mais c'est pas forcément un End qui est oublié, même si c'est souvent ce cas qui pose des problèmes. Si tu veux apprendre à bien programmer en TI-Basic, je te conseille le tuto de mdr1 sur le sdz :

http://openclassrooms.com/courses/apprenez-a-programmer-en-ti-basic

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
leo_85
Invité
Posté le : Jeu 05 Mar 2015, 19:06   Citer 

Nouveau code! avec des vrais morceaux de Goto et de tête de mule a l’intérieur: tout est corrigé zero bug!


Code
EffEcr
20->B
20->C
Disp "vie=20","Action:","Combattre!(1)","Se Soigner(2)"
Lbl 01
If B>0 et C>0
Then
Prompt A
Else
Goto 03
End
If A=1
Then
EffEcr
entAléat(2,5->D
B-D->B
Disp "Degas a IA","Vie IA:",B
Goto 02
End
If A=2
Then
C+2->C
If C>20
Then
20->C
End
Disp "Soigne","Vie:",C
Goto 02
End
If A[différent de]1 et A[différent de]2
Then
Goto 01
Lbl 02
If B>0 et C>0
Then
entAléat(1,4->E
Else
Goto 03
End
If E<4
Then
entAléat(2,5->F
C-F->C
Disp "IA Frappe",F,"Votre Vie:",C
Goto 01
End
If E=4
Then
B+2->B
If B>20
Then
20->B
End
Disp "IA Se Soigne","Vie IA:",B
Goto 01
End
Lbl 03
If C[inférieur ou égal à]0
Then
Disp "Perdu
Output(1,1,"
End
If B[inférieur ou égal à]0
Then
Disp "Gagne!
Output(1,1,"
End 



je me suis peut-être planté au recopiage mais comme ma version marche si sa plante contacter moi ici

sinon merci Mingerton je continue de suivre le cours du site du zéro (oui je l’appelle comme ça)

  Haut de page Bas de page 
 
leo_85



Autorisation : Membre
Nb de messages : 132
Inscrit le : Mer 03 Déc 2014, 14:13
Posté le : Jeu 05 Mar 2015, 19:13   Citer 

et puis je me suis fais un compte sur le site voila!

----------------------
futur analyste programmeur possesseur d'une TI 82 Plus toute neuve godgrace.gif
 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Jeu 05 Mar 2015, 20:28   Citer 

Très bien leo_85 ! happy.gif

En suivant ce tuto tu pourras maîtriser les boucles et les conditions pour arriver à ce que je t'ai proposé. Déjà tu as réussi à dompter ce bug seul, c'est déjà une belle avancée !

Je peux déjà te proposer quelques astuces :

- les Lbl et les Goto n'ont pas forcément deux caractères. Pour économiser des octets, tu peux remplacer tes Lbl et Goto à 2 caractères par d'autres à un seul caractères

- Inutile de créer des variables si elles ne servent qu'une fois. Ainsi, ces deux codes sont équivalents :

Code
entAléat(2,5->D
B-D->B

entAléat(2,5->F
C-F->C

équivaut à :

B-entAléat(2,5->B

C-entAléat(2,5->C



- Je vois que tu as pris le coup de main du Output(1,1,". Tu peux économiser des octets en mettant un simple guillemet ("), qui par contre décalera une ligne à la fin mais ça n'a as l'air grave pour ce code

Je pourrais te donner d'autres trucs (cf ma signature sinon) quand tu appliqueras des boucles et des tests booléens winkle.gif

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
leo_85



Autorisation : Membre
Nb de messages : 132
Inscrit le : Mer 03 Déc 2014, 14:13
Posté le : Ven 06 Mar 2015, 16:53   Citer 

merci a toi! j'ai optimisé et économisé quelque octet mais je pense pas que je vais le re-recopier avec les modif' le principe et la et le programme fonctionne!

----------------------
futur analyste programmeur possesseur d'une TI 82 Plus toute neuve godgrace.gif
 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Ven 06 Mar 2015, 17:24   Citer 

A ta guise, même si je pense que c'est dommage pour ton progrès personnel.

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
leo_85



Autorisation : Membre
Nb de messages : 132
Inscrit le : Mer 03 Déc 2014, 14:13
Posté le : Sam 07 Mar 2015, 10:59   Citer 

non je voulais dire que j'ai pris en compte tes modif sur ma calto mais que j'avais la flemme de re-recopier les modif sur la page mais sinon si tu veux je le ferait... ^^

----------------------
futur analyste programmeur possesseur d'une TI 82 Plus toute neuve godgrace.gif
 Adresse email Haut de page Bas de page 
 
leo_85



Autorisation : Membre
Nb de messages : 132
Inscrit le : Mer 03 Déc 2014, 14:13
Posté le : Mar 10 Mar 2015, 18:11   Citer 

désolé de Up mais j'ai décidé de ressortir mon code avec les amélio de Mingerton (merci encore au passage) , des indications pour les débutants et ma version deux joueurs (je n'explique pas la version 2 joueur car c'est un vague copier-coller de la version 1 joueur)

bref la version 1 joueur :


Code
EffEcr //on fait place net
20->B
20->C //on définit les points de vie
Disp "vie=20","Action:","Combattre!(1)","Se Soigner(2)"
Lbl 1 //le label 1 sera les actions du joueur 1
If B>0 et C>0 //on vérifie que personne n'est mort pour jouer
Then
Prompt A
Else
Goto 3 //si quelqu’un est mort on va aux conditions de victoire/défaite
End
If A=1
Then
EffEcr
B-entAléat(2,5->B // on soustrait les dégâts a la vie de l'IA
Disp "Degas a IA","Vie IA:",B
Goto 2 //après une action c'est au tour de l'IA
End
If A=2
Then
C+2->C
If C>20
Then
20->C //se soigner ne permet pas de dépasser la vie maximale
End
Disp "Soigne","Vie:",C
Goto 2 //après une action c'est au tour de l'IA
End
If A[différent de]1 et A[différent de]2
Then
Goto 1 //si il y a faute de frappe on redemande un choix
Lbl 2 //le label 2 définit les actions de l'IA
If B>0 et C>0 //on revérifie la vie pour éviter que le joueur humain tue l'IA en étant mort
Then
entAléat(1,4->E //l'action de l'IA est aléatoire
Else
Goto 03 //si quelqu’un est mort on va aux conditions de victoire/défaite
End
If E<4
Then
entAléat(2,5->F
C-F->C
Disp "IA Frappe",F,"Votre Vie:",C
Goto 01
End
If E=4
Then
B+2->B
If B>20
Then
20->B
End
Disp "IA Se Soigne","Vie IA:",B
Goto 01
End
Lbl 03 //les fameuses conditions de victoire/défaite
If C[inférieur ou égal à]0
Then
Disp "Perdu
Output(1,1," //cette commande permet de ne pas afficher "fait" ou "end" a la fin
End
If B[inférieur ou égal à]0
Then
Disp "Gagne!
Output(1,1,"
End




et la version 2 joueurs


Code
20->C
20->D
EffEcr
Lbl 1
Disp "J1(A):",c,"J2(B):",D,"Frapper=1","Soigner=2"
If C>0 et D>0
Then
Prompt A
EffEcr
Else
Goto 3
End
If A=1
Then
D-entAléat(2,5->D
Goto 2
End
If A=2
Then
C+2->C
If C>20
Then
20->C
End
Goto 2
End
If A [différent de]1 et A [différent de]2
Then
Goto 1
End
Lbl 2
Disp "J1(A):",c,"J2(B):",D,"Frapper=1","Soigner=2"
If C>0 et D>0
Then
Prompt B
EffEcr
Else
Goto 3
End
If B=1
Then
C-entAléat(2,5->C
Goto 1
End
If B=2
D+2->D
If D>20
Then
20->D
End
Goto 1
End
If B[différent de]1 et B[différent de]2
Then
Goto 2
End
Lbl 3
If C [inférieur ou égal] 0
Then
EffEcr
Disp "J1(A):",c,"J2(B):",D,"J2 a Gagne!"
End
If D [inférieur ou égal]0
Then
EffEcr
Disp "J1(A):",c,"J2(B):",D,"J1 a gagne!"
End



----------------------
futur analyste programmeur possesseur d'une TI 82 Plus toute neuve godgrace.gif
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse Page: 1,      >>





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2025 Groupe FSB
Page générée en 6 requêtes
BlackOne par Grimmlink