| Petit jeux de combat tres basique |
| Auteur |
Message |
adrien41
Invité
|
Posté le : Ven 27 Fév 2015, 16:28
|
|
|
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 |
|
| |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |
adrien41
Invité
|
Posté le : Sam 28 Fév 2015, 11:23
|
|
|
bonjour tlm. Est-ce que quelqu'un aurai une idee pour les attaques et les soins,s'il vous plait?
|
| |
|
| |
leo_85
Invité
|
Posté le : Lun 02 Mar 2015, 18:37
|
|
|
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 
|
| |
|
| |
adrien41
Invité
|
Posté le : Mar 03 Mar 2015, 10:28
|
|
|
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 |
|
| |
|
| |
leo_85
Invité
|
Posté le : Mar 03 Mar 2015, 18:52
|
|
|
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≤0 ou B≤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≠1 et A≠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≤0 ou C≤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
|
|
| |
|
| |
leo_85
Invité
|
Posté le : Mar 03 Mar 2015, 19:00
|
|
|
petit oublis (et énorme bug...) si l'IA ou le joueur se soigne sa met fin au programme... si quelqu’un a la soluce je suis preneur...
|
| |
|
| |
linkakro
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
|
Posté le : Mer 04 Mar 2015, 0:03
|
|
|
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 |
 |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |
leo_85
Invité
|
Posté le : Mer 04 Mar 2015, 12:55
|
|
|
3 goto c'est abusé? 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...
|
| |
|
| |
Mingerton
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
|
Posté le : Mer 04 Mar 2015, 14:10
|
|
|
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 
---------------------- 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 |
 |
|
| |
leo
Invité
|
Posté le : Mer 04 Mar 2015, 17:02
|
|
|
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? 
|
| |
|
| |
Mingerton
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
|
Posté le : Mer 04 Mar 2015, 18:13
|
|
|
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 
---------------------- 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 |
 |
|
| |
leo_85
Invité
|
Posté le : Mer 04 Mar 2015, 18:48
|
|
|
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?
|
| |
|
| |
Mingerton
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
|
Posté le : Mer 04 Mar 2015, 18:53
|
|
|
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 :
https://openclassrooms.com/fr/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 |
 |
|
| |
leo_85
Invité
|
Posté le : Jeu 05 Mar 2015, 19:06
|
|
|
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)
|
| |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |
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
|
|
|
et puis je me suis fais un compte sur le site voila!
---------------------- futur analyste programmeur possesseur d'une TI 82 Plus toute neuve |
 |
|
| |
Mingerton
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
|
Posté le : Jeu 05 Mar 2015, 20:28
|
|
|
Très bien leo_85 ! 
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 
---------------------- 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 |
 |
|
| |
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
|
|
|
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 |
 |
|
| |
Mingerton
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
|
Posté le : Ven 06 Mar 2015, 17:24
|
|
|
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 |
 |
|
| |
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
|
|
|
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 |
 |
|
| |
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
|
|
|
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 |
 |
|
| |
Mingerton
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
|
Posté le : Mar 10 Mar 2015, 18:36
|
|
|
Si tu n'utilises toujours pas de boucles mes astuces n'ont pas amélioré grand chose
Enfin c'est toi qui vois
---------------------- 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 |
 |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |
leo_85
Autorisation : Membre
Nb de messages : 132
Inscrit le : Mer 03 Déc 2014, 14:13
|
Posté le : Mer 11 Mar 2015, 12:37
|
|
|
désolé mais j'ai encore du mal a comprendre leurs fonctionnement alors j'ai fais avec se que je savais mais je reviendrais peut être avec une version plus opti quand j'aurais compris
---------------------- futur analyste programmeur possesseur d'une TI 82 Plus toute neuve |
 |
|
| |
adrien41
Invité
|
Posté le : Mer 11 Mar 2015, 12:48
|
|
|
Re les gens ;-). Comment peut-on remplacer les goto pour en eviter les abus?
|
| |
|
| |
Mingerton
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
|
Posté le : Mer 11 Mar 2015, 13:28
|
|
|
Comme je le dis depuis le début, avec des boucles comme Repeat, While ou For (plutôt les deux premières dans ce cas).
Repeat répète toujours la même chose jusqu'à ce que la conditions qui la suit soit vraie
While répète toujours la même chose tant que la condition qui la suit est vraie
Dans ce cas, il est possible de suivre une structure que j'ai déjà donnée plus haut :
| 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 |
---------------------- 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 |
 |
|
| |
leo_85
Autorisation : Membre
Nb de messages : 132
Inscrit le : Mer 03 Déc 2014, 14:13
|
Posté le : Mer 11 Mar 2015, 18:03
|
|
|
les boucles while je veux bien mais ça pose un problème celui des tours...
javais fais de telle sorte que
| Code | //vérification des point de vie
//si les deux joueurs sont en vie alors (et le reste des actions)
//sinon conditions victoire défaite
//puis au tour de l'IA |
et là vient le problème comment sauter au tour de l'IA après celui du joueur et inversement sans un goto? pour le début
| Code | //si en vie alors action
//sinon conditions victoire défaite |
ça j'ai compris ça me vire le goto 3 mais pour les autres je bloque...
---------------------- futur analyste programmeur possesseur d'une TI 82 Plus toute neuve |
 |
|
| |
Mingerton
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
|
Posté le : Mer 11 Mar 2015, 18:16
|
|
|
Une technique serait un test booléen, avec une variable qui chage à chaque tour.
| Code | 1->J
While BC
not(J->J // si J est vrai alors il devient faux, et inversement
If J // si J différent de 0
Then
//structure pour le joueur
Else
//structure pour l'IA
End
End |
La boucle While est la même que la tienne, je n'ai gardé que les lignes qui peuvent être utiles. Les booléens sont très utiles dans toutes les conditions et tests, les maîtruser est très avantageux dans tous les codes 
En gros : Un test booléen est vrai ou faux. Si il est vrai il est différent de 0 (généralement égal à 1), sinon il est égal à 0. c'est pour ça que si tu écris 1=1 dans ta calculatrice elle t'affichera 1, et si tu marques 1=0 elle t'affichera 0.
---------------------- 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 |
 |
|
| |
leo_85
Autorisation : Membre
Nb de messages : 132
Inscrit le : Mer 03 Déc 2014, 14:13
|
Posté le : Mer 11 Mar 2015, 18:51
|
|
|
d'accord je prend en compte les modif et je vous recontacte sous peu
P.S: si quelqu’un peut m'aider j'arrive pas a charger une image de profile pour mon compte
---------------------- futur analyste programmeur possesseur d'une TI 82 Plus toute neuve |
 |
|
| |
leo_85
Autorisation : Membre
Nb de messages : 132
Inscrit le : Mer 03 Déc 2014, 14:13
|
Posté le : Mer 17 Jui 2015, 15:29
|
|
|
vous etes autorisé a vous moquer
https://scratch.mit.edu/projects/67464240/
---------------------- futur analyste programmeur possesseur d'une TI 82 Plus toute neuve |
 |
|
| |