Bon salut les gars,
Je développe actuellement un client xHextris version multijoueur. Pour résumer,
mon programme recoit en paramètre :
- a : pour spécifier que le jeu se lance en mode automatique
- b : pour spécifier la couleur de fond
- sinon une liste d'adresse IP qui correspondront aux @ des joueurs connectés.
J'utilise une liste chainée pour enregistrer la liste des joueurs. Mais j'ai des comportements bizarres avec ma liste. Qd je lui passe mes @IP (par ex 3), il y'a une @ "fictive" ou zombie, qui est rajouté dans la liste et je ne sais pas d'où il sort.
Un exemple d'exécution :
Comme vous le voyez ici, je lui passe 3 @IP en paramètre, et qd je lui demande d'afficher ma liste il m'en sort 4.lindows@lindows-desktop:~/xhextris$ ./xhextris -a -b yellow 140.33.45.2 134.12.25.25 136.12.123.0
xhextris number 67108865
Initialisation des resources couleurs.....OK
Background = yellow
NULL NULL
Insertion de 140.33.45.2 à 4
Insertion de 134.12.25.25 à 5
Insertion de 136.12.123.0 à 6
Liste des joueurs connectés
@IP : 136.12.123.0
@IP : 134.12.25.25
@IP : 140.33.45.2
@IP : 49.48.48.100
Erreur de segmentation. J'ai regardé du coté des fonctions d'insertion de ma liste chainée, tout semble correct. Je vous laisse mon code et je vous remercie pour votre aide.
Ma Structure pour stocker mes joueurs :
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
20
21 /* Definition de la liste des joueurs. */ typedef struct _un_joueur { int score; struct sockaddr_in adresse_ip; } Un_joueur; typedef struct _liste_joueur * P_liste_joueur; typedef struct _liste_joueur { Un_joueur joueur; P_liste_joueur next; } Liste_Joueur; P_liste_joueur init_liste(char *liste[], int debut,int nb_joueur); P_liste_joueur int_joueur (char *adresse_ip); void display_liste_joueurs (P_liste_joueur l);
Mes fonctions de gestion de la liste :
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
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 #include "xhextris.h" P_liste_joueur init_joueur (char* adresse_ip){ P_liste_joueur el = (P_liste_joueur) malloc(sizeof(Liste_Joueur)); Un_joueur j = { 0, {AF_INET, htons(PORT), {inet_addr(adresse_ip)}} }; if(!el) return NULL; el -> joueur = j; el -> next = NULL; return el; } P_liste_joueur init_liste(char *liste[], int debut,int nb_joueur){ P_liste_joueur el, l; int i; char *addr; l = (P_liste_joueur) malloc(sizeof(Liste_Joueur)* (nb_joueur - debut)); for(i = debut ; i < nb_joueur; i++){ addr = liste[i]; fprintf(stdout,"Insertion de %s à %d\n", addr,i); el = init_joueur (addr); l = inserer_joueur (l, el); } return l; } P_liste_joueur inserer_joueur(P_liste_joueur maliste, P_liste_joueur joueur){ joueur -> next = maliste; return joueur; } void display_liste_joueurs(P_liste_joueur l){ P_liste_joueur deb = l; Un_joueur j; fprintf(stdout, "Liste des joueurs connectés\n"); while(deb -> next != NULL){ j = deb -> joueur; fprintf(stdout,"@IP : %s\n", inet_ntoa(j.adresse_ip.sin_addr)); deb = deb -> next; } }
Merci pour votre aide !!
Partager