diff --git a/DEV1.1/SAE1.1/bleu.bmp b/DEV1.1/SAE1.1/bleu.bmp new file mode 100644 index 0000000..30cb411 Binary files /dev/null and b/DEV1.1/SAE1.1/bleu.bmp differ diff --git a/DEV1.1/SAE1.1/blocage.bmp b/DEV1.1/SAE1.1/blocage.bmp new file mode 100644 index 0000000..fc136c4 Binary files /dev/null and b/DEV1.1/SAE1.1/blocage.bmp differ diff --git a/DEV1.1/SAE1.1/blocus.c b/DEV1.1/SAE1.1/blocus.c new file mode 100644 index 0000000..577f85a --- /dev/null +++ b/DEV1.1/SAE1.1/blocus.c @@ -0,0 +1,289 @@ +#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); + +} diff --git a/DEV1.1/SAE1.1/blocus.h b/DEV1.1/SAE1.1/blocus.h new file mode 100644 index 0000000..25f2173 --- /dev/null +++ b/DEV1.1/SAE1.1/blocus.h @@ -0,0 +1,23 @@ +#ifndef BLOCUS_H +#define BLOCUS_H + +#include +#include +#include +#include + +#define posx 250 +#define posy 100 +#define taille_case 70 + +void EffacerAncienSprite(int x_ancien, int y_ancien, int largeur, int hauteur); +int estAdjacent(int x1, int y1, int x2, int y2); +int ecran_de_fin(int gagnant); +void creer_menu(int *solo, int *multi, int *mode_grille, int *grille); +void initialiser_grille(int grille); +void CoordIA(int grille, int *coordX, int *coordY); +void CoordBlocageIA(int grille, int *blocX, int *blocY); +void DeplacementIAX(int grille, int *deplacementX); +void DeplacementIAY(int grille, int *deplacementY); + +#endif /*BLOCUS_H*/ \ No newline at end of file diff --git a/DEV1.1/SAE1.1/rouge.bmp b/DEV1.1/SAE1.1/rouge.bmp new file mode 100644 index 0000000..cb0ae9c Binary files /dev/null and b/DEV1.1/SAE1.1/rouge.bmp differ