IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Structure pour un jeu


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 1
    Points
    1
    Par défaut Structure pour un jeu
    Bonjour à tous,

    premièrement je voulais témoignez ma gratitude aux tenants de ce forum et plus généralement du site et tous ceux qui y participent parceque sincérement j'y ait puisé des quantités d'informations phénoménales qui m'ont permis d'apprendre beaucoup ( et je partais de rien )... Donc pour ca un grand merci à vous

    Alors oui j'y viens je vous explique mon problème.


    Voila j'aimerais créer un jeu "à la warcraft" qui prend en compte les paramètres suivants :

    L'utilisateur doit choisir une race ( Human, elf, ou gnome ) et il doit choisir une classe ( war, mago ou priest )

    Sachant que Human = 10 points vie et 3 pts attaque
    Gnome = 12 pts vie et 2 pts attaque
    Elf = 8 pts vie et 4 pts attaque

    Sachant aussi que : War = +2 pts attaque
    Mago = +1 attaque
    priest = +2 vie

    Alors ce que j'ai pensé à faire pour faire, c'est de faire une structure genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct Equipe
    {
    char nom[20];
    int vie;
    int atk;
    int race;
    int classe;
    int sort; // ca je le mettrai en place plus tard
    int viemax; // c'est pour comparer par la suite...
    }G;

    Jusque la tout ca bien mais aprés dans mon menu ( flemme de le retranscrire ) qd je selectionne création d'une equipe de 5, ben je ne sais absolument pas quoi faire, voila j'ai en fait juste créer la structure mais je ne sais pas l'utiliser pour que l'utilisateur puisse créer son équipe de 5 je sens qu'il faut mettre des pointeurs mais je ne vois absolument pas comment faire...

    Please help me

  2. #2
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Ben, ça me parait assez simple : il faut faire un tableau !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    typedef struct {
        char nom[20];
        int vie;
        int atk;
        int race;
        int classe;
        int sort; // ca je le mettrai en place plus tard
        int viemax; // c'est pour comparer par la suite...
    } Membre;
     
    ...
     
    Membre *equipe=NULL;
    int i, n; // par ex, n=5
     
    equipe=malloc(sizeof(Membre)*n);
    if ( equipe==NULL ) {
        // erreur : probleme allocation memoire
    }
    for (i=0;i<n;i++) {
        // choix de la race pour l'equipier i
        equipe[i]->race=???;
        // choix de la classe pour l'equipier i
        equipe[i]->classe=???;
        // et aisni de suite ...
    }
     
    ...
     
    free(equipe); // a ne pas oublier

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Je vois ce que tu veux me dire mais y'a un souci pour l'attaque, classe, race etc...

    J'ai fais :

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    typedef struct Groupe 
    {
            char nom[20];
            int vie[5]; // vie personnage
            int atk[5]; // points de vie enlevés à l'adversaire
            int race;
            int classe[5];
            int sort;
            int viemax[5]; // pour comparer par la suite
    }G;
     
    int main() {
    for (i=0;i<n;i++) {
        // choix de la race pour l'equipier i
        groupe[i].race=;
        // choix de la classe pour l'equipier i
        groupe[i].classe=;
        // et ainsi de suite ...
    }


    Mais il n'y a rien à mettre avant ?? je veux dire il y a juste à mettre ca et ca marche, aucun scanf ??

    J'ai mis int race; pcq toutes les races ne peuvent pas être pretre par exemple, c'est un cas particulier...

    J'avoue que je suis perdu là...

  4. #4
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Dans ce que je t'avais proposé, la structure était pour une personne et une équipe de 5 personnes était représentée par un tableau de 5 structures. D'où le pour accéder à la race de la personne numéro i dans le tableau.

    Ce que tu fais est différent : tu définis une structure pour une équipe, et le nombre de personnes dans cette équipe est fixé en dur dans la définition de la structure. Pour accéder à un attribut d'une personne dans une équipe, il faut donc procéder légèrement différemment. Regarde le code suivant, il t'éclairera je pense.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct {
        char nom[20];
        int vie[5]; // vie personnage
        int atk[5]; // points de vie enlevés à l'adversaire
        int race;
        int classe[5];
        int sort;
        int viemax[5]; // pour comparer par la suite
    } Equipe;
     
    void AffEqp(Equipe *eqp);
    Equipe *DefEqp(char *nom, int val);
     
    /******************************************************************************/
    /* Main                                                                       */
    /******************************************************************************/
    int main() {
    	Equipe *eqp1=NULL, *eqp2=NULL;
     
    	// definition de l'equipe 1
    	eqp1=DefEqp("equipe 1",1);
     
    	// definition de l'equipe 2
    	eqp2=DefEqp("equipe 2",2);
     
    	// affichage des equipes
    	AffEqp(eqp1);
    	AffEqp(eqp2);
     
    	// liberation de la memoire
    	free(eqp1);
    	free(eqp2);
     
    	return 0;
    }
     
    /******************************************************************************/
    /* Affiche les valeurs d'une equipe                                           */
    /******************************************************************************/
    void AffEqp(Equipe *eqp) {
        int i;
     
        printf("nom : %s\n",eqp->nom);
        printf("race : %d\n",eqp->race);
        printf("sort : %d\n",eqp->sort);
        for (i=0;i<5;i++) {
            printf("vie de %d : %d\n",i+1,eqp->vie[i]);
            printf("atk de %d : %d\n",i+1,eqp->atk[i]);
            printf("classe de %d : %d\n",i+1,eqp->classe[i]);
            printf("viemax de %d : %d\n",i+1,eqp->viemax[i]);
        }
    }
     
     
    /******************************************************************************/
    /* Definit les valeurs pour une equipe                                        */
    /******************************************************************************/
    Equipe *DefEqp(char *nom, int val) {
        int i;
        Equipe *tmp=NULL;
     
        tmp=malloc(sizeof(Equipe));
    	if ( tmp == NULL ) {
            // erreur
    	}
    	strcpy(tmp->nom,nom);
    	tmp->race = val;
    	tmp->sort = val;
    	for (i=0;i<5;i++) {
    	    tmp->vie[i] = val;
    	    tmp->atk[i] = val;
    	    tmp->classe[i] = val;
    	    tmp->viemax[i] = val;
    	}
     
    	return tmp;
    }

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    A ok ok je vois ce que tu veux faire mais serait-il possible de faire la meme chose mais sans allocation dynamique de la mémoire ?? Juste des tableaux statiques ??

  6. #6
    Membre régulier Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par Unknown13 Voir le message
    A ok ok je vois ce que tu veux faire mais serait-il possible de faire la meme chose mais sans allocation dynamique de la mémoire ?? Juste des tableaux statiques ??
    sure, tu peux faire come suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    typedef struct {
        char nom[20];
        int vie[5]; // vie personnage
        int atk[5]; // points de vie enlevés à l'adversaire
        int race;
        int classe[5];
        int sort;
        int viemax[5]; // pour comparer par la suite
    } Equipe;
     
    void AffEqp(Equipe *eqp);
    Equipe *DefEqp(char *nom, int val);
     
    /******************************************************************************/
    /* Main                                                                       */
    /******************************************************************************/
    int main() {
    	Equipe equipes[20];
            char nom[30];
            int nbr_equipes;
            printf("\nLe nombre d'equipes a definir : ");
            scanf("%d",&nbr_equipes);
            for(i=0;i<nbr_equipes;i++)
            {printf("\nle nom de l equipe %d",i+1);
              scanf("%s",nom);.
            DefEqp(equipes,i,nom,i);
            }
    	// affichage des equipes
    	for(i=0;i<nbr_equipes;i++) AffEqp(equipes,i);
     
     
    	return 0;
    }
     
    /******************************************************************************/
    /* Affiche les valeurs d'une equipe                                           */
    /******************************************************************************/
    void AffEqp(Equipe eqp[],int indice) {
        int i;
     
        printf("nom : %s\n",eqp[indice].nom);
        printf("race : %d\n",eqp[indice].race);
        printf("sort : %d\n",eqp[indice].sort);
        for (i=0;i<5;i++) {
            printf("vie de %d : %d\n",i+1,eqp[indice].vie[i]);
            printf("atk de %d : %d\n",i+1,eqp[indice].atk[i]);
            printf("classe de %d : %d\n",i+1,eqp[indice].classe[i]);
            printf("viemax de %d : %d\n",i+1,eqp[indice].viemax[i]);
        }
    }
     
     
    /******************************************************************************/
    /* Definit les valeurs pour une equipe                                        */
    /******************************************************************************/
    int DefEqp(Equipe eqp[],int indice,char *nom, int val) {
        int i;
     
    	strcpy(eqp[indice].nom,nom);
    	eqp[indice].race = val;
    	eqp[indice].sort = val;
    	for (i=0;i<5;i++) {
    	    eqp[indice].vie[i] = val;
    	    eqp[indice].atk[i] = val;
    	    eqp[indice].classe[i] = val;
    	    eqp[indice].viemax[i] = val;
    	}
     
    	return EXIT_SUCCESS;
    }


    Evidament sans allocation dynamique y a du gaspillage du memoire comme vous voyez, pourvu que ca marche d'ailleur , je suis qu un debutant.
    Pour obtenir des réponses, rien n’est plus naturel que de poser des questions.

  7. #7
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Si tu ne veux pas faire d'allocation dynamique, tu peux faire ce que te propose siegfried64 (j'ai pas testé mais ça doit marcher).

    Cependant, tu vois bien que ça te mais une limite intrinsèque du nombre d'équipes que tu peux constituer. Si tu sais à l'avance le nombre d'équipes max que tu veux, alors d'accord (mais il ne faut pas qu'il soit trop élevé car sinon il y aurait un sacré gaspillage de mémoire).

    Pourquoi ne veux-tu pas d'allocation dynamique ?

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Ouai euh en fait l'allocation dynamique ne m'interesse pas puisqu'en fait j'ai fixé au départ 2 équipes donc je ne veux pas prendre de la place pour rien...

    Je ne veux pas que l'utilisateur rentre le nombre d'équipe qui veut, il y en a que deux...

    Aprés réflexion, j'aimerais avoir un code plus simple parce que j'avoue ne plus trop m'y retrouvé, j'aimerais commencer de cette manière ( c'est imparfait, il y a des fautes )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    typedef struct equipe
    {
        int nom[5][20]
        int race[5];
        int classe[5];
        int vie[5];
        etc....
     
    } equipe;
     
    void choixequipe(equipe *);
     
    int main(void)
    {
        equipe equipe1;
        equipe equipe2;
     
        choixequipe(&equipe1);
        choixequipe(&equipe2);
     
     
    }
     
    void choixequipe(equipe *equipex)
    {
    int race;
    int baseatk;
    int basevie;
     
            do {
                    Printf("1.Nain 2. Elfe 3. Humain");
                    scanf("%d",&race);
            } while (race > 3 || race < 1);
     
            switch(race)
            {
                case 1 :
                    baseatk = 2;
                    basevie = 12;
                case 2 : 
                    baseatk = 4;
                    basevie = 8;
                case 3 :
                        etc...
            }
     
            for(i=0;i<5;i++)
            {
                PF("Nom des personnages");
                SF("%s",&test);
                equipex->nom[i] = test;
            }
     
            for(i=0;i<5;i++)
            {
                PF("Nom des personnages");
                SF("%d",&test);
                equipex->metier[i] = test;
                equipex->atk[i] = baseatk;
     
                if (test == 1)
                {
                    equipex->atk[i] == equipex->atk[i] + 2;
                }
            }
     
    }
    Voila pour moi ca me parait plus simple, est-il possible de compléter ce code ( et de le corriger ) ??
    En tout cas, merci pour vos réponse ca m'a fait réfléchir toute la journée

    PS: c'est quoi les balises de code ? ca ne marche pas, j'arrive à l'afficher comme vous...

  9. #9
    Membre régulier Avatar de Rappunzell
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Novembre 2007
    Messages : 93
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par Unknown13 Voir le message
    PS: c'est quoi les balises de code ? ca ne marche pas, j'arrive à l'afficher comme vous...
    Il faut mettre CODE entre crochets [ et ] et à la fin /CODE entre crochets aussi

  10. #10
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Rappunzell Voir le message
    Il faut mettre CODE entre crochets [ et ] et à la fin /CODE entre crochets aussi
    Il y a aussi le bouton # dans la barre d'outils au-dessus de la zone d'édition des messages !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Personne pour m'éclairer ??

    Merci pour les balises

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Voila je vous transmet le code, j'ai mis pas mal de temps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct Groupe // declaration de la seule structure Groupe qui contient les elements suivants pour 5 personnages d'un groupe
    {
            char nom[5][20]; // Le nom du personnage en se limitant à 20 caractères possible
            int vie[5]; // vie personnage
            int atk[5]; // points de vie enlevés à l'adversaire
            int race;// race du personnage, ici on ne met pas cinq tableaux parce que une seule race par groupe est autorisé
            int classe[5];// C'est la classe du personnage, guerrier, mage ou pretre
            int sort[5];// declaration de la variable sort dans la structure
            int viemax[5]; // pour comparer par la suite
    }Groupe;
     
    void AfficherMenu (void);
    void ConstituerGroupe(Groupe *);
    void Quitter (void);
     
    int main(int argc, char *argv[])
    {
        int choix;
        AfficherMenu(); // Appelle de la fonction AfficherMenu
        scanf("%d", &choix);
     
        Groupe groupe1;
        Groupe groupe2;
     
      switch(choix) // Menu principal, constituant le choix des utilisateurs
      {
                   case 1 :  ConstituerGroupe(&groupe1);
                             ConstituerGroupe(&groupe2);
                   break;
                   case 2:printf("choix 2\n");
                   break;
                   case 3:printf("choix 3\n");
                   break;
                   case 4:Quitter();
                   default:AfficherMenu();
      }         
     
      return 0;
    }
    void AfficherMenu(void)
    {
         system("CLS");
         printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
         printf("  **                                                                        **  ");
         printf("        **                       HEROIC FANTASY                       **        ");
         printf("              **                                              **                ");
         printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
         printf("\t\t\tBienvenue sur Heroic Fantasy\n\n\n");
         printf("\t\t\t1) Constituer Son groupe\n");
         printf("\t\t\t2) Jouer\n");
         printf("\t\t\t3) Jouer contre l'ordinateur\n");
         printf("\t\t\t4) Quitter le jeu\n\n");
         printf("\t\t\tChoisissez un Mode\n\n");
     
    }
    void ConstituerGroupe (Groupe *groupe1)
    {
         int i=0, n=5; // nombre de membre dans un goupe
         int race;
         int baseatk;
         int basevie;
         int classe;
     
         system("CLS");
         printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
         printf("  **                                                                        **  ");
         printf("        **                Constituer son equipe                       **        ");
         printf("              **                                              **                ");
         printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
         printf("Constituons votre groupe de 5 personnages\n\n\n");
         system("PAUSE");
     
         do {
             printf("\n\nChoix de votre race\n\n");
             printf("1. Humain\n2. Nain\n3. Elfe\n\n");
             scanf("%d",&race);
             } while (race > 3 || race < 1);
     
         switch (race)
         {
                case 1: baseatk = 3;
                        basevie = 10;
                break;
                case 2: baseatk = 2;
                        basevie = 12;
                break;
                case 3: baseatk = 4;
                        basevie = 8;
                break;
         }
     
        for (i=0;i<n;i++) 
        {
            printf("Entrer le Nom de ce personnage  "); // il faudrait que l'ordi dise, le nom de votre perso num 1 (par exemple) est ben ce qu'il a ecrit
            scanf("%s",groupe1->nom[i]);
        }
        for (i=0;i<n;i++)
        {
     
            do {
                system("CLS");
                printf("Choix de votre classe\n");
                printf("1. Guerrier\n2. Pretre\n3. Mage");
                scanf("%d", &classe);
                printf("Votre personnage num %d est un ...", classe); // J'aimerais bien afficher par exemple votre personnage num 1 est un guerrier si il a choisir ...
                system("PAUSE");
     
               } while (classe > 3 || classe < 1);
     
               groupe1->classe[i] = classe;
    }
     
         for (i=0;i<n;i++) 
        {
             groupe1->sort[i] =1;
             groupe1->atk[i]=baseatk;
             groupe1->vie[i]=basevie;
             groupe1->viemax[i]=basevie;
     
             if (groupe1->classe[i] == 1)
             {
                    groupe1->atk[i]=baseatk+2;
             }
        }
    }

    Vous pourriez m'aider pour les commentaires que j'ai mis ?

    Et aussi, comment je peux faire pour afficher toutes les caracteristiques du groupe ( 5persos) que l'utilisateur à créer ??
    Une fois créer j'aimerais bien qu'il visualise tout ca

  13. #13
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    voici une première réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct Groupe // le nom Groupe n'est pas necessaire ici puisque que tu fais un typedef avec le meme nom
    {
        char nom[5][20];
        int vie[5];
        int atk[5];
        int race;
        int classe[5];
        int sort[5];
        int viemax[5];
    }Groupe;
     
    void AfficherMenu (void);
    void ConstituerGroupe(Groupe *);
    void Quitter (void);
     
    int main(void) // si tu n'utilises pas les parametres passes en ligne de commande
    {
        int choix;
        AfficherMenu();
        scanf("%d",&choix);
     
        Groupe groupe1;
        Groupe groupe2;
     
        switch(choix)
        {
            case 1:
                ConstituerGroupe(&groupe1);
                ConstituerGroupe(&groupe2);
                break;
            case 2:
                printf("choix 2\n");
                break;
            case 3:
                printf("choix 3\n");
                break;
            case 4:
                Quitter();
            default:
                AfficherMenu();
        }
     
        return 0;
    }
    void AfficherMenu(void)
    {
        system("CLS");
        printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        printf("  **                                                                        **  ");
        printf("        **                       HEROIC FANTASY                       **        ");
        printf("              **                                              **                ");
        printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
        printf("\t\t\tBienvenue sur Heroic Fantasy\n\n\n");
        printf("\t\t\t1) Constituer Son groupe\n");
        printf("\t\t\t2) Jouer\n");
        printf("\t\t\t3) Jouer contre l'ordinateur\n");
        printf("\t\t\t4) Quitter le jeu\n\n");
        printf("\t\t\tChoisissez un Mode\n\n");
    }
    void ConstituerGroupe (Groupe *groupe1)
    {
        int i=0, n=5; // nombre de membre dans un goupe
        int race=0;
        int baseatk=0;
        int basevie=0;
        int classe=0;
     
        system("CLS");
        printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        printf("  **                                                                        **  ");
        printf("        **                Constituer son equipe                       **        ");
        printf("              **                                              **                ");
        printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
        printf("Constituons votre groupe de 5 personnages\n\n\n");
     
        do {
            printf("\n\nChoix de votre race\n\n");
            printf("1. Humain\n2. Nain\n3. Elfe\n\n");
            scanf("%d",&race);
        } while (race > 3 || race < 1);
     
        switch (race)
        {
            case 1:
                baseatk = 3;
                basevie = 10;
                printf("vous avez choisi : Humain\n\n");
                break;
            case 2:
                baseatk = 2;
                basevie = 12;
                printf("vous avez choisi : Nain\n\n");
                break;
            case 3:
                baseatk = 4;
                basevie = 8;
                printf("vous avez choisi : Elfe\n\n");
                break;
        }
     
        for (i=0;i<n;i++)
        {
            printf("Caracteristiques du personnage %d\n\n",i+1);
     
            printf("Entrez le Nom : ");
            scanf("%s",groupe1->nom[i]);
            printf("le nom du pers %d est : %s\n\n",i+1,groupe1->nom[i]);
     
            do {
                printf("Entrez la classe\n");
                printf("1. Guerrier\n2. Pretre\n3. Mage\n");
                scanf("%d",&classe);
            } while (classe > 3 || classe < 1);
     
            switch (classe)
            {
                case 1:
                    printf("la classe du pers %d est : Guerrier\n\n",i+1);
                    break;
                case 2:
                    printf("la classe du pers %d est : Pretre\n\n",i+1);
                    break;
                case 3:
                    printf("la classe du pers %d est : Mage\n\n",i+1);
                    break;
            }
            groupe1->classe[i] = classe;
     
            groupe1->sort[i] =1;
            groupe1->atk[i]=baseatk;
            groupe1->vie[i]=basevie;
            groupe1->viemax[i]=basevie;
     
            if (groupe1->classe[i] == 1)
            {
                groupe1->atk[i]=baseatk+2;
            }
        }
    }
     
    void Quitter (void)
    {
        // a faire
    }
    pour le nom des personnages, tu devrais vérifier que le nom entré fait bien moins de 19 caractères (19 car 19 caractères + \0 = 20), sinon tu vas au devant de pb.

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Ooo super c'est genial ça fonctionne....
    Il ne me manque plus que l'affichage mais c'est imcomprehensible ce que la console m'affiche.
    En effet, j'aimerais créer une fonction AfficherGroupe qui affiche toutes les informations relatives que l'utilisateur a rentrées ( ex : perso 1 = humain pretre 10 hps 4 pts de vie etc... )
    J'ai essayé mais ca ne marche pas ( essaye je te file le code source )...

    Ah oui et pour finir, j'aurais juste voulu un pti truc : voila j'aimerais que suivant les races que l'utilisateurs choisis, il n'ait pas accés à toutes les classes ...

    L'humain aurait accés a toutes les classes ( guerriers, pretre et mage ), tandis que le nain que ( guerrier et pretre ) et elfe ( guerrier mage )... Es-ce possible ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    #include <stdio.h>
    #include <stdlib.h>
     
    /*******************************/
    /* Declaration de la structure */
    /*******************************/
     
    typedef struct Groupe // declaration de la seule structure Groupe qui contient les elements suivants pour 5 personnages d'un groupe
    {
            char nom[5][20]; // Le nom du personnage en se limitant à 20 caractères possible
            int vie[5]; // vie personnage
            int atk[5]; // points de vie enlevés à l'adversaire
            int race;// race du personnage, ici on ne met pas cinq tableaux parce que une seule race par groupe est autorisé
            int classe[5];// C'est la classe du personnage, guerrier, mage ou pretre
            int sort[5];// declaration de la variable sort dans la structure
            int viemax[5]; // pour comparer par la suite
    }Groupe;
     
    /*****************************/
    /*  Prototypes de fonctions  */
    /*****************************/
     
    void AfficherMenu (void);               
    void ConstituerGroupe(Groupe *);
    void Quitter (void);
    void AfficherGroupe(groupe1);
     
    /******************************************************************************/
    /*                                 MAIN                                       */
    /******************************************************************************/
     
    int main(int argc, char *argv[])
    {
        int choix;
        AfficherMenu(); // Appelle de la fonction AfficherMenu
        scanf("%d", &choix);
     
        Groupe groupe1;
        Groupe groupe2;
     
      do {
     
      switch(choix) // Menu principal, constituant le choix des utilisateurs
      {
                   case 1 :  ConstituerGroupe(&groupe1);
                             ConstituerGroupe(&groupe2);
                   break;
                   case 2:printf("choix 2\n");
                   break;
                   case 3:printf("choix 3\n");
                   break;
                   case 4:Quitter();
                   default:AfficherMenu();
      }
       } while ( choix>4 || choix <1);         
     
      return 0;
    }
     
    /***************************************************/
    /*                AFFICHER LE MENU                 */
    /***************************************************/
     
    void AfficherMenu(void)
    {
         system("CLS");
         printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
         printf("  **                                                                        **  ");
         printf("        **                       HEROIC FANTASY                       **        ");
         printf("              **                                              **                ");
         printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
         printf("\t\t\tBienvenue sur Heroic Fantasy\n\n\n");
         printf("\t\t\t1) Constituer Son groupe\n");
         printf("\t\t\t2) Jouer\n");
         printf("\t\t\t3) Jouer contre l'ordinateur\n");
         printf("\t\t\t4) Quitter le jeu\n\n");
         printf("\t\t\tChoisissez un Mode\n\n");
     
    }
     
    /***************************************************/
    /*      CHOISIR+PERSONNALISER SON PERSONNAGE       */
    /***************************************************/
     
     
    void ConstituerGroupe (Groupe *groupe1)
    {
         int i=0, n=5; // nombre de membre dans un goupe
         int race;
         int baseatk;
         int basevie;
         int classe;
     
         system("CLS");
         printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
         printf("  **                                                                        **  ");
         printf("        **                Constituer son equipe                       **        ");
         printf("              **                                              **                ");
         printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
         printf("\t\t\tChoisis ton epique equipe\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
         system("PAUSE");
     
         do {
             system("CLS");
             printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
             printf("  **                                                                        **  ");
             printf("        **                  Choix de la race                          **        ");
             printf("              **                                              **                ");
             printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
             printf("\t\t\t1. Humain\n\n");
             printf("Les humains sont une race jeune, aux talents tres varies, maitrisant les arts ducombat, l'artisanat et la magie avec une efficacite stupefiante.\nLa valeur et l'optimisme des humains les ont conduits a batir certains des plus grands royaummes du monde.\nL'humanite aspire a ranimer sa gloire et a se forger un nouvel avenir rayonnant.\n");
             printf("\t\t\t2. Nain\n\n");
             printf("Autrefois les habitants des jungles, les nains furent chasses par les elfes.\nIls se retrancherent ainsi dans les mythiques montagnes de forgeron et se       lierent d'amitie avec les humains en preparant leur revanche contre les elfes.\n\n");
             printf("\t\t\t3. Elfe\n\n");
             printf("Les elfes sont une noble race et fonderent un vaste empire il y a 10.000 ans,   mais leur usage imprudente de la magie les conduisit a leur isolement dans les  forets jusqu'au retour de leur ancien ennemi: les nains.\nNe disposant d'aucune alternative, les elfes emergerent de leur isolement, afin de defendre leur place dans le monde\n");
             printf("\n\n\t\t\tAlors quelle race veux-tu incarner ?");
             scanf("%d",&race);
             } while (race > 3 || race < 1);
     
         switch (race)
         {
                case 1: baseatk = 3;
                        basevie = 10;
                        printf("Hehe bon choix, la race humaine a un bel avenir devant elle");
                break;
                case 2: baseatk = 2;
                        basevie = 12;
                        printf("vous avez choisi : Nain\n\n");
                break;
                case 3: baseatk = 4;
                        basevie = 8;
                        printf("vous avez choisi : Elfe\n\n");
                break;
         }
             system("CLS");
             printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
             printf("  **                                                                        **  ");
             printf("        **            Enter le noms de vos personnages                **        ");
             printf("              **                                              **                ");
             printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
        for (i=0;i<n;i++) 
        {
            printf("\t\t\tCaracteristiques du personnage %d\n\n",i+1);
            printf("Entrer le Nom de ce personnage: ");
            scanf("\n\n%s",groupe1->nom[i]);
            printf("Le nom du personnage %d est : %s\n\n", i+1, groupe1->nom[i]);
        } 
        for (i=0;i<n;i++)
        {
     
            do {
                 system("CLS");
                 printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                 printf("  **                                                                        **  ");
                 printf("        **       Choisis une classe propre a chaque personnage        **        ");
                 printf("              **                                              **                ");
                 printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
                 printf("\t\t\tChoix de votre classe\n\n\n");
                 printf("\t\t1. Guerrier\n\n");
                 printf("Les guerriers s'entrainent en permanence et aspirent a la perfection dans les   combats.\nIls sont unis par leur volonte singulierre de participer a de glorieuses        batailles. Un guerrier digne de ce nom est fort, resistant et exceptionnellementviolent\n\n");
                 printf("\t\t2. Pretre\n\n");
                 printf("Les pretres sont les guides spirituels de leur peuple.Ils sont en mesure de     faconner les croyances individuelles, qu'il s'agisse de guerir ou de blesser\n\n");
                 printf("\t\t3. Mage\n\n");
                 printf("Les mages possedent un grand savoir et font preuve d'etonnantes capacites.\nLes mages combattent rarement au corps a corps. Ils preferent attaquer a\ndistance, lancant de puissants sorts sur leurs ennemis.\n\n");
                 printf("\n\n\t\t\t Alors ? Tu choisis quoi ?");
                 scanf("%d", &classe);
                 system("PAUSE");
               } while (classe > 3 || classe < 1);
     
                switch (classe)
                {
                case 1:
                    printf("la classe du personnage %d est : Guerrier\n\n",i+1);
                    break;
                case 2:
                    printf("la classe du personnage %d est : Pretre\n\n",i+1);
                    break;
                case 3:
                    printf("la classe du personnage %d est : Mage\n\n",i+1);
                    break;
            }
               system("PAUSE");
               groupe1->classe[i] = classe;
               groupe1->sort[i] =1;
               groupe1->atk[i]=baseatk;
               groupe1->vie[i]=basevie;
               groupe1->viemax[i]=basevie;
     
    }
     
         for (i=0;i<n;i++) 
        {
             groupe1->sort[i] =1;
             groupe1->atk[i]=baseatk;
             groupe1->vie[i]=basevie;
             groupe1->viemax[i]=basevie;
     
             if (groupe1->classe[i] == 1)
             {
                    groupe1->atk[i]=baseatk+2;
             }
        }
        system("CLS");
        AfficherGroupe(groupe1);
        system("PAUSE");
    }
     
    /***************************************************/
    /*                QUITTER LE JEU                   */
    /***************************************************/
     
    void Quitter (void)
    {
         long choix4 = 30;
     
         system("CLS");
         printf("\nVoulez-vous vraiment quitter Heroic Fantasy ?\n");
         printf("\n\t\t OUI : tapez 0 \t NON : Tapez 1\n");
         scanf("%d", &choix4);
     
     
         if (choix4 == 0)
         {
                    system("CLS");
                    printf("\n\n\n\n\n\n\n\n\n\t\t\tA bientot dans Heroic Fantasy...\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                    system("PAUSE");
         }
         else if (choix4 == 1)
         {
                     AfficherMenu();
                     system("PAUSE");
         }
         else
         {
             system("CLS");
             Quitter();
         }
    }
    /***************************************************/
    /*     AFFICHER CARACTERISTIQUES PERSONNAGES       */ 
    /***************************************************/
     
     
    void AfficherGroupe(Groupe groupe1) 
    {
         printf("race : %d\n",groupe1.race);
     
      int i;
        for (i=0;i<5;i++) 
        {
            printf("nom : %s\n",groupe1.nom);
            printf("sort : %d\n",groupe1.sort);
            printf("vie de %d : %d\n",groupe1.vie[i]);
            printf("atk de %d : %d\n",groupe1.atk[i]);
            printf("classe de %d : %d\n",groupe1.classe[i]);
            printf("viemax de %d : %d\n",groupe1.viemax[i]);
        }
    }

  15. #15
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    donne plutôt un pointeur à AfficherGroupe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    void AfficherGroupe(Groupe *groupe1) 
    {
        int i;
     
        printf("race : %d\n",groupe1->race);
     
        for (i=0;i<5;i++) 
        {
            printf("nom de %d : %s\n",i+1,groupe1->nom[i]);
            printf("sort de %d : %d\n",i+1,groupe1->sort[i]);
            printf("vie de %d : %d\n",i+1,groupe1->vie[i]);
            printf("atk de %d : %d\n",i+1,groupe1->atk[i]);
            printf("classe de %d : %d\n",i+1,groupe1->classe[i]);
            printf("viemax de %d : %d\n",i+1,groupe1->viemax[i]);
        }
    }
    1) tu avais oublié quelques "[i]"
    2) quand tu veux afficher deux infos (ie avec deux %d), il faut donner les deux paramètres correspondant, sinon -> comportement indéterminé

  16. #16
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par Unknown13 Voir le message
    Ah oui et pour finir, j'aurais juste voulu un pti truc : voila j'aimerais que suivant les races que l'utilisateurs choisis, il n'ait pas accés à toutes les classes ...

    L'humain aurait accés a toutes les classes ( guerriers, pretre et mage ), tandis que le nain que ( guerrier et pretre ) et elfe ( guerrier mage )... Es-ce possible ?
    ben oui c'est possible. Il suffit, lorsque tu demandes la classe, de ne proposer que celles qui sont possibles étant donnée la race. Pour cela, tu fais un bête switch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    swich(race) {
        case(humain)
            printf(vous avez le choix entre ? et ?)
            verification du choix
        case(nain)
            printf(vous avez le choix entre ? et ?)
            verification du choix
        case(elfe)
            printf(vous avez le choix entre ? et ?)
            verification du choix
    }

  17. #17
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par corentin59 Voir le message
    Pour cela, tu fais un bête switch
    A moins qu'un elfe soit aussi un nain et un humain, il manque des breaks.

  18. #18
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    arf encore un switch et je en sais mm pas ou le placer...

    Il n'y a pas par exemple la posibilité de faire un if ou autre ??

  19. #19
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    voici un exemple complet.
    Dans ce code, j'ai modifié pas mal de choses par rapport au tien, notamment des points qui me semblaient mal organisés ou inutiles. Relies donc le bien. Enfin, dans le code que tu donnes, essaies d'avoir un indentation propre !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    /******************************************************************************/
    /* Declaration de la structure                                                */
    /******************************************************************************/
    typedef struct {
        char nom[5][20]; // Le nom du personnage en se limitant à 20 caractères possible
        int vie[5]; // vie personnage
        int atk[5]; // points de vie enlevés à l'adversaire
        int race;// race du personnage, ici on ne met pas cinq tableaux parce que une seule race par groupe est autorisé
        int classe[5];// C'est la classe du personnage, guerrier, mage ou pretre
        int sort[5];// declaration de la variable sort dans la structure
        int viemax[5]; // pour comparer par la suite
    }Groupe;
     
    /******************************************************************************/
    /* Prototypes de fonctions                                                    */
    /******************************************************************************/
    void AfficherMenu(void);
    void ConstituerGroupe(Groupe *);
    int Quitter (void);
    void AfficherGroupe(Groupe *);
     
    /******************************************************************************/
    /* Main                                                                       */
    /******************************************************************************/
    int main(void) {
        int choix=0;
        Groupe groupe1, groupe2;
     
        do {
            AfficherMenu();
            scanf("%d",&choix);
            while(getchar()!='\n'); // pour vider le buffer
            switch(choix) {
                case 1 :
                    ConstituerGroupe(&groupe1);
                    system("CLS");
                    printf("Recapitulatif pour le groupe 1 :\n");
                    AfficherGroupe(&groupe1);
                    system("PAUSE");
                    ConstituerGroupe(&groupe2);
                    system("CLS");
                    printf("Recapitulatif pour le groupe 2 :\n");
                    AfficherGroupe(&groupe2);
                    system("PAUSE");
                    break;
                case 2:
                    // choix 2 pas encore implemente
                    choix = 0;
                    break;
                case 3:
                    // choix 3 pas encore implemente
                    choix = 0;
                    break;
                case 4:
                    if ( Quitter() ) {
                        choix = 0;
                    } else {
                        exit(EXIT_SUCCESS);
                    }
            }
        } while ( choix>4 || choix <1);
     
      return 0;
    }
     
    /******************************************************************************/
    /* Affichage du menu                                                          */
    /******************************************************************************/
    void AfficherMenu(void) {
        system("CLS");
        printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        printf("  **                                                                        **  ");
        printf("        **                       HEROIC FANTASY                       **        ");
        printf("              **                                              **                ");
        printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
        printf("\t\t\tBienvenue sur Heroic Fantasy\n\n\n");
        printf("\t\t\t1) Constituer son groupe\n");
        printf("\t\t\t2) Jouer\n");
        printf("\t\t\t3) Jouer contre l'ordinateur\n");
        printf("\t\t\t4) Quitter le jeu\n\n");
        printf("\t\t\tChoisissez un Mode : ");
    }
     
    /******************************************************************************/
    /* Cinstitution du groupe                                                     */
    /******************************************************************************/
    void ConstituerGroupe (Groupe *groupe1) {
        int i=0, n=5; // nombre de membre dans un goupe
        int race=0;
        int baseatk=0;
        int basevie=0;
        int classe=0;
        char nom[256];
     
        do {
            system("CLS");
            printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            printf("  **                                                                        **  ");
            printf("        **                Constituer son equipe                       **        ");
            printf("              **                                              **                ");
            printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
     
            printf("Choix de la race :\n\n\n");
            printf("1. Humain\n\n");
            printf("Les humains sont une race jeune, aux talents tres varies, maitrisant les arts du combat, l'artisanat et la magie avec une efficacite stupefiante.\nLa valeur et l'optimisme des humains les ont conduits a batir certains des plus grands royaummes du monde.\nL'humanite aspire a ranimer sa gloire et a se forger un nouvel avenir rayonnant.\n\n");
            printf("2. Nain\n\n");
            printf("Autrefois les habitants des jungles, les nains furent chasses par les elfes.\nIls se retrancherent ainsi dans les mythiques montagnes de forgeron et se       lierent d'amitie avec les humains en preparant leur revanche contre les elfes.\n\n");
            printf("3. Elfe\n\n");
            printf("Les elfes sont une noble race et fonderent un vaste empire il y a 10.000 ans,   mais leur usage imprudente de la magie les conduisit a leur isolement dans les  forets jusqu'au retour de leur ancien ennemi: les nains.\nNe disposant d'aucune alternative, les elfes emergerent de leur isolement, afin de defendre leur place dans le monde.\n\n");
            printf("Quelle race veux-tu incarner ? ");
            scanf("%d",&race);
            while(getchar()!='\n'); // pour vider le buffer
        } while (race > 3 || race < 1);
        groupe1->race = race;
        switch (race) {
            case 1:
                baseatk = 3;
                basevie = 10;
                printf("\nHehe bon choix, la race humaine a un bel avenir devant elle.\n\n");
                break;
            case 2:
                baseatk = 2;
                basevie = 12;
                printf("\nVous avez choisi : Nain\n\n");
                break;
            case 3:
                baseatk = 4;
                basevie = 8;
                printf("\nVous avez choisi : Elfe\n\n");
                break;
        }
     
        for (i=0;i<n;i++) {
            printf("Nom du personnage %d : ",i+1);
            fgets(nom,256,stdin);
            nom[strlen(nom)-1] = '\0';
            nom[19] = '\0';
            strcpy(groupe1->nom[i],nom);
            printf("Vous avez choisi : %s\n\n",groupe1->nom[i]);
        }
     
        printf("Choix de la classe :\n\n\n");
        if ( race == 1 ) {
            printf("1. Guerrier\n\n");
            printf("Les guerriers s'entrainent en permanence et aspirent a la perfection dans les   combats.\nIls sont unis par leur volonte singulierre de participer a de glorieuses        batailles. Un guerrier digne de ce nom est fort, resistant et exceptionnellement violent.\n\n");
            printf("2. Pretre\n\n");
            printf("Les pretres sont les guides spirituels de leur peuple.Ils sont en mesure de     faconner les croyances individuelles, qu'il s'agisse de guerir ou de blesser\n\n");
            printf("3. Mage\n\n");
            printf("Les mages possedent un grand savoir et font preuve d'etonnantes capacites.\nLes mages combattent rarement au corps a corps. Ils preferent attaquer a\ndistance, lancant de puissants sorts sur leurs ennemis.\n\n");
            for (i=0;i<n;i++) {
                do {
                    printf("Quelle classe pour le personnage %d ? ",i+1);
                    scanf("%d",&classe);
                    while(getchar()!='\n'); // pour vider le buffer
                } while (classe > 3 || classe < 1);
                switch (classe) {
                    case 1:
                        printf("Vous avez choisi : Guerrier\n\n");
                        break;
                    case 2:
                        printf("Vous avez choisi : Pretre\n\n");
                        break;
                    case 3:
                        printf("Vous avez choisi : Mage\n\n");
                        break;
                }
                groupe1->classe[i] = classe;
            }
        } else if ( race == 2 ) {
            printf("1. Guerrier\n\n");
            printf("Les guerriers s'entrainent en permanence et aspirent a la perfection dans les   combats.\nIls sont unis par leur volonte singulierre de participer a de glorieuses        batailles. Un guerrier digne de ce nom est fort, resistant et exceptionnellement violent.\n\n");
            printf("2. Pretre\n\n");
            printf("Les pretres sont les guides spirituels de leur peuple.Ils sont en mesure de     faconner les croyances individuelles, qu'il s'agisse de guerir ou de blesser\n\n");
            for (i=0;i<n;i++) {
                do {
                    printf("Quelle classe pour le personnage %d ? ",i+1);
                    scanf("%d",&classe);
                    while(getchar()!='\n'); // pour vider le buffer
                } while (classe > 2 || classe < 1);
                switch (classe) {
                    case 1:
                        printf("Vous avez choisi : Guerrier\n\n");
                        break;
                    case 2:
                        printf("Vous avez choisi : Pretre\n\n");
                        break;
                }
                groupe1->classe[i] = classe;
            }
        } else if ( race == 3 ) {
            printf("1. Guerrier\n\n");
            printf("Les guerriers s'entrainent en permanence et aspirent a la perfection dans les   combats.\nIls sont unis par leur volonte singulierre de participer a de glorieuses        batailles. Un guerrier digne de ce nom est fort, resistant et exceptionnellement violent.\n\n");
            printf("2. Mage\n\n");
            printf("Les mages possedent un grand savoir et font preuve d'etonnantes capacites.\nLes mages combattent rarement au corps a corps. Ils preferent attaquer a\ndistance, lancant de puissants sorts sur leurs ennemis.\n\n");
            for (i=0;i<n;i++) {
                do {
                    printf("Quelle classe pour le personnage %d ? ",i+1);
                    scanf("%d",&classe);
                    while(getchar()!='\n'); // pour vider le buffer
                } while (classe > 2 || classe < 1);
                if ( classe == 2 ) {
                    classe = 3;
                }
                switch (classe) {
                    case 1:
                        printf("Vous avez choisi : Guerrier\n\n");
                        break;
                    case 3:
                        printf("Vous avez choisi : Mage\n\n");
                        break;
                }
                groupe1->classe[i] = classe;
            }
        }
        for (i=0;i<n;i++) {
            groupe1->classe[i] = classe;
            groupe1->sort[i] =1;
            groupe1->atk[i]=baseatk;
            groupe1->vie[i]=basevie;
            groupe1->viemax[i]=basevie;
        }
    }
     
    /******************************************************************************/
    /* Quitter le jeu                                                             */
    /******************************************************************************/
    int Quitter (void) {
        int choix = 0;
     
        do {
            system("CLS");
            printf("\nVoulez-vous vraiment quitter Heroic Fantasy ?\n");
            printf("\n\t\t OUI : tapez 1 \t NON : tapez 2\n");
            scanf("%d",&choix);
            while(getchar()!='\n'); // pour vider le buffer
        } while ( choix>2 || choix <1);
     
        if (choix == 1) {
            system("CLS");
            printf("\n\n\n\n\n\n\n\n\n\t\t\tA bientot dans Heroic Fantasy...\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            return 0;
        } else {
            return 1;
        }
    }
     
    /******************************************************************************/
    /* Affichage d'un groupe                                                      */
    /******************************************************************************/
    void AfficherGroupe(Groupe *groupe1) {
        int i;
     
        switch (groupe1->race) {
            case 1:
                printf("race : humain\n\n");
                break;
            case 2:
                printf("race : nain\n\n");
                break;
            case 3:
                printf("race : elfe\n\n");
                break;
        }
     
        for (i=0;i<5;i++) {
            printf("nom de %d : %s\n",i+1,groupe1->nom[i]);
            printf("sort de %d : %d\n",i+1,groupe1->sort[i]);
            printf("vie de %d : %d\n",i+1,groupe1->vie[i]);
            printf("atk de %d : %d\n",i+1,groupe1->atk[i]);
            switch (groupe1->classe[i]) {
                case 1:
                    printf("classe de %d : guerrier\n",i+1);
                    break;
                case 2:
                    printf("classe de %d : pretre\n",i+1);
                    break;
                case 3:
                    printf("classe de %d : mage\n",i+1);
                    break;
            }
            printf("viemax de %d : %d\n\n",i+1,groupe1->viemax[i]);
        }
    }
    Dans ce code, il serait plus propre de factoriser encore un peu (faire peut-être plus de fonctions).

  20. #20
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par Unknown13 Voir le message
    arf encore un switch et je en sais mm pas ou le placer...

    Il n'y a pas par exemple la posibilité de faire un if ou autre ??
    dans la syntaxe, un switch n'est pas tellement différent d'un if

Discussions similaires

  1. Question de structure pour un jeu de type Bomberman
    Par FabaCoeur dans le forum Développement 2D, 3D et Jeux
    Réponses: 29
    Dernier message: 19/04/2007, 13h33
  2. Menus en OpenGL pour un jeu?
    Par shifty.net dans le forum OpenGL
    Réponses: 7
    Dernier message: 02/07/2004, 12h38
  3. Réponses: 6
    Dernier message: 30/06/2004, 08h16
  4. [Threads]Comment les organiser pour un jeu du serpent ?
    Par Pill_S dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 11/05/2004, 15h22
  5. Quel style de DirectX pour un jeu 2D ?
    Par delire8 dans le forum DirectX
    Réponses: 34
    Dernier message: 31/07/2003, 00h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo