Bonjour j'ai des structures imbriqués et je m'embrouille un peu .
voici mes structures:
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
 
typedef struct agent{
char couleur; /* ROUGE ou BLEU */
char genre; /* BARON, MANANT, GUERRIER, CHATEAU */
int posx, posy; /* position actuelle */
int destx, desty; /* destination (negatif si immobile) */
char produit, /* production actuelle d’un chateau */
int temps; /* tours restant pour cette production */
struct agent *asuiv, *aprec; /* liste des agents liees a un chateau */
struct agent *vsuiv, *vprec; /* liste des voisins */
}Agent,*AListe;
 
typedef struct{
Agent *chateau; / * s’il y a un chateau sur la case */
AListe habitant; /* les autres occupants */
}Case;
 
typedef struct{
Case plateau[X][Y];
AListe rouge, bleu;
int tour; /* Numero du tour */
int tresorRouge, tresorBleu;
}Monde;
je voudrais pouvoir ajouter des agents dans les listes rouges et bleu et faire en sorte que les cases du plateau pointe sur ses agents.
voici mon 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
 
AListe productionChateau(char couleur, int X, int Y){
  AListe ch;
  ch = (Agent*)malloc(sizeof(Agent));
  if(ch!=NULL){
  ch->couleur=couleur;
  ch->genre='c';
  ch->posx=X;
  ch->posy=Y;
  ch->asuiv=NULL;
  ch->aprec=NULL;
  ch->vsuiv=NULL;
  ch->vprec=NULL;
  return ch;
  }}
 
AListe ajouteChateau(char couleur, AListe *liste ,int x,int y,Case plateau[x][y]){
  AListe ch;
  if((ch=productionChateau(couleur,x,y))!=NULL){
    if((*liste)==NULL){ 
    (*liste)=ch;
    plateau[x][y].chateau=ch;
    return (*liste); 
    }
  }
}
 
AListe productionAgent(char couleur,char genre, int px, int py ){
	AListe ag;
 
  ag = (Agent*)malloc(sizeof(Agent));
  if(ag!=NULL){
 
  ag->couleur=couleur;
  ag->genre=genre;
  ag->posx=px;
  ag->posy=py;
  ag->destx=px;
  ag->desty=py;
  ag->aprec=NULL;
  ag->asuiv=NULL;
 
  return ag;
  }}
 
AListe ajouteAgent(char couleur, char genre,AListe *liste,int x,int y, Case plateau[x][y]){
  AListe ag;
 
  if((ag=productionBaron(couleur,x,y))!=NULL){
 
  	AListe tmp=(*liste);
    if((*liste)!=NULL){ 
       while(tmp->asuiv!=NULL){    
         tmp=tmp->asuiv;
       }
 
       tmp->asuiv=ag;
       ag->aprec=tmp;
       plateau[x][y].habitant=ag;
      return tmp;
  }
  }
 }
 
void afficheCase(int x,int y,Case plateau[x][y]){
  if(plateau[x][y].chateau!=NULL){
      printf("(%c)",plateau[x][y].chateau->genre);
   }
   if(plateau[x][y].habitant!=NULL){
      printf("(%c)",plateau[x][y].habitant->genre);
   }
}
 
int main(){
Monde jeux;
Case plateau[12][18];
int i,j;
for(i=0;i<12;i++){
  for(j=0;j<18;j++){
       jeux.plateau[i][j].chateau=NULL;
       jeux.plateau[i][j].habitant=NULL;
   }
}
 
ajouteChateau('R',&jeux.rouge,0,0,jeux.plateau);
ajouteAgent('R','b',&jeux.rouge,0,1,jeux.plateau);
afficheCase(0,0,jeux.plateau);
afficheCase(0,1,jeux.plateau);
 
return 0;
}
Lorsque je veut afficher la case 0 1 j'ai une erreur de segmentation.
pourriez vous me dire ce qui ne va pas merci.