[Programmation C] Problème tableau de structure dans un programme
Dernière réponse : dans Programmation
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.
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.
Autres pages sur : programmation probleme tableau structure programme
Lassé par la pub ? Créez un compte
Visiblement, il faut que tu apprennes à utiliser les pointeurs pour passer l'adresse d'un structure à une fonction.
mydata.x=1
Press ENTER to continue.
#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; }
mydata.x=1
Press ENTER to continue.
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.
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.
Citation :
J aurais encore une petit question, je sais j'en demande beaucoup pour un nouveau sur le forum.(désolé).
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é.
Lassé par la pub ? Créez un compte
- Contenus similaires :
- Forumtableau et structure
- Forum[C] Passer un tableau de structure complet dans une fonction
- ForumProblème de matériel ou de programme?
- ForumProblème dans mon code, programme d'upload sur serveur
- Forumgros probleme impossible de lancer le moindre programme
- Forum[C] Problème d'arret dans mon programme
- ForumProblemes avec neuf box programme HD
- ForumProgrammation d'un interpréteur - problèmes de syntaxe
- ForumProgrammation Agent avec la plateforme jade.
- Voir plus