#include #include #include #include #include "blocus.h" #define posx 250 #define posy 100 #define taille_case 70 int main(void){ int case_click[9][9] = {0}; int game = 1; int joueur = 1; int last_case_x_j1, last_case_y_j1; int last_case_x_j2, last_case_y_j2; int sprite = 0; int sprite2 = 0; int placement1 = 0; int placement2 = 0; int solo = 0; int multi = 0; int x = 0, y = 0, i, j; int mode_grille = 0; int grille = 0; int tx = 0, ty = 0; int case_x = 0, case_y = 0; int rouge; int bleu; int blocage; int gagnant = 0; int aleatoirex; int aleatoirey; int coordX, coordY; int blocX, blocY; int deplacementX, deplacementY; /* Pointeurs de fichiers pour les sprites */ FILE *spriteRouge = fopen("rouge.bmp","r"); FILE *spriteBleu = fopen("bleu.bmp","r"); FILE *spriteBlocage = fopen("blocage.bmp","r"); if(spriteRouge == NULL){ printf("Le fichier 'rouge.bmp' est introuvable.\n"); } else{ printf("Le fichier 'rouge.bmp' est trouvé !\n"); fclose(spriteRouge); } if(spriteBleu == NULL){ printf("Le fichier 'bleu.bmp' est introuvable.\n"); } else{ printf("Le fichier 'bleu.bmp' est trouvé.\n"); fclose(spriteBleu); } if(spriteBlocage == NULL){ printf("Le fichier 'blocage.bmp' est introuvable.\n"); } else{ printf("Le fichier 'blocage.bmp' est trouvé.\n"); fclose(spriteBlocage); } creer_menu(&solo,&multi,&mode_grille,&grille); initialiser_grille(grille); /* Chargement des sprites du jeu*/ ChargerImage("spriteBlocage", case_x*taille_case, case_y*taille_case,70,70, 70, 70); blocage = ChargerSprite("blocage.bmp"); if(blocage == -1){ printf("Erreur lors du chargement du sprite");} ChargerImage("spriteBleu", case_x*taille_case, case_y*taille_case,70,70, 70, 70); bleu = ChargerSprite("bleu.bmp"); if(bleu == -1){ printf("Erreur lors du chargement du sprite");} ChargerImage("spriteRouge", case_x*taille_case, case_y*taille_case,70,70, 70, 70); rouge = ChargerSprite("rouge.bmp"); if(rouge == -1){ printf("Erreur lors du chargement du sprite");} while(game==1){ while(placement1!=1 || placement2 != 1){ if(SourisCliquee()){ x = _X; y = _Y; case_x = x / taille_case; case_y = y / taille_case; printf("case choisie : %d, %d\n", case_x, case_y); /* Premier tour */ if(case_x < grille && case_y < grille && case_click[case_x][case_y] != 1) { if(sprite == 0 && case_click[case_x][case_y] != 3){ AfficherSprite(rouge, case_x*taille_case, case_y*taille_case); sprite = 1; last_case_x_j2 = case_x; /*j2 car il sera le deuxième à joueur sauf au placement pour pas le désavantager*/ last_case_y_j2 = case_y; case_click[case_x][case_y]=2; if(solo == 1){ CoordIA(grille, &coordX, &coordY); AfficherSprite(bleu, (coordX-1)*taille_case, (coordY-1)*taille_case); sprite2 =1; placement1 = 1; last_case_x_j1 = coordX-1; last_case_y_j1 = coordY-1; } } else if(multi == 1 && sprite2 == 0 && case_click[case_x][case_y] != 2){ AfficherSprite(bleu, case_x*taille_case, case_y*taille_case); sprite2 = 1; placement2 = 1; last_case_x_j1 = case_x; last_case_y_j1 = case_y; case_click[case_x][case_y]=3; ChoisirCouleurDessin(CouleurParNom("blue")); /*Affichage de l'indication de tour pour le joueur rouge en début de partie*/ RemplirRectangle(0,ty+1,tx,ty-100); } if(case_click[case_x][case_y] !=1 && case_click[case_x][case_y] !=2 && sprite == 1 && sprite2 == 1 && placement1!=1 && estAdjacent(last_case_x_j1, last_case_y_j1, case_x, case_y)) { EffacerAncienSprite(last_case_x_j1*taille_case, last_case_y_j1*taille_case, taille_case, taille_case); case_click[last_case_x_j1][last_case_y_j1]=0; AfficherSprite(bleu, case_x*taille_case, case_y*taille_case); last_case_x_j1 = case_x; /*recupère la coordonnée*/ last_case_y_j1 = case_y; placement1=1; case_click[case_x][case_y]=3; } else if(case_click[case_x][case_y] != 1 && case_click[case_x][case_y] !=3 && sprite == 1 && sprite2 == 1 && placement2!= 1 && estAdjacent(last_case_x_j2, last_case_y_j2, case_x, case_y)) { EffacerAncienSprite(last_case_x_j2*taille_case, last_case_y_j2*taille_case, taille_case, taille_case); case_click[last_case_x_j2][last_case_y_j2]=0; AfficherSprite(rouge, case_x*taille_case, case_y*taille_case); last_case_x_j2 = case_x; last_case_y_j2 = case_y; placement2=1; case_click[case_x][case_y]=2; } } } } if(SourisCliquee()){ x = _X; y = _Y; case_x = x / taille_case; case_y = y / taille_case; printf("case choisie : %d, %d\n", case_x, case_y); if(case_x < grille && case_y < grille && case_click[case_x][case_y] != 1) { if(joueur == 1 && placement1 == 1 && case_click[case_x][case_y] != 1 && case_click[case_x][case_y]!=2 && case_click[case_x][case_y]!=3){ AfficherSprite(blocage, case_x*taille_case+1, case_y*taille_case+1); case_click[case_x][case_y]=1; placement2-=1; ChoisirCouleurDessin(CouleurParNom("red")); RemplirRectangle(0,ty+1,tx,ty-100); if(solo == 1){ for (i = 0; i < grille; i++) { for (j = 0; j < grille; j++) { if (case_click[j][i] == 3 && (j + 1 >= grille || case_click[j + 1][i] != 0) && (j - 1 < 0 || case_click[j - 1][i] != 0) && (i + 1 >= grille || case_click[j][i + 1] != 0) && (i - 1 < 0 || case_click[j][i - 1] != 0) && (j + 1 >= grille || i + 1 >= grille || case_click[j + 1][i + 1] != 0) && (j + 1 >= grille || i - 1 < 0 || case_click[j + 1][i - 1] != 0) && (j - 1 < 0 || i + 1 >= grille || case_click[j - 1][i + 1] != 0) && (j - 1 < 0 || i - 1 < 0 || case_click[j - 1][i - 1] != 0)) { printf("GG ROUGE\n"); sleep(1); gagnant = 2; ecran_de_fin(gagnant); } } } do{ do{ DeplacementIAX(grille, &deplacementX); }while(last_case_x_j1+deplacementX < 0 || last_case_x_j1+deplacementX >= grille); do{ DeplacementIAY(grille, &deplacementY); }while((last_case_y_j1+deplacementY < 0 || last_case_y_j1+deplacementY >= grille)); }while(case_click[last_case_x_j1+deplacementX][last_case_y_j1+deplacementY] != 0 || (deplacementX == 0 && deplacementY == 0)); EffacerAncienSprite(last_case_x_j1*taille_case, last_case_y_j1*taille_case, taille_case, taille_case); case_click[last_case_x_j1][last_case_y_j1]=0; AfficherSprite(bleu, (last_case_x_j1+deplacementX)*taille_case, (last_case_y_j1+deplacementY)*taille_case); last_case_x_j1 = last_case_x_j1 + deplacementX; /*recupère la coordonnée*/ last_case_y_j1 = last_case_y_j1 + deplacementY; placement1=1; case_click[last_case_x_j1][last_case_y_j1]=3; do{ CoordBlocageIA(grille, &blocX, &blocY); }while(case_click[blocX-1][blocY-1] != 0); AfficherSprite(blocage, (blocX-1)*taille_case, (blocY-1)*taille_case); case_click[blocX-1][blocY-1] = 1; } } else if(joueur == -1 && placement2 == 1 && case_click[case_x][case_y] != 1 && case_click[case_x][case_y]!=2 && case_click[case_x][case_y]!=3){ if(multi == 1){ AfficherSprite(blocage, case_x*taille_case, case_y*taille_case); case_click[case_x][case_y]=1; placement1-=1; ChoisirCouleurDessin(CouleurParNom("blue")); RemplirRectangle(0,ty+1,tx,ty-100); } } /*Vérification si les joueurs peuvent encore bouger*/ for (i = 0; i < grille; i++) { for (j = 0; j < grille; j++) { if (case_click[j][i] == 2 && (j + 1 >= grille || case_click[j + 1][i] != 0) && (j - 1 < 0 || case_click[j - 1][i] != 0) && (i + 1 >= grille || case_click[j][i + 1] != 0) && (i - 1 < 0 || case_click[j][i - 1] != 0) && (j + 1 >= grille || i + 1 >= grille || case_click[j + 1][i + 1] != 0) && (j + 1 >= grille || i - 1 < 0 || case_click[j + 1][i - 1] != 0) && (j - 1 < 0 || i + 1 >= grille || case_click[j - 1][i + 1] != 0) && (j - 1 < 0 || i - 1 < 0 || case_click[j - 1][i - 1] != 0)) { printf("GG BLEU\n"); sleep(1); gagnant = 1; ecran_de_fin(gagnant); } if (case_click[j][i] == 3 && (j + 1 >= grille || case_click[j + 1][i] != 0) && (j - 1 < 0 || case_click[j - 1][i] != 0) && (i + 1 >= grille || case_click[j][i + 1] != 0) && (i - 1 < 0 || case_click[j][i - 1] != 0) && (j + 1 >= grille || i + 1 >= grille || case_click[j + 1][i + 1] != 0) && (j + 1 >= grille || i - 1 < 0 || case_click[j + 1][i - 1] != 0) && (j - 1 < 0 || i + 1 >= grille || case_click[j - 1][i + 1] != 0) && (j - 1 < 0 || i - 1 < 0 || case_click[j - 1][i - 1] != 0)) { printf("GG ROUGE\n"); sleep(1); gagnant = 2; ecran_de_fin(gagnant); } } } } if(multi == 1){ /*Changement de joueur sauf lors des placements des pions*/ joueur=-(joueur); } } } /*Fermeture des fichiers*/ fclose(spriteRouge); fclose(spriteBleu); fclose(spriteBlocage); }