Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
2022 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Bloqué sur mon programme relativement simple.

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Bloqué sur mon programme relativement simple.

n°2275169
aizekyel
Noob.
Posté le 08-02-2016 à 01:12:18  profilanswer
 

Bonjour,
 
Je me suis lancé sur la création d'un petit jeu utilisant la console pour débuter a voler de mes propres ailes en C++ (après quelques cours très scolaires et mal expliquer en ISN).
Ainsi je suis plutôt fier de mon petit programme que j'ai réalisé en peu de temps..
 
Mais j'ai voulus implémenter une variable de monnaie, passant par une fonction simple.
 

Code :
  1. int sous(int dummy, int gain) {
  2.     return dummy + gain;
  3. }


 
J'utilise cette fonction dans ma fonction de "combat" de mon mini jeu, j'ai pas mal brodé autour parce que je suis bloqué dessus depuis quelques heures :
 

Code :
  1. int combat(int attqJ, int pvJ, int pvmax, int attqM, int pvM, int dummy) {
  2.     srand(time(0));
  3.     int rep, degats_sub, degats_inf, pause, gain;
  4.     cout<<"Vous avez "<<pvJ<<" PV !"<<endl;
  5.     cout<<""<<endl;
  6.     cout<<"Un monstre sauvage apparait ! Il possede " << attqM <<" d'attaque et " << pvM <<" PV !"<<endl;
  7.     cout<<""<<endl;
  8.     cout<<"Que voulez vous faire ? ATTAQUER [1] / FUIR [2]"<<endl;
  9.     cin>>rep;
  10.     if (rep == 1) {
  11.         do {
  12.             if (pvJ > 0) {
  13.                 system("cls" );
  14.                 degats_inf = attqJ + ( rand() %5 + 1 );
  15.                 pvM = pvM - degats_inf;
  16.                 cout<<"Vous attaquez le monstre, lui infligeant "<<degats_inf<<" de degats !"<<endl;
  17.                 cout<<"Il lui reste "<<pvM<<" PV !"<<endl;
  18.                 degats_sub = attqM + (rand() %5 + 1);
  19.                 pvJ = pvJ - degats_sub;
  20.                 cout<<"Il riposte en vous infligeant "<<degats_sub<<" de degats !"<<endl;
  21.                 cout<<"Il vous reste "<<pvJ<<" PV !"<<endl;
  22.                 cout<<""<<endl;
  23.                 if (pvM <= 0) {
  24.                     cout<<"Le monstre a ete vaincu !"<<endl;
  25.                     cout<<""<<endl;
  26.                     gain = rand() %75 + 1;
  27.                     cout<<"Felicitations ! Vous remportez "<<gain<<" pieces !"<<endl ;
  28.                     sous(dummy, gain);
  29.                     dummy = sous(dummy, gain);
  30.                     cout<<"Votre argent total est de : "<<dummy<<endl;
  31.                     cout<<""<<endl;
  32.                     if (pvJ < pvmax) {
  33.                         cout<<"Il semblerait que vous ayez subit des degats."<<endl;
  34.                         cout<<"Passez a une auberge pour vous soigner !"<<endl;
  35.                         break;
  36.                     }
  37.                     else {
  38.                         break;
  39.                     }
  40.                 return dummy;
  41.                 }
  42.                 else if (pvJ < 0) {
  43.                     cout<<"Un villageois vous a retrouver evanoui..."<<endl;
  44.                     cout<<"Il semblerait qu'il vous a deplacer dans une auberge..."<<endl;
  45.                     break;
  46.                 }
  47.                 cout<<"Appuyez sur [1] pour continuer"<<endl;
  48.                 cin>>pause;
  49.                 pause=0;
  50.                 system("cls" );
  51.             }
  52.         }while((pvJ > 0) && (pvM > 0));
  53.     }
  54.     else {
  55.         cout<<"Vous fuyez..."<<endl;
  56.         cout<<""<<endl;
  57.         cout<<"Appuyez sur [1] pour continuer"<<endl;
  58.         cin>>pause;
  59.         pause=0;
  60.         system("cls" );
  61.         return 0;
  62.     }
  63. return 0;
  64. }


 
Là mon programme m'affiche bien la valeur de la fonction "sous" (qui a un nom très original d'ailleurs, il faut le dire !).
 
Mais c'est dans mon main que tout cela me casse les bonbons.
 
Exemple d'un cas 1 pour un combat :
 
 

Code :
  1. [Pleins de définition de variables pas ici...]
  2. int coins = sous(0,0);
  3. [Là y'a tout mon code pour les menus etc...]
  4. case 1: {
  5.       system("cls" );
  6.       cout<<"Vous entrez dans les bois !"<<endl;
  7.       cout<<""<<endl;
  8.       int monster[] = {rand()%10 + 1, rand()%50 + 25};
  9.        combat(stats[0], stats[1], stats[2], monster[0], monster[1], coins);
  10.        cout<<"Tapez [1] pour continuer !"<<endl;
  11.        cin>>pause;
  12.        pause = 0;
  13.        menu = 0;
  14.        break
  15. }


 
 
Et alors mon problème c'est que j'aimerais que "coins" soit à la valeur de ma fonction sous, mais j'arrive pas a récuperer une bonne valeur.
 
Pourtant dans la fonction combat j'ai bien dummy = 86 (par exemple) j'arrive bien a récuperer la valeur... mais alors dans le main y'a pas moyen.
 
Si quelqu'un pourrait m'expliquer comment faire, pas juste me donner une réponse s'il vous plaît.
 
Merci bien !
 
 
Cordialement,
 
Aizekyel.
 
 
PS : Je conçois que ça puisse paraître très simple pour certains mais je suis a mes débuts en C++.

mood
Publicité
Posté le 08-02-2016 à 01:12:18  profilanswer
 

n°2275183
rufo
Pas me confondre avec Lycos!
Posté le 08-02-2016 à 13:18:55  profilanswer
 

Ligne 29 :pt1cable:  
Tu ne stockes pas la valeur retournée dans une variable.
 
Au passage, si c'est pour faire ce genre de structure de programme, laisse tomber le C++ et fait juste du C.
 
Par ailleurs mettre des break et des return en plein milieu comme tu le fais, c'est un coup à avoir pleins de bugs. Il faut mettre en place des structures de contrôles propres dans tes boucles; en gros, que les critères d'arrêts soient clairs quitte à utiliser des booléens dont la valeur changera en fonction de tests réalisés dans le corps de la boucle. Mais au moins, qu'on ait tous les critères d'arrêt au même endroit.
 
Ex :  
if (pvJ < pvmax) {
    aSubiDegats = TRUE; // TRUE = 1
}
 
 
else if (pvJ < 0) {
    estEvanui = TRUE;  
}
 
Et dans ton while, tu mettras !aSubiDegats  et !estEvanui.
 
Edit : j'avais pas vu la ligne 30. Mais du coup, pourquoi conserver la ligne  29 :??: Du coup, je pense que ça vient de tous des critères de sortie de boucle ou de return multiples. Tu dois probablement pas passer là où tu penses.
Rappel : une fonction, un seul return. Et le break, c'est que pour le switch() :o


Message édité par rufo le 08-02-2016 à 13:22:25

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2275188
aizekyel
Noob.
Posté le 08-02-2016 à 14:56:12  profilanswer
 

Bonjour,
 
Merci à toi pour ta réponse..  
 
Pour les break ,a vrai dire notre prof nous avait apprit ça comme ça et après m'être pas mal documenté et ainsi qu'avec ton aide, ça paraît beaucoup plus logique.
 
Je vais refaire ça de mon coté et si jamais j'ai encore un soucis je reviendrais vers vous, mais un grand merci à toi.

n°2275190
rufo
Pas me confondre avec Lycos!
Posté le 08-02-2016 à 15:02:14  profilanswer
 

"a vrai dire notre prof nous avait apprit ça comme ça" -> c'est une honte d'enseigner des structures comme ça :fou:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2275191
aizekyel
Noob.
Posté le 08-02-2016 à 15:03:57  profilanswer
 

Bah le prof est pas prof de programmation et tout ce qu'il fait en cours c'est distribuer un paquet de feuille, le lire, et parfois il découvre des trucs lui même.

n°2275197
TotalRecal​l
Posté le 08-02-2016 à 16:46:27  profilanswer
 

Dans ce cas c'est une honte qu'il soit prof tout court :whistle:

 

Il y a vraiment de meilleures façons de structurer un algo et la logique générale d'un programme, celle là est ce qui mène le plus vite à la confusion et à des bugs vicieux, et je ne parle même pas de la maintenabilité...


Message édité par TotalRecall le 08-02-2016 à 16:46:49

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Bloqué sur mon programme relativement simple.

 

Sujets relatifs
Problème avec mon programmeProgramme que je n'arrive pas a finir
Retourner une variable à un programme VBA appelantEcrire totalité des resultats d'un programme dans un fichier en C
Découpe d'un programme c++Besoin d'aide pour programme sous Java's Cool !
[Divers]Création d'un programme pour tester connaissances linguistiqueComment créer un site web simple ?
[PowerShell] Lister rep. dont l'héritage des Permis. NTFS est bloquéAppel concurent de procedure stocké oracle dans mon programme java
Plus de sujets relatifs à : Bloqué sur mon programme relativement simple.


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR