예제 #1
0
int main(int argc, char *argv[]){
	int nbByteCom;
	int i=0, x, y, a, b, k, l, erreur, mauvMouv;
	char str2[100];
	char stop;
	int nbPara;
	int nbPionJ;
	int sockfd;
	DATA *dataBuf=(DATA*)malloc(sizeof(DATA));
	DAMIER *damier;
	PION *p;
	DATA dataFin;
	dataFin.type=FIN;
	damier = init_damier();
	if(damier==NULL){
		printf("Initialisation du damier échouée\n");
		return 0;
	}

	if(argc==2){
		printf("Server, en attente d'un client sur le port %s\n", argv[1]);
		sockfd=server(atoi(argv[1]));
		if(sockfd<0) return 1;
		aff_damier(*damier);

	}else if(argc==3){
		printf("Client, connection au server %s, sur le port %s\n", argv[1], argv[2]);
		sockfd=client(argv[1],atoi(argv[2]));
		if(sockfd<0) return 1;
		
		aff_damier(*damier);
		affTour(damier);
		printf("Nombre de prise possible : %d\n", verif_possibilite_prendre(damier));
		puts("En attente du joueur adverse...");
		nbByteCom=read(sockfd,dataBuf,sizeof(DATA));
		if(nbByteCom>0){
			while(dataBuf->type!=FIN){
				if(readData(damier,*dataBuf)){
					printf("Desynchronisation\n");
					close(sockfd);
					free(dataBuf);
					free_damier(damier);
					return 1;
				}
				aff_damier(*damier);
				nbByteCom=read(sockfd,dataBuf,sizeof(DATA));
			}
		}else{
			printf("Connection perdue\n");
			close(sockfd);
			if(dataBuf!=NULL) free(dataBuf);
			if(damier!=NULL) free_damier(damier);
			exit(0);
		}
		tour_suivant(damier);
	}else{
		printf("Nombre d'arguments incorrect\n");
		return 1;
	}


	while(!fin_partie(damier)){
		mauvMouv=1;
		promotion(damier);
		affTour(damier);
		printf("Nombre de prise possible : %d\n", verif_possibilite_prendre(damier));
		while(mauvMouv){
			mauvMouv=0;
			printf("Action sur un pion : ");
			nbPara=sscanf(fgets(str2,14,stdin),"%d,%d %d,%d %d,%d", &x, &y, &a, &b, &k, &l);
			if(nbPara<1){
				printf("Bye!\n");
				close(sockfd);
				if(dataBuf!=NULL) free(dataBuf);
				if(damier!=NULL) free_damier(damier);
				exit(0);	
			}
			while(nbPara<4){
				printf("paramètre manquant(%d)\n",nbPara);
				printf("Action sur un pion : ");
				nbPara=sscanf(fgets(str2,14,stdin),"%d,%d %d,%d %d,%d", &x, &y, &a, &b, &k, &l);
				if(nbPara<1){
					printf("Bye!\n");
					close(sockfd);
					if(dataBuf!=NULL) free(dataBuf);
					if(damier!=NULL) free_damier(damier);
					exit(0);	
				}
			}
			PION *p1 = rech_pion_c(damier,x,y);
			if(nbPara<6){
				k=a+(a-x);
				l=b+(b-y);
			}
			if(verif_possibilite_prendre(damier)==0){
				if(deplacer(damier,p1,a,b)==0){
					printf("Pion déplacé en (%d,%d)\n",a,b);
					nbByteCom=write(sockfd,&last_modif,sizeof(DATA));
				}else{
					printf("MAUVAIS MOUVEMENT\n");
					mauvMouv=1;
				}
			}else{
				if(prendre(damier,p1,rech_pion_c(damier,a,b),k,l)==0){
					printf("Prise de (%d,%d) par (%d,%d) en (%d,%d)\n",a,b,x,y,k,l);
					nbByteCom=write(sockfd,&last_modif,sizeof(DATA));
					while(verif_possibilite_prendre(damier)>0){
						aff_damier(*damier);
						printf("Rafle : ");
						nbPara=sscanf(fgets(str2,14,stdin),"%d,%d %d,%d %d,%d", &x, &y, &a, &b, &k, &l);
						if(nbPara<1){
							printf("Bye!\n");
							close(sockfd);
							if(dataBuf!=NULL) free(dataBuf);
							if(damier!=NULL) free_damier(damier);
							exit(0);	
						}
						while(nbPara<4){
							printf("paramètre manquant(%d)\n",nbPara);
							printf("Rafle : ");
							nbPara=sscanf(fgets(str2,14,stdin),"%d,%d %d,%d %d,%d", &x, &y, &a, &b, &k, &l);
							if(nbPara<1){
								printf("Bye!\n");
								close(sockfd);
								if(dataBuf!=NULL) free(dataBuf);
								if(damier!=NULL) free_damier(damier);
								exit(0);	
							}
						}
						if(nbPara<6){
							k=a+(a-x);
							l=b+(b-y);
						}
						if(prendre(damier,p1,rech_pion_c(damier,a,b),k,l)==0){
							printf("Prise de (%d,%d) par (%d,%d) en (%d,%d)\n",a,b,x,y,k,l);
							nbByteCom=write(sockfd,&last_modif,sizeof(DATA));
						}else{
							printf("Prise de (%d,%d) par (%d,%d) en (%d,%d)\n",a,b,x,y,k,l);
							printf("MAUVAIS MOUVEMENT\n");
						}
					}
				}else{
					printf("MAUVAIS MOUVEMENT\n");
					mauvMouv=1;
				}
			}
		}
		aff_damier(*damier);
		nbByteCom=write(sockfd,&dataFin,sizeof(DATA));
		tour_suivant(damier);
		affTour(damier);
		printf("Nombre de prise possible : %d\n", verif_possibilite_prendre(damier));
		printf("En attente du joueur adverse...\n");
		nbByteCom=read(sockfd,dataBuf,sizeof(DATA));
		if(nbByteCom>0){
			while(dataBuf->type!=FIN){
				if(readData(damier,*dataBuf)){
					printf("Desynchronisation\n");
					close(sockfd);
					free(dataBuf);
					free_damier(damier);
					return 1;
				}
				aff_damier(*damier);
				nbByteCom=read(sockfd,dataBuf,sizeof(DATA));
			}
		}else{
			printf("Connection perdue\n");
			close(sockfd);
			if(dataBuf!=NULL) free(dataBuf);
			if(damier!=NULL) free_damier(damier);
			exit(0);
		}
		tour_suivant(damier);
	}
	free_damier(damier);
	free(dataBuf);
	close(sockfd);
	return 0;
}
예제 #2
0
int
main_loop(Game game,int noprint, int notiret, int nbessai, unsigned short int state[3])
{
    int nbscrab = 0;
    int nbisotop = 0 ;
    int maxisotop = 0 ;
    int nbsol = 0 ;

    while(1) {
        int i,res;
        int joue;
        score w_score ;
        score t_score ;
        int change_tirage = 0 ;
        res = Game_setrack_random(game, state, 0) ;
        if (res == -1) {
            fin_partie(game,noprint,nbscrab,maxisotop) ;
            return 0 ;
        }

        if (res == 1) {
            change_tirage = 1;
        }

        Game_search(game);

        while (Game_getnresults(game) == 0 && nbessai-- > 0) {
            change_tirage = 2 ;
            if (verbeux) {
                char tirage[RACK_SIZE_MAX];
                Game_getplayedrack(game,Game_getnrounds(game),tirage) ;
                printf ("<essai_tirage>%s</essai_tirage>\n",tirage) ;
            }
            Game_setrack_random(game, state, 1) ;
            Game_search(game);
        }

        if (nbessai < 0) {
            fin_partie(game,noprint,nbscrab,maxisotop) ;
            return 0 ;
        }

        nbisotop = Game_getnresults(game) ;
        nbsol    = Game_getntotal(game) ;

        if (nbisotop > maxisotop) {
            maxisotop = nbisotop ;
        }

        if (nbisotop == 1) {
            Game_play(game, 0) ;
        } else {
            joue = 0 ;
            w_score = traite(game,0,state);
            for (i = 1; i<nbisotop; i++) {
                if ( cmp_score(t_score=traite(game,i,state), w_score) > 0 ) {
                    w_score = t_score ;
                    joue = i;
                }
            }
            Game_play(game, joue) ;
        }
        if (Game_getplayedbonus(game,Game_getnrounds(game)-1)) {
            nbscrab ++ ;
        }
        if (Game_getnrounds(game)==1 || (Game_getplayedbonus(game,Game_getnrounds(game)-2))) {
            change_tirage = 0 ;
        }
        if (! noprint) {
            print_line(game,Game_getnrounds(game)-1,nbisotop,change_tirage,notiret,nbsol);
        }
    }
}