[Programmation C] Problème tableau de structure dans un programme

Jean_guy

Nouveau membre
Bonjour à tous, voilà je suis nouveau sur ce forum et je necessite votre aide.
Voilà je dois rendre un projet sur unjeu en langage C pour jeudi 21 au soir et j ai un gros probleme.

Voilà dans le cadre d'un jeu style heroic fantasy tour par tour.
2 joueurs saisissent leurs equipes, une race,5personnages, et des métiers affiliant des capacités

J'ai codé la saisie de donnée mais avec des problemes.

J ai annoncé une structure type pour mes peronnages:

typedef struct personnage
{
char nom_perso[20];
char metier[20];
int pvm;
int pa;
}personnage;


Ensuite le module de saisie des données

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "struct_personnage.c"

int main(int argc, char *argv[])
{
/* On va d'abord rentrer le nom de l'équipe 1 et l'inclure dans notre structure.*/
fflush(stdin);
char nom_equipeA[40]; /*On vide la memoire d'adressage*/
printf("\nQuel est le nom de votre equipe?\n");
fgets(nom_equipeA,20,stdin);
printf("\nLe nom que vous avez donne a votre equipe est %s\n",nom_equipeA);
printf("--------------------------------------------------------------------------------\n");


/* On va ensuite demander la race que prendront les differents personnages de l'equipe*/
/*On défini les 3 races que sont humain, elfe et nain.
Le Joueur choisit la race à appliquer à l'équipe.
On inclue désormais la race dans la structure*/
int raceA;
printf("\nQuelle race voulez vous choisir pour vos personnages?\n");
printf(" Pour controler les Humains tapez:1\n");
printf(" Pour controler les Elfes tapez:2\n");
printf(" Pour controler les Nains tapez:3\n");
scanf("%d",&raceA);

while (raceA>3 || raceA<1) /*Si l'utilisateur fait une erreur alors on affiche un message d'erreur et on redemande la saisie*/
{
printf("\nVous n'avez pas selectionne une race appartenant a la liste disponible.\n");
printf("Veuillez reiterer votre choix.\n\n");
printf("--------------------------------------------------------------------------------\n");
printf("\nQuelle race voulez vous choisir pour vos personnages?\n");
printf(" Pour controler les Humains tapez:1\n");
printf(" Pour controler les Elfes tapez:2\n");
printf(" Pour controler les Nains tapez:3\n");
scanf("%d",&raceA);
}

switch(raceA)
{
case 1:
printf("\nVous avez donc choisi de controler les Humains.\n");
printf("\nVos caracteristiques de bases sont:\n");
printf(" Vos personnages auront 10 points de vie.\n");
printf(" Vos personnages auront 3 points d'attaque.\n");
printf("\n--------------------------------------------------------------------------------\n");

creation_persos_humain();
break;

case 2:
printf("\nVous avez donc choisi de controler les Elfes.\n");
printf("\nVos caracteristiques de bases sont:\n");
printf(" Vos personnages auront 8 points de vie.\n");
printf(" Vos personnages auront 4 points d'attaque.\n");
printf("--------------------------------------------------------------------------------\n");

creation_persos_elfe();
break;

case 3:
printf("\nVous avez donc choisi de controler les Nains.\n");
printf("\nVos caracteristiques de bases sont:\n");
printf(" Vos personnages auront 12 points de vie.\n");
printf(" Vos personnages auront 2 points d'attaque.\n");
printf("--------------------------------------------------------------------------------\n");

creation_persos_nain();
break;
}

system("PAUSE");
return 0;
}


la le joueur 1 saisie ses données sur son equipe et la race choisie

ensuite il fera appel au module perso humain nain ou elfe

module humain
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "struct_personnage.c"

void creation_persos_humain()
{
//personnage persos[5];
int i;
for (i=1;i<6;i++)
{
personnage persoAi;
fflush(stdin);
printf("\nQuel est le nom du personnage %d?\n",i);
fgets(persoAi.nom_perso,20,stdin);
printf("\nLe nom que vous avez donne a votre presonnage %d est %s\n",i,persoAi.nom_perso);

int metierAi;
printf("Quel est le metier du personnage %d?\n",i);
printf(" Pour Guerrier tapez:1\n");
printf(" Pour Mage tapez:2\n");
printf(" Pour Pretre tapez:3\n");
scanf("%d",&metierAi);

while (metierAi>3 || metierAi<1) /*Si l'utilisateur fait une erreur alors on affiche un message d'erreur et on redemande la saisie*/
{
printf("\nVous n'avez pas selectionne un metier appartenant a la liste disponible.\n");
printf("Veuillez reiterer votre choix.\n\n");
printf("--------------------------------------------------------------------------------\n");
printf("Quel est le metier du personnage %d?\n",i);
printf(" Pour Guerrier tapez:1\n");
printf(" Pour Mage tapez:2\n");
printf(" Pour Pretre tapez:3\n");
scanf("%d",&metierAi);
}
switch(metierAi)
{
case 1:
persoAi.pvm=10;
persoAi.pa=5;
printf("Votre personnage %d s'appelle %s",i,persoAi.nom_perso);
printf(" Il possede %d pv et %d pa\n",persoAi.pvm,persoAi.pa);

break;

case 2:
persoAi.pvm=10;
persoAi.pa=3;
printf("Votre personnage %d s'appelle %s",i,persoAi.nom_perso);
printf(" Il possede %d pv et %d pa\n",persoAi.pvm,persoAi.pa);
printf(" Vous pouvez desormais utiliser tout les 2 tours la capacite de diviser les pv d'un adversaire par 2.\n");
break;

case 3:
persoAi.pvm=10;
persoAi.pa=3;
printf("Votre personnage %d s'appelle %s",i,persoAi.nom_perso);
printf(" Il possede %d pv et %d pa\n",persoAi.pvm,persoAi.pa);
printf("Vous pouvez desormais utiliser tout les 2 tours la capacite de soigner tous les pv d'un coequipier.\n");
break;
}

//persos=persoAi;
printf("\n--------------------------------------------------------------------------------\n");
}
}


module nain
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "struct_personnage.c"

void creation_persos_nain()
{
int i;
for (i=1;i<6;i++)
{
personnage persoAi;
fflush(stdin);
printf("\nQuel est le nom du personnage %d?\n",i);
fgets(persoAi.nom_perso,20,stdin);
printf("\nLe nom que vous avez donne au personnage %d est %s\n",i,persoAi.nom_perso);

int metierAi;
printf("Quel est le metier de votre premier personnage?\n");
printf(" Pour Guerrier tapez:1\n");
printf(" Pour Pretre tapez:2\n");
scanf("%d",&metierAi);

while (metierAi>2 || metierAi<1) /*Si l'utilisateur fait une erreur alors on affiche un message d'erreur et on redemande la saisie*/
{
printf("\nVous n'avez pas selectionne un metier appartenant a la liste disponible.\n");
printf("Veuillez reiterer votre choix.\n\n");
printf("--------------------------------------------------------------------------------\n");
printf("Quel est le metier du personnage %d?\n",i);
printf(" Pour Guerrier tapez:1\n");
printf(" Pour Pretre tapez:2\n");
scanf("%d",&metierAi);
}
switch(metierAi)
{
case 1:
persoAi.pvm=12;
persoAi.pa=4;
printf("Votre personnage %d s'appelle %s\n",i,persoAi.nom_perso);
printf(" Il possede %d pv et %d pa\n",persoAi.pvm,persoAi.pa);
break;

case 2:
persoAi.pvm=12;
persoAi.pa=2;
printf("Votre personnage %d s'appelle %s",i,persoAi.nom_perso);
printf(" Il possede %d pv et %d pa\n",persoAi.pvm,persoAi.pa);
printf("Vous pouvez desormais utiliser tout les 2 tours la capacite de soigner tous les pv d'un coequipier.\n");
break;
}
printf("\n--------------------------------------------------------------------------------\n");
}
}


module elfe

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "struct_personnage.c"

void creation_persos_elfe()
{
int i;
for (i=1;i<6;i++)
{
personnage persoAi;
fflush(stdin);
printf("\nQuel est le nom du personnage %d?\n",i);
fgets(persoAi.nom_perso,20,stdin);
printf("\nLe nom que vous avez donne au presonnage %d est %s\n",i,persoAi.nom_perso);

int metierAi;
printf("Quel est le metier du personnage %d?\n",i);
printf(" Pour Guerrier tapez:1\n");
printf(" Pour Mage tapez:2\n");
scanf("%d",&metierAi);

while (metierAi>2 || metierAi<1) /*Si l'utilisateur fait une erreur alors on affiche un message d'erreur et on redemande la saisie*/
{
printf("\nVous n'avez pas selectionne un metier appartenant a la liste disponible.\n");
printf("Veuillez reiterer votre choix.\n\n");
printf("--------------------------------------------------------------------------------\n");
printf("Quel est le metier du personnage %d?\n",i);
printf(" Pour Guerrier tapez:1\n");
printf(" Pour Mage tapez:2\n");
scanf("%d",&metierAi);
}
switch(metierAi)
{
case 1:
persoAi.pvm=8;
persoAi.pa=6;
printf("Votre personnage %d s'appelle %s\n",i,persoAi.nom_perso);
printf(" Il possede %d pv et %d pa\n",persoAi.pvm,persoAi.pa);
break;

case 2:
persoAi.pvm=8;
persoAi.pa=4;
printf("Votre personnage %d s'appelle %s\n",i,persoAi.nom_perso);
printf(" Il possede %d pv et %d pa\n",persoAi.pvm,persoAi.pa);
printf(" Vous pouvez desormais utiliser tout les 2 tours la capacite de diviser les pv d'un adversaire par 2.\n");
break;
}
printf("\n--------------------------------------------------------------------------------\n");
}
}



Voila le probleme et que j aurais besoin d'utiliser des pointeurs pour tout ce qui est nom des persos, nom de l equipe, métier, pvm et pa
pour les incorporer dans ma cellule combat.
Qui permettra de décrementer les points de vie etc...

De plus je voudrais mettre mes différents persos dans un tableau de structure de type:
nom Equipe 1

perso 1 perso 2 perso 3 ...... perso 5

nom Equipe 2

perso 1 perso 2 perso 3 ...... perso 5

et ensuite l afficher
a la fin comme récapitulatif
avant le début du combat.

J'espere que vous pourrez éclairer ma lenterne, me sortir du probleme parce qu'il est énorme projet de C évalué et a rendre avant le 21/12
Encore merci et si je peux aider sur un autre sujet je le ferais volontier.
 

Emmanuel Delahaye

Expert
Visiblement, il faut que tu apprennes à utiliser les pointeurs pour passer l'adresse d'un structure à une fonction.

[cpp]
#include <stdio.h>

/* une structure de donnees */
struct data
{
int x;
char y[20];
};

/* une fonction qui utilise des elements de cette structure */
void f (struct data *p_data)
{
p_data->x++;
}

/* un exemple d'utilisation */
int main (void)
{
/* definition d'une structure. Les elements sont initialises a 0 */
struct data mydata = {0};

/* appel de la fonction en passant l'adresse de la structure */
f (&mydata);

printf ("mydata.x=%d\n", mydata.x);
return 0;
}
[/cpp]
[fixed]
mydata.x=1

Press ENTER to continue.
[/fixed]
 

zeb

Modérateur
( Jean Guy, merci de lire et de respecter les règles. Change le titre en quelque chose de plus parlant. Mets en forme ton post avec la balise CODE, merci. )
 

Jean_guy

Nouveau membre
Excuse moi zeb pour cet écart,j'étais pressé mais cela n'excuse en rien mon erreur.

Pour information j ai remagnié mon programme en utilisant mon tableau dans ma structure, procédé plus simple.
La saisie est désormais complete.
Je voudrais vous remercier de votre hospitalisté et de vos réponses.

J aurais encore une petit question, je sais j'en demande beaucoup pour un nouveau sur le forum.(désolé).
J'ai réussit à bloquer la saisie de lettre dans un switch case me permettant ainsi d'éviter le bug engendré.

Mais ma question est comment limiter la saisie d'un mot à un nombre de lettre défini et de renvoyer la question de la saisie du mot.
Merci encore pour tout et à bientôt.
Et si vous êtes sages j'espere vous communiquer ce petit jeu assez sympathique. Ben plutôt s'il est completement opérationnel. :p
 

zeb

Modérateur
J aurais encore une petit question, je sais j'en demande beaucoup pour un nouveau sur le forum.(désolé).
Meuh non, on est là pour ça ;)

Pas compris ton histoire de blocage/switch/bug ?
Pour la saisie de chaînes de caractères, voir la fonction fgets. Suis les liens dans la signature d'Emmanuel, c'est bien expliqué.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 079
Messages
6 716 702
Membres
1 586 247
Dernier membre
MrAzgarIII
Partager cette page
Haut