int main() { typeJoueur* joueurs[NBJOUEURMAX]; int nbJoueurs = 0; char choix; // charger joueurs do { afficherMenu(nbJoueurs); printf("Votre choix : "); scanf(" %c", choix); switch (choix) { case 'A' : { joueurs[nbJoueurs] = creerJoueur(); if(joueurs[nbJoueurs] != NULL) { nbJoueurs++; } } } }while(choix != 1); return 0; }
void* handlerConnexion(void *args) { int sock=*(int *)args; int read_size; char *reponse; char *message,client_message[2000]; char **decouper; Dessin *dessin=malloc(sizeof(*dessin)); dessin->couleur="0/0/0"; dessin->size="1"; char *size="1"; char *couleur="0/0/0"; int i=0; if((read_size=recv(sock,client_message,2000,0))>0) { decouper=(char **)fStrSplit(client_message,"/"); if(strcmp(decouper[0],"CONNECT")==0) { pthread_mutex_lock(&mutex); nbConnecter++; pthread_mutex_unlock(&mutex); creerJoueur(decouper[1],sock,mesJoueurs); reponse=(char *)malloc(sizeof(char *)); strcat(reponse,"WELCOME/"); strcat(reponse,decouper[1]); strcat(reponse,"/\n"); printf("la reponse est %s \n",reponse); write(sock,reponse,strlen(reponse)); notifierConnexion(mesJoueurs,decouper[1],sock); } if(strcmp(decouper[0],"SPECTATOR")==0) { printf("il y'a un spectateur qui veut se connecter \n"); mesSpectateurs[nbSpectateur]=sock; pthread_mutex_lock(&mutex); nbSpectateur++; pthread_mutex_unlock(&mutex); } if(strcmp(decouper[0],"REGISTER")==0) { int insc=inscription(decouper[1],decouper[2]); if(insc==0) { char *reponse=(char *)malloc(sizeof(char *)); strcat(reponse,"WELCOME/"); strcat(reponse,decouper[1]); strcat(reponse,"/\n"); close(sock); } else { char *access="ACCESSDENIED/\n"; write(sock,access,strlen(access)); close(sock); } } if(strcmp(decouper[0],"LOGIN")==0) { int auth=authentification(decouper[1],decouper[2]); if(auth==0) { printf("authentification reussi \n"); pthread_mutex_lock(&mutex); nbConnecter++; pthread_mutex_unlock(&mutex); creerJoueur(decouper[1],sock,mesJoueurs); reponse=(char *)malloc(sizeof(char *)); strcat(reponse,"WELCOME/"); strcat(reponse,decouper[1]); strcat(reponse,"/\n"); printf("la reponse est %s \n",reponse); write(sock,reponse,strlen(reponse)); notifierConnexion(mesJoueurs,decouper[1],sock); } else { char *access="ACCESSDENIED/\n"; write(sock,access,strlen(access)); close(sock); printf("echec authentification \n"); } } } while(nbConnecter!=MaxJoueur) { } pthread_cond_signal(¬ifierJoueurs); while(tour!=0) { while((read_size=recv(sock,client_message,2000,0))>0) {printf("une commande est venu qd meme \n"); char** decouper=malloc(sizeof(char *)); decouper=(char **)fStrSplit(client_message,"/"); printf("command recu :%s \n",client_message); if(strcmp(decouper[0],"SET_COLOR")==0) { printf("il veut definir la couleur \n"); char *maCouleur; maCouleur=(char*)malloc(sizeof(char *)); strcat((char *)maCouleur,decouper[1]); strcat(maCouleur,"/"); strcat(maCouleur,decouper[2]); strcat(maCouleur,"/"); strcat(maCouleur,decouper[3]); dessin->couleur=maCouleur; } if(strcmp(decouper[0],"EXIT")==0) { deconnexionJoueur(mesJoueurs,sock,decouper[1]); supprimerJoueur(mesJoueurs,sock); if(dessinateur->socket_id==sock) {close(sock); finRound(mesJoueurs,buffer,"NO_ONE"); setDessinateur(mesJoueurs); if(fgets(buffer,TAILLE_BUFFER,monFichier)!=NULL) { int n=strlen(buffer); buffer[n-1]='\0'; aDessiner=buffer; printf(" le mot a dessiner est %s lol ",aDessiner); EnvoyerRole(mesJoueurs,buffer); flagTimeout=0; break; } } close(sock); } if(strcmp(decouper[0],"GUESS")==0) { printf("veut deviner \n"); if(strcmp(decouper[1],aDessiner)==0) { /*EnvoyerMotDeviner(mesJoueurs,decouper[1],sock,1);*/ printf("bien deviner mon pote \n"); DeclencherMotTrouver(mesJoueurs,sock); if(flagScore==0) { setScore(mesJoueurs,sock,10); setScore(mesJoueurs,dessinateur->socket_id,10); flagScore++; } else { setScore(mesJoueurs,sock,10-flagScore); setScore(mesJoueurs,dessinateur->socket_id,1); flagScore++; } if(flagTimeout==0) { declencherTimeOut(mesJoueurs); flagTimeout=1; sleep(timeout); if(flagPass==0) { nomGagnant=getNomJoueur(mesJoueurs,sock); EnvoyerScore(mesJoueurs); finRound(mesJoueurs,buffer,nomGagnant); setDessinateur(mesJoueurs); if(fgets(buffer,TAILLE_BUFFER,monFichier)!=NULL) { int n=strlen(buffer); buffer[n-1]='\0'; aDessiner=buffer; printf(" le mot a dessiner est %s lol ",aDessiner); EnvoyerRole(mesJoueurs,buffer); flagTimeout=0; break; } } else { finRound(mesJoueurs,buffer,"NO_ONE"); setDessinateur(mesJoueurs); if(fgets(buffer,TAILLE_BUFFER,monFichier)!=NULL) { int n=strlen(buffer); buffer[n-1]='\0'; aDessiner=buffer; printf(" le mot a dessiner est %s lol ",aDessiner); EnvoyerRole(mesJoueurs,buffer); flagTimeout=0; break; } } } } else { EnvoyerMotDeviner(mesJoueurs,decouper[1],sock,0); printf("incorrect le mot deviner \n"); } } if(strcmp(decouper[0],"TALK")==0) { Talk(mesJoueurs,sock,decouper[1]); } if(strcmp(decouper[0],"PASS")==0) { if(flagMotTrouver==0) { /*personne n'a trouver alors on abondonne tranquillement */ finRound(mesJoueurs,buffer,"NO_ONE"); setDessinateur(mesJoueurs); if(fgets(buffer,TAILLE_BUFFER,monFichier)!=NULL) { int n=strlen(buffer); buffer[n-1]='\0'; aDessiner=buffer; printf(" le mot a dessiner est %s lol ",aDessiner); EnvoyerRole(mesJoueurs,buffer); flagTimeout=0; break; } } else { /*quelqu'un a deja trouver on attend la fin du timeout */ flagPass=1; } } if(strcmp(decouper[0],"CHEAT")==0) { pthread_mutex_lock(&mutex); nbCheat++; pthread_mutex_unlock(&mutex); if(nbCheat==3) { finRound(mesJoueurs,buffer,"NO_ONE"); setDessinateur(mesJoueurs); if(fgets(buffer,TAILLE_BUFFER,monFichier)!=NULL) { int n=strlen(buffer); buffer[n-1]='\0'; aDessiner=buffer; printf(" le mot a dessiner est %s lol ",aDessiner); EnvoyerRole(mesJoueurs,buffer); break; } } } if(strcmp(decouper[0],"SET_LINE")==0) { printf("il veut faire un setLine \n"); char *maLigne; maLigne=(char *)malloc(sizeof(char *)); strcat(maLigne,decouper[1]); strcat(maLigne,"/"); strcat(maLigne,decouper[2]); strcat(maLigne,"/"); strcat(maLigne,decouper[3]); strcat(maLigne,"/"); strcat(maLigne,decouper[4]); /*dessin->ligne=maLigne;*/ EnvoyerDessin(mesJoueurs,maLigne,size,couleur); } if(strcmp(decouper[0],"SET_COURBE")==0) { printf("il veut faire une courbe \n"); char *maLigne; maLigne=(char *)malloc(sizeof(char *)); strcat(maLigne,decouper[1]); strcat(maLigne,"/"); strcat(maLigne,decouper[2]); strcat(maLigne,"/"); strcat(maLigne,decouper[3]); strcat(maLigne,"/"); strcat(maLigne,decouper[4]); strcat(maLigne,"/"); strcat(maLigne,decouper[5]); strcat(maLigne,"/"); strcat(maLigne,decouper[6]); strcat(maLigne,"/"); strcat(maLigne,decouper[7]); strcat(maLigne,"/"); strcat(maLigne,decouper[8]); EnvoyerCourbe(mesJoueurs,maLigne,size,couleur); /* dessin->ligne=maLigne; flagCourbe=1; printf(" la courbe est %s \n",dessin->ligne);*/ } if(strcmp(decouper[0],"SET_SIZE")==0) { printf("il veut definir la taille \n"); dessin->size=decouper[1]; } if(strcmp(decouper[0],"SET_TEST")==0) { printf("on fait le test \n"); } /* if(dessin->ligne!=NULL) { printf("le dessin est pres on l'envoi maintenant \n"); if(flagCourbe==1) { EnvoyerCourbe(mesJoueurs,dessin); flagCourbe=0; } else { EnvoyerDessin(mesJoueurs,dessin); } dessin->ligne="0/0/0/0"; }*/ } pthread_mutex_lock(&mutex); tour--; pthread_mutex_unlock(&mutex); printf("round numero %d \n",tour); } }
TPartie* initialiser(Tparam *param){ int i = 0, j = 0; int nombreBateaux = 0; int casesOccupeBateaux = 0; TPartie *partie = malloc (sizeof(TPartie)); //On initialise le score partie->scorePlayer = 0; //=========== Initialisation / Allocation =================== partie->joueur = creerJoueur(); partie->machine = creerJoueur(); partie->grille = creerGrille(KHAUTGRILLE,KLARGGRILLE); partie->grilleMachine = creerGrille(KHAUTGRILLE, KLARGGRILLE); partie->parametres = param; partie->pileCoups = creerPile(); partie->scorePlayer = 0; //On compte le nombre de bateaux à allouer nombreBateaux = getNbBat(param); //On alloue partie->joueur->mesBateaux = malloc( sizeof(TBateau*) * nombreBateaux ); partie->machine->mesBateaux = malloc( sizeof(TBateau*) * nombreBateaux ); //=========== Préparation =================================== //Préparation des bateaux //Création des structures et ajout des id (commencent à 0) for(i = 0 ; i < nombreBateaux ; i++){ partie->joueur->mesBateaux[i] = creerBateau(); partie->machine->mesBateaux[i] = creerBateau(); partie->joueur->mesBateaux[i]->idBateau = i; partie->machine->mesBateaux[i]->idBateau = i + nombreBateaux; partie->joueur->mesBateaux[i]->estPlace = 0; partie->machine->mesBateaux[i]->estPlace = 0; } //Calcul du nombre de cases occupé par les bateaux //pour calculer le score for(i = 0 ; i < K_NBTYPEBATEAUX ; i++){ for(j = 0 ; j < partie->parametres->nombreInstanceBateaux[j] ; j++){ casesOccupeBateaux += i; } } partie->scorePlayer = KLARGGRILLE * KHAUTGRILLE + casesOccupeBateaux; return partie; }