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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    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 chevronné 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
    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
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    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 chevronné 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
    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
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    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 éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    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.

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