ListeCases *determinerDeplacementPossiblesPion(CaseJeu caseJeu[][8], CaseJeu *caseActive){ ListeCases *listeCases = (ListeCases *)malloc(sizeof(listeCases)); listeCases = NULL; int xActif = (caseActive->position.x-1)/80; int yActif = (caseActive->position.y-1)/80; if(caseActive->piece->couleurPiece == BLANC){ if(caseJeu[xActif][yActif-1].piece == NULL){ listeCases = ajouterElement(listeCases, &caseJeu[xActif][yActif-1]); if(caseJeu[xActif][yActif-2].piece == NULL && caseActive->piece->premierCoup){ listeCases = ajouterElement(listeCases, &caseJeu[xActif][yActif-2]); } } if(caseJeu[xActif-1][yActif-1].piece != NULL && caseJeu[xActif-1][yActif-1].piece->couleurPiece == NOIR){ listeCases = ajouterElement(listeCases, &caseJeu[xActif-1][yActif-1]); } if(caseJeu[xActif+1][yActif-1].piece != NULL && caseJeu[xActif+1][yActif-1].piece->couleurPiece == NOIR){ listeCases = ajouterElement(listeCases, &caseJeu[xActif+1][yActif-1]); } }else{ if(caseJeu[xActif][yActif+1].piece == NULL){ listeCases = ajouterElement(listeCases, &caseJeu[xActif][yActif+1]); if(caseJeu[xActif][yActif+2].piece == NULL && caseActive->piece->premierCoup){ listeCases = ajouterElement(listeCases, &caseJeu[xActif][yActif+2]); } } if(caseJeu[xActif-1][yActif+1].piece != NULL && caseJeu[xActif-1][yActif+1].piece->couleurPiece == NOIR){ listeCases = ajouterElement(listeCases, &caseJeu[xActif-1][yActif+1]); } if(caseJeu[xActif+1][yActif+1].piece != NULL && caseJeu[xActif+1][yActif+1].piece->couleurPiece == NOIR){ listeCases = ajouterElement(listeCases, &caseJeu[xActif+1][yActif+1]); } } return listeCases; }
ListeCases *determinerDeplacementPossiblesRoi(CaseJeu caseJeu[][8], CaseJeu *caseActive){ ListeCases *listeCases = (ListeCases *)malloc(sizeof(listeCases)); listeCases = NULL; int xActif = (caseActive->position.x-1)/80; int yActif = (caseActive->position.y-1)/80; if(xActif > 0){ if(yActif>0){ if(caseJeu[xActif-1][yActif-1].piece == NULL || caseJeu[xActif-1][yActif-1].piece->couleurPiece != caseActive->piece->couleurPiece) listeCases = ajouterElement(listeCases, &caseJeu[xActif-1][yActif-1]); } if(caseJeu[xActif-1][yActif].piece == NULL || caseJeu[xActif-1][yActif].piece->couleurPiece != caseActive->piece->couleurPiece) listeCases = ajouterElement(listeCases, &caseJeu[xActif-1][yActif]); if(yActif<7){ if(caseJeu[xActif-1][yActif+1].piece == NULL || caseJeu[xActif-1][yActif+1].piece->couleurPiece != caseActive->piece->couleurPiece) listeCases = ajouterElement(listeCases, &caseJeu[xActif-1][yActif+1]); } } if(yActif >0){ if(caseJeu[xActif][yActif-1].piece == NULL || caseJeu[xActif][yActif-1].piece->couleurPiece != caseActive->piece->couleurPiece) listeCases = ajouterElement(listeCases, &caseJeu[xActif][yActif-1]); } if(yActif <7){ if(caseJeu[xActif][yActif+1].piece == NULL || caseJeu[xActif][yActif+1].piece->couleurPiece != caseActive->piece->couleurPiece) listeCases = ajouterElement(listeCases, &caseJeu[xActif][yActif+1]); } if(xActif < 7){ if(yActif>0){ if(caseJeu[xActif+1][yActif-1].piece == NULL || caseJeu[xActif+1][yActif-1].piece->couleurPiece != caseActive->piece->couleurPiece) listeCases = ajouterElement(listeCases, &caseJeu[xActif+1][yActif-1]); } if(caseJeu[xActif+1][yActif].piece == NULL || caseJeu[xActif+1][yActif].piece->couleurPiece != caseActive->piece->couleurPiece) listeCases = ajouterElement(listeCases, &caseJeu[xActif+1][yActif]); if(yActif<7){ if(caseJeu[xActif+1][yActif+1].piece == NULL || caseJeu[xActif+1][yActif+1].piece->couleurPiece != caseActive->piece->couleurPiece) listeCases = ajouterElement(listeCases, &caseJeu[xActif+1][yActif+1]); } } return listeCases; }
liste_chainee * tab_to_list(int tab_repetition[]) { int i; liste_chainee *liste =NULL; Arbre * a; for(i=0;i<256;i++) { if(tab_repetition[i] !=0) { //printf("\n on ajoute %c = %d", i, tab_repetition[i]); a = ajouter_nouveau_parent(NULL,NULL,i,tab_repetition[i]); liste =ajouterElement(liste,a); } } return liste; }
//créé l'arbre de huffman à partir du tableau de répétition Arbre * creer_arbre_huffman(int tab_repetition[]) { Arbre * a; Arbre * a1; Arbre * a2; liste_chainee *liste; int taille_fichier = somme_element(tab_repetition); liste = tab_to_list(tab_repetition); afficher(liste); while(liste->arbre->proba != taille_fichier) { a1 = recherche_mini(liste); liste = supprimerElement(liste, a1); a2 = recherche_mini(liste); liste = supprimerElement(liste, a2); a = ajouter_nouveau_parent(a1,a2,0,((a1->proba) +(a2->proba))); //printf("proba : a1 %d a2 %d a %d \n",a1->proba,a2->proba,a->proba); liste= ajouterElement(liste, a); } return liste->arbre; }
ListeCases *determinerDeplacementPossiblesCavalier(CaseJeu caseJeu[][8], CaseJeu *caseActive){ ListeCases *listeCases = (ListeCases *)malloc(sizeof(listeCases)); listeCases = NULL; int xActif = (caseActive->position.x-1)/80; int yActif = (caseActive->position.y-1)/80; if(xActif+1<8 && yActif-2>=0 && (caseJeu[xActif+1][yActif-2].piece == NULL || caseJeu[xActif+1][yActif-2].piece->couleurPiece != caseActive->piece->couleurPiece)){ listeCases = ajouterElement(listeCases, &caseJeu[xActif+1][yActif-2]); } if(xActif+1<8 && yActif+2<8 && (caseJeu[xActif+1][yActif+2].piece == NULL || caseJeu[xActif+1][yActif+2].piece->couleurPiece != caseActive->piece->couleurPiece)){ listeCases = ajouterElement(listeCases, &caseJeu[xActif+1][yActif+2]); } if(xActif+2<8 && yActif-1>=0 && (caseJeu[xActif+2][yActif-1].piece == NULL || caseJeu[xActif+2][yActif-1].piece->couleurPiece != caseActive->piece->couleurPiece)){ listeCases = ajouterElement(listeCases, &caseJeu[xActif+2][yActif-1]); } if(xActif+2<8 && yActif+1<8 && (caseJeu[xActif+2][yActif+1].piece == NULL || caseJeu[xActif+2][yActif+1].piece->couleurPiece != caseActive->piece->couleurPiece)){ listeCases = ajouterElement(listeCases, &caseJeu[xActif+2][yActif+1]); } if(xActif-1>=0 && yActif-2>=0 && (caseJeu[xActif-1][yActif-2].piece == NULL || caseJeu[xActif-1][yActif-2].piece->couleurPiece != caseActive->piece->couleurPiece)){ listeCases = ajouterElement(listeCases, &caseJeu[xActif-1][yActif-2]); } if(xActif-1>=0 && yActif+2<8 && (caseJeu[xActif-1][yActif+2].piece == NULL || caseJeu[xActif-1][yActif+2].piece->couleurPiece != caseActive->piece->couleurPiece)){ listeCases = ajouterElement(listeCases, &caseJeu[xActif-1][yActif+2]); } if(xActif-2>=0 && yActif-1>=0 && (caseJeu[xActif-2][yActif-1].piece == NULL || caseJeu[xActif-2][yActif-1].piece->couleurPiece != caseActive->piece->couleurPiece)){ listeCases = ajouterElement(listeCases, &caseJeu[xActif-2][yActif-1]); } if(xActif-2>=0 && yActif+1<8 && (caseJeu[xActif-2][yActif+1].piece == NULL || caseJeu[xActif-2][yActif+1].piece->couleurPiece != caseActive->piece->couleurPiece)){ listeCases = ajouterElement(listeCases, &caseJeu[xActif-2][yActif+1]); } return listeCases; }
ListeCases *determinerDeplacementPossiblesReine(CaseJeu caseJeu[][8], CaseJeu *caseActive){ ListeCases *listeCases = (ListeCases *)malloc(sizeof(listeCases)); listeCases = NULL; int xActif = (caseActive->position.x-1)/80; int yActif = (caseActive->position.y-1)/80; int x = xActif; int y = yActif; int continuer = 1; while(continuer && x>0){ x--; if(caseJeu[x][y].piece != NULL){ if(caseJeu[x][y].piece->couleurPiece != caseActive->piece->couleurPiece){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } continuer = 0; }else if(caseJeu[x][y].piece == NULL){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } } x = xActif; y = yActif; continuer = 1; while(continuer && x<7 ){ x++; if(caseJeu[x][y].piece != NULL){ if(caseJeu[x][y].piece->couleurPiece != caseActive->piece->couleurPiece){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } continuer = 0; }else if(caseJeu[x][y].piece == NULL){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } } x = xActif; y = yActif; continuer = 1; while(continuer && y<7){ y++; if(caseJeu[x][y].piece != NULL){ if(caseJeu[x][y].piece->couleurPiece != caseActive->piece->couleurPiece){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } continuer = 0; }else if(caseJeu[x][y].piece == NULL){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } } x = xActif; y = yActif; continuer = 1; while(continuer && y>0){ y--; if(caseJeu[x][y].piece != NULL){ if(caseJeu[x][y].piece->couleurPiece != caseActive->piece->couleurPiece){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } continuer = 0; }else if(caseJeu[x][y].piece == NULL){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } } x = xActif; y = yActif; continuer = 1; while(continuer && x>0 && y>0){ x--;y--; if(caseJeu[x][y].piece != NULL){ if(caseJeu[x][y].piece->couleurPiece != caseActive->piece->couleurPiece){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } continuer = 0; }else if(caseJeu[x][y].piece == NULL){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } } x = xActif; y = yActif; continuer = 1; while(continuer && x<7 && y>0){ x++;y--; if(caseJeu[x][y].piece != NULL){ if(caseJeu[x][y].piece->couleurPiece != caseActive->piece->couleurPiece){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } continuer = 0; }else if(caseJeu[x][y].piece == NULL){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } } x = xActif; y = yActif; continuer = 1; while(continuer && x>0 && y<7){ x--;y++; if(caseJeu[x][y].piece != NULL){ if(caseJeu[x][y].piece->couleurPiece != caseActive->piece->couleurPiece){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } continuer = 0; }else if(caseJeu[x][y].piece == NULL){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } } x = xActif; y = yActif; continuer = 1; while(continuer && x<7 && y<7){ x++;y++; if(caseJeu[x][y].piece != NULL){ if(caseJeu[x][y].piece->couleurPiece != caseActive->piece->couleurPiece){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } continuer = 0; }else if(caseJeu[x][y].piece == NULL){ listeCases = ajouterElement(listeCases, &caseJeu[x][y]); } } return listeCases; }