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 :

Jeu Isola en C


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut Jeu Isola en C
    Bonjour à toutes et tous !!

    Je dois faire un jeu Isola etj'ai un problème pour la vérification de placement.
    Je m'explique :

    *Base du jeu : Le but de ce jeu est d'isoler son adversaire pour qu'il ne puisse plus bouger. Cela se passe sur un plateau de jeu de taille quelconque (elle est choisit par les joueurs), les joueurs décident de leurs placement initiaux et tente d'isoler leur adversaire le plus rapidement possible.

    Mon problème se situe au niveau du placement des joueurs, en effet les 2 joueurs peuvent se placer au même endroit sans que le programme rale alors que je pensais avoir fait la vérification.

    Par exemple : le plateau de jeu fait 5 sur 5, le joueur 1 se place sur la case 3-3, le joueur 2 pourra lui aussi se placer sur la case 3-3

    J'ai une structure pour le plateau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //On définit une structure plateau
    struct plateau
    {
           int ligne;
           int colonne;
           int cases;
           int posx1;
           int posx2;
           int posy1;
           int posy2;
           boolean* matrix ;
    };
    //On nomme struct plateau en matriciel.
    typedef struct plateau matriciel ;
    Voici comment je créé mon plateau de jeu :
    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
    //Fonction CreateDynMatrice2d appelée par la fonction tailleplateau.
    matriciel CreateDynMatrice2d(int ligne,int colonne)
    {
           int i ;
           matriciel matrice ;
     
    	   //Sauvegarde des dimensions de la matrice dans la structure.
           matrice.ligne = ligne ;
           matrice.colonne = colonne ;
     
    	   //Réservation de la mémoire pour la matrice.
           matrice.matrix = (boolean*)malloc(ligne*colonne*sizeof(boolean));
     
    	   //Mise de toutes les cases de la matrice à vrai.
           for (i = 0 ; i < (ligne*colonne); i++)
           {
    		   matrice.matrix[i] = true;
           }
     
    	   //Enregistrement du nombre de cases
           matrice.cases = (ligne*colonne);
     
    	   //On renvoie la matrice créée.
           return matrice ;
    }
    //Fin fonction CreateDynMatrice2d
    Viens enfin le code pour le placement de joueurs :
    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
    //Fonction de placementjoueur appelée par les procédure un_joueur et deux_joueurs.
    matriciel placementjoueur(matriciel matrice, joueur j)
    {
    	//Déclaration des variables
    	//pour savoir ou le joueur veut se positionner.
    	int ligneplace;
    	int colonneplace;
    	//pour savoir si le placement du joueur est bon.
    	boolean placement = false;
     
    	while (placement == false)
    	{
    	   //Demande de la position de départ du joueur.
    	   //Demande pour la ligne
    	   printf("\n%s saisissez la ligne ou vous voulez vous placer : ",j.nom);
    	   scanf("%d",&ligneplace);
     
    	   //Les valeurs doivent êre comprisent entre 0 et la taille de la matrice.
    	   while ((ligneplace <= 0) || (ligneplace > matrice.ligne))
    	   {
    		   //Afichage d'un message d'erreur si les valeurs saisies ne sont pas bonnes.
    		   printf("%s, vous devez saisir des valeur comprisent entre 1 et %d\n\n", j.nom, matrice.ligne);
    		   printf("%s saisissez la ligne ou vous voulez vous placer : ",j.nom);
    		   scanf("%d",&ligneplace);
    	   }
     
    	   //Demande pour la ligne
    	   printf("%s saisissez la colonne ou vous voulez vous placer : ",j.nom);
    	   scanf("%d",&colonneplace);
     
     
    	   //Les valeurs doivent êre comprisent entre 0 et la taille de la matrice.
    	   while ((colonneplace <= 0) || (colonneplace > matrice.colonne))
    	   {
    		   //Afichage d'un message d'erreur si les valeurs saisies ne sont pas bonnes.
    		   printf("%s, vous devez saisir des valeur comprisent entre 1 et %d\n\n", j.nom, matrice.colonne);
    		   printf("%s saisissez la colonne ou vous voulez vous placer : ",j.nom);
    		   scanf("%d",&colonneplace);
    	   }
     
    	   //Vérification du placement du joueur, si sa position est fausse, on lui demande de ressaisir.
    	   if (matrice.matrix[(ligneplace*matrice.ligne)+colonneplace] == false)
    	   {
    		   printf("%s la position que vous avez choisie n'est pas accessible, veuillez ressaisir des valeurs correctes.\n\n", j.nom);
    	   }
    	   else
    	   {
    		   placement = true;
    	   }
     
    	}
     
    	//Enregistrement de la position du joueur.
    	matrice.posy1=colonneplace--;
    	matrice.posx1=ligneplace--;
     
    	//Mise a faux de la place prise par le joueur.
    	matrice.matrix[(ligneplace*matrice.ligne)+colonneplace] = false;
     
    	return matrice;
    }
    //Fin fonction placementjoueur
    Je pense que j'ai mis ce qu'il y a de nécessaire pour voir l'erreur.
    merci de vos réponses

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    J'ai oublié de préciser que quand j'initialise le plateau de jeu a faux je ne peut pas placer mes joueurs

    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
    //Fonction CreateDynMatrice2d appelée par la fonction tailleplateau.
    matriciel CreateDynMatrice2d(matriciel matrice, int ligne,int colonne)
    {
           int i ;
     
    	   //Sauvegarde des dimensions de la matrice dans la structure.
           matrice.ligne = ligne ;
           matrice.colonne = colonne ;
     
    	   //Réservation de la mémoire pour la matrice.
           matrice.matrix = (boolean*)malloc(ligne*colonne*sizeof(boolean));
     
    	   //Mise de toutes les cases de la matrice à vrai.
           for (i = 0 ; i < (ligne*colonne); i++)
           {
    		   matrice.matrix[i] =false;
           }
     
    	   //Enregistrement du nombre de cases du plateau de jeu
           matrice.cases = (ligne*colonne);
     
    	   //On renvoie la matrice créée.
           return matrice ;
    }
    //Fin fonction CreateDynMatrice2d

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Jeu Isola en C
    Citation Envoyé par Talfox
    Je pense que j'ai mis ce qu'il y a de nécessaire pour voir l'erreur.
    En effet :
    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
     
    Compiling: main.c
    main.c:11: error: syntax error before "boolean"
    main.c:11: warning: no semicolon at end of struct or union
    main.c:19: error: parameter `matrice' has incomplete type
    main.c:19: error: return type is an incomplete type
    main.c:19: warning: no previous prototype for 'CreateDynMatrice2d'
    main.c: In function `CreateDynMatrice2d':
    main.c:27: error: `boolean' undeclared (first use in this function)
    main.c:27: error: (Each undeclared identifier is reported only once
    main.c:27: error: for each function it appears in.)
    main.c:27: error: syntax error before ')' token
    main.c:32: error: `false' undeclared (first use in this function)
    main.c:39: warning: `return' with a value, in function returning void
    main.c: At top level:
    main.c:44: error: syntax error before "joueur"
    main.c:45: error: return type is an incomplete type
    main.c:45: warning: function declaration isn't a prototype
    main.c: In function `placementjoueur':
    main.c:51: error: `boolean' undeclared (first use in this function)
    main.c:51: error: syntax error before "placement"
    main.c:53: error: `placement' undeclared (first use in this function)
    main.c:53: error: `false' undeclared (first use in this function)
    main.c:57: error: implicit declaration of function `printf'
    main.c:57: warning: nested extern declaration of `printf'
    <internal>:0: warning: redundant redeclaration of 'printf'
    main.c:57: error: `j' undeclared (first use in this function)
    main.c:58: error: implicit declaration of function `scanf'
    main.c:58: warning: nested extern declaration of `scanf'
    <internal>:0: warning: redundant redeclaration of 'scanf'
    main.c:61: error: `matrice' undeclared (first use in this function)
    main.c:90: error: `true' undeclared (first use in this function)
    main.c:102: warning: `return' with a value, in function returning void
    Process terminated with status 1 (0 minutes, 0 seconds)
    Merci de poster du code compilable...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       //Mise de toutes les cases de la matrice à vrai.
       for (i = 0 ; i < (ligne*colonne); i++)
       {
          matrice.matrix[i] = false;
       }
    Pas très cohérent tout ça. Alors c'est true ou c'est false ?

    Avec ce code :
    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
     
    #include <stdlib.h>
    #include <stdio.h>
     
    typedef enum
    {
       false,
       true
    }
    boolean;
     
    //On définit une structure plateau
    struct plateau
    {
       int ligne;
       int colonne;
       int cases;
       int posx1;
       int posx2;
       int posy1;
       int posy2;
       boolean* matrix ;
    };
    //On nomme struct plateau en matriciel.
    typedef struct plateau matriciel ;
     
     
    typedef struct
    {
       char const *nom;
    }
    joueur;
     
    //Fonction CreateDynMatrice2d appelée par la fonction tailleplateau.
    static matriciel CreateDynMatrice2d(matriciel matrice, int ligne, int colonne)
    {
       int i ;
     
       //Sauvegarde des dimensions de la matrice dans la structure.
       matrice.ligne = ligne ;
       matrice.colonne = colonne ;
     
       //Réservation de la mémoire pour la matrice.
       matrice.matrix = malloc(ligne * colonne * sizeof*matrice.matrix);
     
       //Mise de toutes les cases de la matrice à vrai.
       for (i = 0 ; i < (ligne*colonne); i++)
       {
          matrice.matrix[i] = true;
       }
     
       //Enregistrement du nombre de cases du plateau de jeu
       matrice.cases = (ligne * colonne);
     
       //On renvoie la matrice créée.
       return matrice ;
    }
    //Fin fonction CreateDynMatrice2d
     
    /*Fonction de placementjoueur appelée par les procédure un_joueur et deux_joueurs. */
    static matriciel placementjoueur(matriciel matrice, joueur j)
    {
       //Déclaration des variables
       //pour savoir ou le joueur veut se positionner.
       int ligneplace;
       int colonneplace;
       //pour savoir si le placement du joueur est bon.
       boolean placement = false;
     
       while (placement == false)
       {
          //Demande de la position de départ du joueur.
          //Demande pour la ligne
          printf("\n%s saisissez la ligne ou vous voulez vous placer : ", j.nom);
          scanf("%d", &ligneplace);
     
          //Les valeurs doivent êre comprisent entre 0 et la taille de la matrice.
          while ((ligneplace <= 0) || (ligneplace > matrice.ligne))
          {
             //Afichage d'un message d'erreur si les valeurs saisies ne sont pas bonnes.
             printf("%s, vous devez saisir des valeur comprisent entre 1 et %d\n\n", j.nom, matrice.ligne);
             printf("%s saisissez la ligne ou vous voulez vous placer : ", j.nom);
             scanf("%d", &ligneplace);
          }
     
          //Demande pour la ligne
          printf("%s saisissez la colonne ou vous voulez vous placer : ", j.nom);
          scanf("%d", &colonneplace);
     
     
          //Les valeurs doivent êre comprisent entre 0 et la taille de la matrice.
          while ((colonneplace <= 0) || (colonneplace > matrice.colonne))
          {
             //Afichage d'un message d'erreur si les valeurs saisies ne sont pas bonnes.
             printf("%s, vous devez saisir des valeur comprisent entre 1 et %d\n\n", j.nom, matrice.colonne);
             printf("%s saisissez la colonne ou vous voulez vous placer : ", j.nom);
             scanf("%d", &colonneplace);
          }
     
          //Vérification du placement du joueur, si sa position est fausse, on lui demande de ressaisir.
          if (matrice.matrix[(ligneplace*matrice.ligne) + colonneplace] == false)
          {
             printf("%s la position que vous avez choisie n'est pas accessible, veuillez ressaisir des valeurs correctes.\n\n", j.nom);
          }
          else
          {
             placement = true;
          }
     
       }
     
       //Enregistrement de la position du joueur.
       matrice.posy1 = colonneplace--;
       matrice.posx1 = ligneplace--;
     
       //Mise a faux de la place prise par le joueur.
       matrice.matrix[(ligneplace*matrice.ligne) + colonneplace] = false;
     
       return matrice;
    }
    //Fin fonction placementjoueur
     
    int main(void)
    {
       matriciel matrice;
       int ligne = 3;
       int colonne = 4;
     
       matrice = CreateDynMatrice2d (matrice, ligne, colonne);
     
       joueur j = {"joueur A "};
       matrice = placementjoueur(matrice, j);
     
       return 0;
    }
    j'arrive à ça,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    joueur A  saisissez la ligne ou vous voulez vous placer : 2
    joueur A  saisissez la colonne ou vous voulez vous placer : 2
    mais il y a une fuite mémoire (manque un free()...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SYSALLOC Bloc 003D24E8 (48 bytes) malloc'ed at line 48 of 'main.c' not freed
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Idem, impossible à tester sans plus de code ...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Je vous poste tout le code que j'ai fait :
    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
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    //On définit une structure booléen.
    typedef enum bool {true,false} boolean ;
     
    //On définit une structure plateau
    struct plateau
    {
           int ligne;
           int colonne;
           int cases;
           int posx1;
           int posx2;
           int posy1;
           int posy2;
           boolean* matrix ;
    };
    //On nomme struct plateau en matriciel.
    typedef struct plateau matriciel ;
     
    //On définit une structure Joueur.
    struct Joueur
    {
           char nom [26];
           int posx;
           int posy;
    };
    //On nomme struct Joueur en joueur.
    typedef struct Joueur joueur;
     
     
    /******************************************************************************/
     
    /******************************************************************************/
     
    //Fonction de placementjoueur appelée par les procédure un_joueur et deux_joueurs.
    matriciel placementjoueur(matriciel matrice, joueur j)
    {
    	//Déclaration des variables
    	//pour savoir ou le joueur veut se positionner.
    	int ligneplace;
    	int colonneplace;
    	//pour savoir si le placement du joueur est bon.
    	boolean placement = false;
     
    	while (placement == false)
    	{
    	   //Demande de la position de départ du joueur.
    	   //Demande pour la ligne
    	   printf("\n%s saisissez la ligne ou vous voulez vous placer : ",j.nom);
    	   scanf("%d",&ligneplace);
     
    	   //Les valeurs doivent êre comprisent entre 0 et la taille de la matrice.
    	   while ((ligneplace <= 0) || (ligneplace > matrice.ligne))
    	   {
    		   //Afichage d'un message d'erreur si les valeurs saisies ne sont pas bonnes.
    		   printf("%s, vous devez saisir des valeur comprisent entre 1 et %d\n\n", j.nom, matrice.ligne);
    		   printf("%s saisissez la ligne ou vous voulez vous placer : ",j.nom);
    		   scanf("%d",&ligneplace);
    	   }
     
    	   //Demande pour la ligne
    	   printf("%s saisissez la colonne ou vous voulez vous placer : ",j.nom);
    	   scanf("%d",&colonneplace);
     
     
    	   //Les valeurs doivent êre comprisent entre 0 et la taille de la matrice.
    	   while ((colonneplace <= 0) || (colonneplace > matrice.colonne))
    	   {
    		   //Afichage d'un message d'erreur si les valeurs saisies ne sont pas bonnes.
    		   printf("%s, vous devez saisir des valeur comprisent entre 1 et %d\n\n", j.nom, matrice.colonne);
    		   printf("%s saisissez la colonne ou vous voulez vous placer : ",j.nom);
    		   scanf("%d",&colonneplace);
    	   }
     
    	   //Vérification du placement du joueur, si sa position est fausse, on lui demande de ressaisir.
    	   if (matrice.matrix[(ligneplace*matrice.ligne)+colonneplace] == false)
    	   {
    		   printf("%s la position que vous avez choisie n'est pas accessible, veuillez ressaisir des valeurs correctes.\n\n", j.nom);
    	   }
    	   else
    	   {
    		   placement = true;
    	   }
     
    	}
     
    	//Enregistrement de la position du joueur.
    	matrice.posy1=colonneplace--;
    	matrice.posx1=ligneplace--;
     
    	//Mise a faux de la place prise par le joueur et on diminue les nombre de cases du plateau de jeu..
    	matrice.matrix[(ligneplace*matrice.ligne)+colonneplace] = false;
        matrice.cases--;
     
    	return matrice;
    }
    //Fin fonction placementjoueur
     
    /******************************************************************************/
     
    //Procédure d'affichage de la matrice appelée par les procédures un_joueur et deux_joueurs..
    void afficher(matriciel matrice)
    {
           int i ;
     
    	   //Effacement de l'écran.
           system ("cls");
     
    	   //Dessin de la matrice.
    	   for (i = 0 ; (i < matrice.ligne*matrice.colonne); i++)
           {
    		   //en fonction de la valeur de la case on affiche un caractère différent.
    		   if (matrice.matrix[i] == true)
    		   {
    			   printf("%c ", 0xDB);
    		   }
               if (matrice.matrix[i] == false)
    		   {
    			   printf("%c ", 0xB0);
    		   }
     
    		   //Quand le nombre de colonne est atteint, on revient à la ligne.
               if (((i+1) % matrice.ligne*matrice.colonne) == 0 ) printf("\n");
           }
    }
     
    /******************************************************************************/
     
    //Fonction CreateDynMatrice2d appelée par la fonction tailleplateau.
    matriciel CreateDynMatrice2d(matriciel matrice, int ligne,int colonne)
    {
           int i ;
     
    	   //Sauvegarde des dimensions de la matrice dans la structure.
           matrice.ligne = ligne ;
           matrice.colonne = colonne ;
     
    	   //Réservation de la mémoire pour la matrice.
           matrice.matrix = (boolean*)malloc(ligne*colonne*sizeof(boolean));
     
    	   //Mise de toutes les cases de la matrice à vrai.
           for (i = 0 ; i < (ligne*colonne); i++)
           {
    		   matrice.matrix[i] = true;
           }
     
    	   //Enregistrement du nombre de cases du plateau de jeu
           matrice.cases = (ligne*colonne);
     
    	   //On renvoie la matrice créée.
           return matrice ;
    }
    //Fin fonction CreateDynMatrice2d
     
    /******************************************************************************/
     
    //Début fonction tailleplateau appelée par les procédures un_joueur et deux_joueurs.
    matriciel tailleplateau(matriciel matrice)
    {
    	//Variables pour savoir le nombre de lignes et de colonne du plateau de jeu.
    	int nblig;
    	int nbcol;
     
    	//Demande des dimensions du plateau de jeu.
    	printf("Saisissez la taille du plateau de jeu \n\n");
     
    	//Le nombre de ligne.
    	printf("Nombre de ligne : ");
    	scanf("%d",&nblig);
    	//tant que le nombre de ligne n'est pas valide.
    	while (nblig<3)
    	{
    		//On affiche que la taille minimale du plateau de jeu est de dimension 3 par 3.
    		printf("Les dimensions minimales sont de 3 par 3.\n\n");
    		printf("Nombre de ligne : ");
    		scanf("%d",&nblig);
    	}
     
    	//Le nombre de colonne.
    	printf("Nombre de colonne : ");
    	scanf("%d",&nbcol);
    	//tant que le nombre de colonne n'est pas valide.
    	while (nbcol<3)
    	{
    		//On affiche que la taille minimale du plateau de jeu est de dimension 3 par 3.
    		printf("Les dimensions minimales sont de 3 par 3.\n");
    		printf("Nombre de colonne : ");
    		scanf("%d",&nbcol);
    	}
     
     
    	//Appel la fonction CreateDynMarice2d.
    	matrice=CreateDynMatrice2d(matrice, nblig, nbcol);
     
    	//Renvoi de la matrice.
    	return matrice;
     
    }
    //Fin de la fonction tailleplateau
     
    /******************************************************************************/
     
    //Fonction infojoueur appelée par les procédures un_joueur et deux_joueur.
    joueur infojoueur(joueur j)
    {
    	//Demande et enregistrament du nom du joueur.
    	printf("saisissez votre nom : ");
    	scanf("%s",j.nom);
    	printf("\nBon jeu %s\n", j.nom);
    	system("pause");
    	system("cls");
     
    	return j;
    }
     
    /******************************************************************************/
     
    //Procédure deux_joueurs appelée par la procédure selection.
    void deux_joueurs()
    {
    	//Déclaration des variables.
    	//initialisation des joueurs.
    	joueur j1;
        joueur j2;
    	//initialisation du plateau de jeu.
    	matriciel matrice ;
     
    	//Affichage du mode un joueur.
    	system("cls");
    	printf("Mode deux joueur\n\n");
     
    	//Appel de la fonction infojoueur.
    	printf("Joueur 1, ");
    	j1=infojoueur(j1);
    	printf("Joueur 2, ");
    	j2=infojoueur(j2);
     
    	//Appel de la fonction tailleplateau.
    	matrice = tailleplateau(matrice);
     
    	//Appel de la procédure afficher.
    	afficher(matrice);
     
    	//Appel de la fonction placementjoueur.
    	matrice = placementjoueur(matrice, j1);
    	afficher(matrice);
    	matrice = placementjoueur(matrice, j2);
    	afficher(matrice);
     
    }
    //Fin de la procédure deux_joueurs.
     
    /******************************************************************************/
     
    //Procédure un_joueur appelée par la procédure selection.
    void un_joueur()
    {
    	//Déclaration des variables.
    	//initialisation d'un joueur.
    	joueur j1;
    	//initialisation du plateau de jeu.
    	matriciel matrice;
     
    	//Affichage du mode un joueur.
    	system("cls");
    	printf("Mode un joueur\n\n");
     
    	//Appel de la fonction infojoueur.
    	j1 = infojoueur(j1);
     
        //Appel de la fonction tailleplateau.
    	matrice = tailleplateau(matrice);
     
    	//Appel de la procédure afficher.
    	afficher(matrice);
     
    	//Appel de la fonction placementjoueur.
    	matrice = placementjoueur(matrice, j1);
     
    	//Appel de la procédure afficher.
    	afficher(matrice);
    }
    //Fin de la procédure un_joueur.
     
    /******************************************************************************/
     
    //Procédure selection appelée par la procédure menu.
    void selection (int choix)
    {
         //selon le choix.
    	switch (choix)
        {
               //Appel de la fontion un_joueur.
    		   case 1: un_joueur();
                    break;
     
     
               //Appel de la fontion deux_joueurs.
               case 2: deux_joueurs();
                    break;
     
               //Fin du programme.    
               case 9: printf("Au revoir\n");
                    break;
    	}
    }
    //Fin de la procédure selection.
     
    /******************************************************************************/
     
    //Procédure menu appelée par le programme prinipal.
    void menu ()
    {
         int choix;
     
         //Effacement de l'écran.
         system("cls");
     
         //Tant que le choix du joueur n'est pas de quitter (9).
    	 do
         {
                //Affichage des choix du menu.
                printf("Bienvenue dans Isola\n\n");
    		    printf("1)  1 joueur ? \n\n");
          		printf("2)  2 joueurs ? \n\n");
    	    	printf("9)  Quitter ? \n\n");
    		    printf("Faites votre choix : ");
          		scanf("%d",&choix);
     
    	    	//si le carctère saisis n'est pas dans les choix possible.
    		    if (choix != 1 && choix != 2 && choix != 9)
                {
                          printf("Choix invalide ! \n\n");
                }
                else
                {
                    //Appel de la procédure selection.
                    selection(choix);
                }
          }while (choix != 9);
    }
    //Fin de la procédure menu.
     
    /******************************************************************************/
     
    //Programme principal.
    int main(int argc, char *argv[])
    {
        //Appel de la procédure menu.
        menu();
     
        return 0;
    }
    //Fin du programme principal.
    Pour l'initialisation de la matrice il faut mettre true car il faut que les cases soient accessibles, j'ai mis false juste pour tester.

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Talfox
    Je vous poste tout le code que j'ai fait :
    Ceci est extrèmement douteux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       //Enregistrement de la position du joueur.
       matrice.posy1 = colonneplace--;
       matrice.posx1 = ligneplace--;
    Si on veux écrire du code clair, il ne faut pas mélanger assignation et opération unaires.

    Je comprends
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       matrice.posy1 = colonneplace;
       colonneplace--;
     
       matrice.posx1 = ligneplace;
       ligneplace--;
    mais je ne suis pas sûr que ce soit ce que tu veux. Je parirais plutôt pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       matrice.posy1 = colonneplace - 1;
       matrice.posx1 = ligneplace -1;
    Il se peut donc que le marquage de la case soit faux (mauvaise case), ce qui entraine l'erreur signalée (et un risque de débordement de tableau).

    Tu devrais numéroter les lignes et les colonnes quand tu affiches ton jeu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     1 2 3 4 5
    1
    2
    3
    4
    5
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci pour tous les renseignements, j'ai mis l'affichage des numéros de lignes et de colonnes, mais la il est trop tard pour que je fasse autre chose, je m'y remet demain avec votre aide si possible

    Merci encore pour l'aide

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 101
    Points
    101
    Par défaut Re: Jeu Isola en C
    Citation Envoyé par Emmanuel Delahaye
    mais il y a une fuite mémoire (manque un free()...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SYSALLOC Bloc 003D24E8 (48 bytes) malloc'ed at line 48 of 'main.c' not freed
    Tu utilises quel outil pour vérifier le bon usage de la mémoire? Parce que là ça m'intéresserais bien

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Jeu Isola en C
    Citation Envoyé par @drien
    Citation Envoyé par Emmanuel Delahaye
    mais il y a une fuite mémoire (manque un free()...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SYSALLOC Bloc 003D24E8 (48 bytes) malloc'ed at line 48 of 'main.c' not freed
    Tu utilises quel outil pour vérifier le bon usage de la mémoire? Parce que là ça m'intéresserais bien
    Un outil perso :

    http://emmanuel-delahaye.developpez.com/clib.htm
    Module SYSALLOC
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Bonjour à toutes et tous

    J'ai encore une question !!
    Comment puis-je faire pour inclure de la couleur dans mon programme, d'après mon prof avec les fichiers qu'il nous a fourni "conio.h" et "conio.c", c'est suffisant mais je ne comprend pas comment les inclure

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 101
    Points
    101
    Par défaut
    De deux choses l'unes : le fichier conio.h doit être inclut dans les fichiers .c de ton programme où tu vas utiliser les fonctions du module conio; et ensuite tu dois compiler aussi conio.c et "lier" le fichier objet conio.o obtenu avec les autres dichiers objets de ton projet.

    Si tu utilise un IDE, ajoute simplement conio.c à ton projet et inclut conio.h dans tes fichiers .c et ça devrait compiler bien tout seul

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 101
    Points
    101
    Par défaut Re: Jeu Isola en C
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par @drien
    Citation Envoyé par Emmanuel Delahaye
    mais il y a une fuite mémoire (manque un free()...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SYSALLOC Bloc 003D24E8 (48 bytes) malloc'ed at line 48 of 'main.c' not freed
    Tu utilises quel outil pour vérifier le bon usage de la mémoire? Parce que là ça m'intéresserais bien
    Un outil perso :

    http://emmanuel-delahaye.developpez.com/clib.htm
    Module SYSALLOC
    Cool! J'ai essayé, merci!

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Rebonjour à toutes et tous !!
    J'ai un problème au niveau de la reconnaissance de la position du joueur sur mon programme.

    Je vous met tout le code :
    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
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    //On définit une structure booléen.
    typedef enum bool {true,false} boolean ;
     
    //On définit une structure plateau
    struct plateau
    {
           int ligne;
           int colonne;
           int cases;
           int posx1;
           int posx2;
           int posy1;
           int posy2;
           boolean* matrix ;
    };
    //On nomme struct plateau en matriciel.
    typedef struct plateau matriciel ;
     
    //On définit une structure Joueur.
    struct Joueur
    {
           char nom [26];
           int poscol;
           int poslig;
    	   int idjoueur;
    };
    //On nomme struct Joueur en joueur.
    typedef struct Joueur joueur;
     
    /******************************************************************************/
     
    //Fonction choixdeplacement appelé par la fonction deplacementjoueur
    matriciel choixdeplacement (matriciel matrice, joueur j, char choix)
    {
    	if ((choix == 'D') || (choix == 'G'))
     
    /*
     
    		positionX du joueur = + 1
    		case ou il était = true
    		case ou il va = false
     
    	*/
    	return matrice;
     
    }
    //Fin fonction choixdeplacement
     
    /******************************************************************************/
     
    //Fonction de deplacementjoueur appelée par les procédure un_joueur et deux_joueurs.
    matriciel deplacementjoueur(matriciel matrice, joueur j)
    {
    	//Déclaration des variables
     
    	char choix = "";					//pour savoir ou le joueur veut se déplacer.
    	char posj[2];						//pour connaitre la position du joueur avant son déplacement.
    	boolean deplacement = false;		//pour savoir si le placement du joueur est bon.
     
     
    	//Tant que le déplacement n'est pas bon.
    	while (deplacement == false)
    	{
                    printf("%d", j.poscol);
    		//Vérification de la position du joueur.
    		//Si le joueur est à gauche du plateau de jeu.
    		if (j.poscol == 0)
    		{
    			//Si le joueur est a gauche et en haut du plateau de jeu.
    			if (j.poslig == 0)
    			{
    				do
    				{
    					//Affichage des déplacements possible.
    					printf("\n%s saisissez la direction dans laquelle vous voulez vous deplacer\n",j.nom);
    					printf("D. Droite.\n");
    					printf("B. Bas.\n");
    					printf("Saisissez votre choix : ");
    					scanf("%d",&choix);
     
    					//si le choix n'est pas bon
    					if ((choix != 'D') && (choix != 'B'))
    					{
    						printf("%s votre choix est invalide.\n", j.nom);
    					}
    					else
    					{
    						//Appel de la fonction choixdeplacement (A FAIRE). 
    						matrice = choixdeplacement(matrice, j, choix);
    					}
    				}while ((choix == 'B') || (choix == 'D'));
    			}
    		}
    		deplacement = true;
    	}
    	return matrice;
    }
    //Fin fonction deplacementjoueur
     
    /******************************************************************************/
     
    //Fonction de placementjoueur appelée par les procédure un_joueur et deux_joueurs.
    matriciel placementjoueur(matriciel matrice, joueur j)
    {
    	//Déclaration des variables
    	//pour savoir ou le joueur veut se positionner.
    	int ligneplace;
    	int colonneplace;
    	//pour savoir si le placement du joueur est bon.
    	boolean placement = false;
     
    	while (placement == false)
    	{
    	   //Demande de la position de départ du joueur.
    	   //Demande pour la ligne
    	   printf("\n%s saisissez la ligne ou vous voulez vous placer : ",j.nom);
    	   scanf("%d",&ligneplace);
     
    	   //Les valeurs doivent êre comprisent entre 0 et la taille de la matrice.
    	   while ((ligneplace <= 0) || (ligneplace > matrice.ligne))
    	   {
    		   //Afichage d'un message d'erreur si les valeurs saisies ne sont pas bonnes.
    		   printf("%s, vous devez saisir des valeur comprisent entre 1 et %d\n\n", j.nom, matrice.ligne);
    		   printf("%s saisissez la ligne ou vous voulez vous placer : ",j.nom);
    		   scanf("%d",&ligneplace);
    	   }
     
    	   //Demande pour la ligne
    	   printf("%s saisissez la colonne ou vous voulez vous placer : ",j.nom);
    	   scanf("%d",&colonneplace);
     
     
    	   //Les valeurs doivent êre comprisent entre 0 et la taille de la matrice.
    	   while ((colonneplace <= 0) || (colonneplace > matrice.colonne))
    	   {
    		   //Afichage d'un message d'erreur si les valeurs saisies ne sont pas bonnes.
    		   printf("%s, vous devez saisir des valeur comprisent entre 1 et %d\n\n", j.nom, matrice.colonne);
    		   printf("%s saisissez la colonne ou vous voulez vous placer : ",j.nom);
    		   scanf("%d",&colonneplace);
    	   }
     
    	   	//On décrémente les valeur de 1 pour se mettre au méme niveau que les valeur du plateau de jeu (commence à 0, pas à 1).
    	   	colonneplace = colonneplace - 1;
    		ligneplace = ligneplace - 1;
     
    	   //Vérification du placement du joueur, si sa position est fausse, on lui demande de ressaisir.
    	   if (matrice.matrix[(ligneplace*matrice.ligne)+colonneplace] == false)
    	   {
    		   printf("%s la position que vous avez choisie n'est pas accessible, veuillez ressaisir des valeurs correctes.\n\n", j.nom);
    	   }
    	   else
    	   {
    		   placement = true;
    	   }
     
    	}
     
    	//Enregistrement de la position du joueur.
    	matrice.posy1 = colonneplace;
    	matrice.posx1 = ligneplace;
     
    	j.poslig = ligneplace;
    	j.poscol = colonneplace;
     
    	//Mise a faux de la place prise par le joueur et on diminue les nombre de cases du plateau de jeu..
    	matrice.matrix[(ligneplace*matrice.ligne)+colonneplace] = false;
        matrice.cases--;
     
    	//Appel de la procédure afficher.
    	afficher(matrice, j);
     
    	return matrice;
    }
    //Fin fonction placementjoueur
     
    /******************************************************************************/
     
    //Fonction CreateDynMatrice2d appelée par la fonction tailleplateau.
    matriciel CreateDynMatrice2d(matriciel matrice, int ligne,int colonne)
    {
           int i ;
     
    	   //Sauvegarde des dimensions de la matrice dans la structure.
           matrice.ligne = ligne ;
           matrice.colonne = colonne ;
     
    	   //Réservation de la mémoire pour la matrice.
           matrice.matrix = (boolean*)malloc(ligne*colonne*sizeof(boolean));
     
    	   //Mise de toutes les cases de la matrice à vrai.
           for (i = 0 ; i < (ligne*colonne); i++)
           {
    		   matrice.matrix[i] = true;
           }
     
    	   //Enregistrement du nombre de cases du plateau de jeu
           matrice.cases = (ligne*colonne);
     
    	   //On renvoie la matrice créée.
           return matrice ;
    }
    //Fin fonction CreateDynMatrice2d
     
    /******************************************************************************/
     
    //Début fonction tailleplateau appelée par les procédures un_joueur et deux_joueurs.
    matriciel tailleplateau(matriciel matrice)
    {
    	//Variables pour savoir le nombre de lignes et de colonne du plateau de jeu.
    	int nblig;
    	int nbcol;
    	joueur j;
     
    	//Demande des dimensions du plateau de jeu.
    	printf("Saisissez la taille du plateau de jeu \n\n");
     
    	//Le nombre de ligne.
    	printf("Nombre de ligne : ");
    	scanf("%d",&nblig);
    	//tant que le nombre de ligne n'est pas valide.
    	while (nblig<3)
    	{
    		//On affiche que la taille minimale du plateau de jeu est de dimension 3 par 3.
    		printf("Les dimensions minimales sont de 3 par 3.\n\n");
    		printf("Nombre de ligne : ");
    		scanf("%d",&nblig);
    	}
     
    	//Le nombre de colonne.
    	printf("Nombre de colonne : ");
    	scanf("%d",&nbcol);
    	//tant que le nombre de colonne n'est pas valide.
    	while (nbcol<3)
    	{
    		//On affiche que la taille minimale du plateau de jeu est de dimension 3 par 3.
    		printf("Les dimensions minimales sont de 3 par 3.\n");
    		printf("Nombre de colonne : ");
    		scanf("%d",&nbcol);
    	}
     
     
    	//Appel la fonction CreateDynMarice2d.
    	matrice=CreateDynMatrice2d(matrice, nblig, nbcol);
     
    	//Appel de la procédure afficher.
    	afficher(matrice, j);
     
    	//Renvoi de la matrice.
    	return matrice;
     
    }
    //Fin de la fonction tailleplateau
     
    /******************************************************************************/
     
    //Fonction infojoueur appelée par les procédures un_joueur et deux_joueur.
    joueur infojoueur(joueur j)
    {
    	//Demande et enregistrament du nom du joueur.
    	printf("saisissez votre nom : ");
    	scanf("%s",j.nom);
    	printf("\nBon jeu %s\n", j.nom);
    	system("pause");
    	system("cls");
     
    	return j;
    }
    //Fin de la fonction infojoueur.
     
    /******************************************************************************/
     
    //Procédure deux_joueurs appelée par la procédure selection.
    void deux_joueurs()
    {
    	//Déclaration des variables.
    	//initialisation des joueurs.
    	joueur j1;
        joueur j2;
    	//initialisation du plateau de jeu.
    	matriciel matrice ;
     
    	//Affichage du mode un joueur.
    	system("cls");
    	printf("Mode deux joueur\n\n");
     
    	//Appel de la fonction infojoueur.
    	printf("Joueur 1, ");
    	j1=infojoueur(j1);
    	j1.idjoueur = 1;
     
    	printf("Joueur 2, ");
    	j2=infojoueur(j2);
    	j2.idjoueur = 2;
     
    	//Appel de la fonction tailleplateau.
    	matrice = tailleplateau(matrice);
     
    	//Appel de la fonction placementjoueur.
    	matrice = placementjoueur(matrice, j1);
    	matrice = placementjoueur(matrice, j2);
     
    	//Appel de la fonction deplacementjoueur.
    	matrice = deplacementjoueur(matrice, j1);
    	matrice = deplacementjoueur(matrice, j2);
     
     
    }
    //Fin de la procédure deux_joueurs.
     
    /******************************************************************************/
     
    //Procédure un_joueur appelée par la procédure selection.
    void un_joueur()
    {
    	//Déclaration des variables.
    	joueur j1;							//initialisation d'un joueur.
    	matriciel matrice;					//initialisation du plateau de jeu.
     
    	//Affichage du mode un joueur.
    	system("cls");
    	printf("Mode un joueur\n\n");
     
    	//Appel de la fonction infojoueur.
    	j1 = infojoueur(j1);
    	j1.idjoueur = 1;
     
        //Appel de la fonction tailleplateau.
    	matrice = tailleplateau(matrice);
     
    	//Appel de la fonction placementjoueur.
    	matrice = placementjoueur(matrice, j1);
     
    	//Appel de la fonction deplacementjoueur.
    	matrice = deplacementjoueur(matrice, j1);
     
    }
    //Fin de la procédure un_joueur.
     
    /******************************************************************************/
     
    //Procédure selection appelée par la procédure menu.
    void selection (int choix)
    {
         //selon le choix.
    	switch (choix)
        {
               //Appel de la fontion un_joueur.
    		   case 1: un_joueur();
                    break;
     
     
               //Appel de la fontion deux_joueurs.
               case 2: deux_joueurs();
                    break;
     
               //Fin du programme.    
               case 9: printf("Au revoir\n");
                    break;
    	}
    }
    //Fin de la procédure selection.
     
    /******************************************************************************/
     
    //Procédure menu appelée par le programme prinipal.
    void menu ()
    {
         int choix;
     
         //Effacement de l'écran.
         system("cls");
     
         //Tant que le choix du joueur n'est pas de quitter (9).
    	 do
         {
                //Affichage des choix du menu.
                printf("Bienvenue dans Isola\n\n");
    		    printf("1)  1 joueur ? \n\n");
          		printf("2)  2 joueurs ? \n\n");
    	    	printf("9)  Quitter ? \n\n");
    		    printf("Faites votre choix : ");
          		scanf("%d",&choix);
     
    	    	//si le carctère saisis n'est pas dans les choix possible.
    		    if (choix != 1 && choix != 2 && choix != 9)
                {
                          printf("Choix invalide ! \n\n");
                }
                else
                {
                    //Appel de la procédure selection.
                    selection(choix);
                }
          }while (choix != 9);
    }
    //Fin de la procédure menu.
     
    /******************************************************************************/
     
    //Programme principal.
    int main(int argc, char *argv[])
    {
        //Appel de la procédure menu.
        menu();
     
        return 0;
    }
    //Fin du programme principal.
    Dans la fonction deplacementjoueur la condition n'est pas faites alors que je me place en 1 - 1 donc en 0 - 0 pour le programme.
    Au lieu de m'afficher j.poscol qui devrait être égal à 0, le programme m'affiche un nombre dans le genre -958993460

  14. #14
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Outre le fait que tu utilsies la fonction afficher() qui n'est pas present dans l'extrait fournit, j'obtient plusieurs problemes en compilant ton programme :

    main.c: In function `deplacementjoueur':
    main.c:61: warning: initialization makes integer from pointer without a cast
    main.c:84: warning: int format, different type arg (arg 2)
    main.c:62: warning: unused variable `posj'
    main.c: In function `placementjoueur':
    main.c:175: warning: implicit declaration of function `afficher'
    main.c: At top level:
    main.c:406: warning: unused parameter 'argc'
    main.c:406: warning: unused parameter 'argv'
    main.c:38: warning: unused parameter 'j'
    main.c: In function `choixdeplacement':
    main.c:51: warning: control reaches end of non-void function
    Sinon concernant votre probleme, je vous rappelle qu'en C, le passage des parametres se fait par valeur. C'est a dire que lorsqu'un parametre est modifie dans une fonction, cette modification n'est pas repercutee dans la fonction appelante. Pour pouvoir modifier une valeur dans une sous fonction il faut soit passer en parametre l'adresse de la variable que l'on souhaite modifier soit faire retourner la nouvelle valeur par la fonction.

    En outre, generalement on evite de passer en parametre ou de retourner des structures. On utilise plutot des pointeurs sur ces structures.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Désolé pour la procédure afficher, la voici :
    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
     
    //Procédure d'affichage de la matrice appelée par les procédures un_joueur et deux_joueurs..
    void afficher(matriciel matrice, joueur j)
    {
    	int i;
    	//variables pour afficher les numéros de colonnes et de lignes du plateau de jeu.
    	int a, b = 1;
     
    	   //Effacement de l'écran.
           system ("cls");
     
    	   printf(" ");
     
    	   //Affichage du numéro des colonnes du plateau de jeu.
    	   for (a = 1; a <= matrice.colonne; a++)
    	   {	   
    		   printf(" %d", a);
    	   }
    	   printf("\n%d ", b);
     
    	   //Dessin de la matrice.
    	   for (i = 0 ; (i < matrice.ligne*matrice.colonne); i++)
           {
    		   //en fonction de la valeur de la case on affiche un caractère différent.
    		   if (matrice.matrix[i] == true)
    		   {
    			   printf("%c ", 0xDB);
    		   }
               if (matrice.matrix[i] == false)
    		   {
    			   if (j.idjoueur == 1)
    			   {
    				   printf("A ");
    			   }
    			   else
    			   {
    				   if (j.idjoueur == 2)
    				   {
    					   printf("B ");
    				   }
    				   else
    				   {
    					   printf("%c ", 0xB0);
    				   }
    			   }
    		   }
     
    		   //Quand le nombre de colonne est atteint, on revient à la ligne.
               if (((i+1) % matrice.ligne*matrice.colonne) == 0 )
    		   {
    			   //Affichage du numéro des ligne du plateau de jeu.
    			   b = b + 1;
    			   if (b > matrice.ligne)
    			   {
    				   printf("\n");
    			   }
    			   else
    			   {
    				   printf("\n%d ", b);
    			   }
    		   }
           }
    }
    pour le rappel c'est un apprentissage que vous me faites , les cours de C que j'ai eu sont plus que partiels !!!

    Pourriez-vous me donner un exemple pour les pointeurs s'il vous plait ?

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Talfox
    Pourriez-vous me donner un exemple pour les pointeurs s'il vous plait ?
    Ton livre de C est passé à la machine ?
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 101
    Points
    101
    Par défaut
    Hum... Tu serais pas à l'EFREI, en L'3 ?
    C'est pas très gentil de critiquer les cours comme ça et de faire son projet sur des forums

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par @drien
    Hum... Tu serais pas à l'EFREI, en L'3 ?
    C'est pas très gentil de critiquer les cours comme ça et de faire son projet sur des forums
    Oui je suis en L'3 a l'EFREI
    Quand à la critique des cours que j'ai eu, je ne dit que le ressentiment de la plus part des personnes de cette même promo.
    Et pour finir je ne fais pas mon proget sur un forum, je demande de l'aide, s'il n'y a pas de difference pour vous, pour moi il y en a une grande car j'essaie de m'en sortir avant de poser la question....

  19. #19
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Talfox
    Pourriez-vous me donner un exemple pour les pointeurs s'il vous plait ?
    Quelque chose comme ca :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct
    {
       int element;  
    } StructDeTest;
     
    void modif(StructDeTest* test)
    {
       test->element =0;  
    }
     
    int main(void)
    {
       StructDeTest test;
     
       test.element = 5;
     
       printf("avant modif : %d\n", test.element);
       modif(&test);
       printf("apres modif : %d\n", test.element);
     
       return 0;
    }

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci pour l'exemple

    Mon programme à encore quelques problèmes mais pas des plus important.

    Merci à tous pour votre aide.

Discussions similaires

  1. Quel style de DirectX pour un jeu 2D ?
    Par delire8 dans le forum DirectX
    Réponses: 34
    Dernier message: 31/07/2003, 00h47
  2. Réponses: 7
    Dernier message: 18/06/2003, 15h20
  3. [socket][tcp] jeu en reseau
    Par souris_sonic dans le forum Développement
    Réponses: 2
    Dernier message: 30/05/2003, 07h31
  4. [C réseau débutant] jeu
    Par Heimdall dans le forum Développement
    Réponses: 6
    Dernier message: 22/05/2003, 13h58
  5. Une déclaration pour la survie du jeu vidéo en France
    Par Freakazoid dans le forum DirectX
    Réponses: 1
    Dernier message: 30/10/2002, 14h31

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