cs_lillie69
Messages postés18Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention 6 mai 2006
-
5 mai 2006 à 13:44
cs_lillie69
Messages postés18Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention 6 mai 2006
-
6 mai 2006 à 16:46
Bonjour,
nous sommes en train de coder un jeu en réseau(pour 2 joueurs) et notre
problème est qu'on voudrait qu'une fois que le 1er joueur ait joué il
attende que le 2e joue pour recommencer à jouer.
On a déclaré une variable qu'on incrémente dès qu'un joueur joue.
Mais le 1er joueur qui joue reste bloqué même lorsque le 2e joueur a joué et que celui ci est débloqué.
if(joueur->grille[c->x][c->y]>0){
reception_chaine(joueur->com,msg,30);
printf("%s",msg);
entier=reception_entier(joueur->com);
joueur->grille_jeu[c->x][c->y]=1;
if(entier==1){
reception_chaine(joueur->com,msg,30);
printf("%s",msg);
compteur++;
}
}
else joueur->grille_jeu[c->x][c->y]=2;
while(bloque==0){ le problème est ici,le 1er joueur ne retourne pas dans la suite de la grande boucle de jeu
printf("attente joueur 2");
bloque=reception_entier(joueur->com);
printf("nombre bloque : %d",bloque);
cs_lillie69
Messages postés18Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention 6 mai 2006 5 mai 2006 à 19:26
Si dans la partie serveur, lorsque les deux joueurs ont joué le serveur transmet l'entier 1 au client donc ca devrait débloquer le 1er joueur.
Non?
Je me trompe peut etre...
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 5 mai 2006 à 21:48
Mais tu fais une boucle avec une variable qui reste toujours à 0. Tu fait while(bloque == 0). Mais comme je disais, bloque est définie au début de ta fonction et est initialisé à 0 et je ne vois nulle part dans cette même fonction quelque chose pour modifier la variable. Étant donnée que le while reste toujours vrai car bloque est toujours égal à 0, la boucle est infinie. Où bloque est-il modifier dans ta fonction jeu()????
___________________________________________
Les plus grands esprits trouvent toujours une solution
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 5 mai 2006 à 22:02
Je dois t'avouer que j'en sais rien. Il y a peut-être un problème dans tes classes ou dans la façon dont tu envoie le paramètre à la fonction.
Encore une chose, je suppose que la variable joue est une variable global. Ici:
joue++;
printf("-2-joue = %d",joue);
while(joue!=0){
printf("joue : %d",joue);
transmettre_entier(client->com,0);
if(joue==2){
joue=0;
transmettre_entier(client->com,1);
}
Tu additionne avant la boucle. Dison que dans la boucle joue = 1. Mais la boucle ne quitte pas tant que joue n'est pas egal à 0. Pourtant, une fois dans la boucle, joue n'est plus additionné ou soustrait. Donc il va rester dans la boucle indéfiniement. Tu peut m'éclairer un peu sur cette section. Dit moi le si je fais fausse route car j'ai énormément de difficulté à lire ton code.
___________________________________________
Les plus grands esprits trouvent toujours une solution
Alors en fait joue est donc initialisé à 0 et lorsque un thread jeu est lancé joue est incrémenté de 1, comme nous avons deux joueurs à un moment on passe donc dans le if et cela remet joueur à 0.
En fait quand le 2e joueur lance le thread ca va réincrémenter joue et donc le passer à deux.Non?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 6 mai 2006 à 14:25
Le thread lancer par le 2eme jouer incrément-il jouer? Ce thread en question, est-ce que c'est la seconde fonction de ton post plus haut car je ne vois pas de joue++ dans cette même fonction. Mais comme je disais plus haut, c'est probablement une faute dans tes classes car moi, je ne sais plus.
___________________________________________
Les plus grands esprits trouvent toujours une solution
cs_lillie69
Messages postés18Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention 6 mai 2006 6 mai 2006 à 15:33
C'est le 1er thread(celui dans le serveur) qui est lancé à chaque fois qu'un client se connecte.
Ensuite je n'ai pas de classes, mais voici ma structure:
int joue=0;
typedef struct
{
int com;
char nom_joueur[30];
int grille[10][10];
bateau *vaisseau[4];
int score;
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 6 mai 2006 à 15:39
D'accord je comprend. reception_entier, reception_chaine... ce sont des fonctions ça? Enfin... à tu essayer de lancer ton application en debug pas à pas? C'est vraiment cette boucle le problème?
while(bloque==0)
Si oui, je reviend à ce que je disais plus haut, si la boucle ne quitte jamais c'est bloque qui n'a jamais d'autre valeur que 0. Sinon, désolé mais je ne vois pas.
___________________________________________
Les plus grands esprits trouvent toujours une solution
cs_lillie69
Messages postés18Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention 6 mai 2006 6 mai 2006 à 16:46
Oui, désolée je n'ai pas été très clair.
Effectivement ce sont des fonctions.
Euh par contre je sais pas comment on fait pour lancer l'application en debug....(on travail sous Unix avec gcc).
Mais je ne comprends pas pourquoi bloque ne changerait pas de valeurs car j'ai l'impression qu'on a fait ce qu'il fallait pour qu'une fois que le 2er joueur ait joué, on transmette une valeur différente de 0 à notre fonction et qui devrait donc débloquer le 1er joueur?!