SAE11_2024/DEV1.1/SAE1.1/blocus.c

290 lines
9.1 KiB
C
Raw Permalink Normal View History

2024-11-24 10:40:37 +01:00
#include<graph.h>
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#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);
}