Bonjour à tous,
Je suis nouveau sur ce forum de même qu'en programmation. Je dois réaliser un projet qui, en gros, est une adaptation d'un livre-jeu sous forme de programme en C.
J'ai donc crée une structure personnage qui contient le pseudo et les différents attributs de l'avatar (habileté, endurance et chance, attributs qui sont déterminés aléatoirement). Il faut que je puisse tester son habileté et/ou sa chance. J'ai alors crée un sous-programme mais il ne fonctionne pas vraiment.
1er problème : par exemple, si l'habileté initiale vaut 7, deux lancés de dé valent 6, il va me dire "Vous n'êtes pas habile" alors que si ou inversement.
2ème problème : j'aimerais qu'après le test effectué, l'habileté initiale soit diminuée de 1 mais je n'y arrive pas.
Voici le code source :
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define MAX_NOM 20
- struct personnage
- {
- char pseudo[MAX_NOM];
- int habilete, endurance, chance;
- }personnage;
- typedef struct personnage sPerso;
- /****************************************************************************************************
- Declaration des fonctions secondaires
- *****************************************************************************************************/
- int lance_de(); // renvoie le resultat de .. lance(s) de dé
- void creation_avatar(sPerso* p); // demande un pseudo et genere les attributs de l'avatar
- void afficher_avatar(sPerso p); // affiche les attributs de l'avatar cree precedemment
- int test_habilete(sPerso p); // effectue un test de l'habilete de l'avatar
- /****************************************************************************************************
- Fonction principale
- *****************************************************************************************************/
- int main()
- {
- srand(time(NULL));
- sPerso p;
- int x;
- x = (lance_de() + lance_de());
- printf("BIENVENUE!\n\n" );
- creation_avatar(&p);
- afficher_avatar(p);
- printf("\nLe lance de 2 des vaut : %d\n", x);
- test_habilete(p);
- printf("\nVotre habilete est desormais de : %d\n", (p.habilete)); //probleme : la valeur finale est la meme que la valeur initiale
- return EXIT_SUCCESS;
- }
- /****************************************************************************************************
- Definition des fonctions secondaires
- *****************************************************************************************************/
- int lance_de()
- {
- int x=0;
- x=x+(rand()%6)+1;
- return x;
- }
- void creation_avatar(sPerso* p) /*Creation de l'avatar*/
- {
- printf("Veuillez saisir votre pseudo : " );
- scanf("%s", (*p).pseudo);
- (*p).habilete=(6 + lance_de());
- (*p).endurance=(12 + lance_de() + lance_de());
- (*p).chance=(6 + lance_de());
- }
- void afficher_avatar(sPerso p) /*Affiche le pseudo et les attributs de l'avatar*/
- {
- printf("\n" );
- printf("Votre pseudo est : %s\n\n", (p.pseudo));
- printf("Votre habilete est de : %d\n", ((p.habilete)));
- printf("Votre endurance est de : %d\n", ((p.endurance)));
- printf("Votre chance est de : %d\n", ((p.chance)));
- }
- int test_habilete(sPerso p)
- {
- if ((lance_de() + lance_de()) <= (p.habilete))
- {
- printf("\nVous etes habile.\n" );
- return 0;
- }
- printf("\nVous n'etes pas habile.\n" );
- return 1;
- p.habilete = p.habilete - 1; //ceci ne fonctionne pas
- }
|
Désolé, je ne sais pas comment être plus clair.
Merci de votre aide.
EDIT : J'ai réglé mes problèmes mais j'ai une question: faut-il que que je mette cette instruction :
Code :
- printf("\nVotre habilete est desormais de : %d\n", (p.habilete)-1);
|
dans mon if et dans mon else ou est-ce qu'il y a moyen de le mettre une seule fois, quelque soit le cas dans lequel on se trouve? Voici mon code pour le sous programme en question :
Code :
- int test_habilete(sPerso p)
- {
- if ((lance_de() + lance_de()) <= ((p.habilete)))
- {
- printf("\nVous etes habile." );
- printf("\nVotre habilete est desormais de : %d\n", (p.habilete)-1);
- return 0;
- }
- printf("\nVous n'etes pas habile." );
- printf("\nVotre habilete est desormais de : %d\n", (p.habilete)-1);
- return 1;
- }
|