Blocus/plateau.c
2021-11-17 18:06:51 +01:00

426 lines
24 KiB
C

/* Leni Boscher * Tanguy Domergue */
#include<stdio.h>
#include<stdlib.h>
#include<graph.h>
#include<time.h>
#include<unistd.h>
#include"regles.h"
#include"plateau.h"
#include"menu.h"
#include"main.h"
/* Main */
int plateau(int dim, int nb_joueurs) {
taille = dim;
decalage = ((TAILLE_WINDOW-DIMENSIONS)/2);
srand(time(NULL));
couple pion;
couple indice;
int jouer=1;
int tailleCase = DIMENSIONS/taille;
int i;
int j;
couleur c;
int win=0;
tab=malloc((taille+2)*sizeof(tile));
for(i=0;i<taille+2;i++){
tab[i]=malloc((taille+2)*sizeof(tile));
}
InitialiserGraphique();
CreerFenetre(10,10,TAILLE_WINDOW,TAILLE_WINDOW);
for(i=0;i<taille;i++) {
DessinerSegment(decalage+(tailleCase)*i,decalage,decalage+(tailleCase)*i,DIMENSIONS+decalage);
for(j=0;j<taille;j++) { /* Cette boucle stocke dans le tableau des cases les coordonnées du coin haut gauche de chaques cases */
tab[i+1][j+1].coord.x = decalage+(tailleCase)*i;
tab[i+1][j+1].coord.y = decalage+(tailleCase)*j;
tab[i+1][j+1].etat = 0;
}
DessinerSegment(decalage,decalage+(tailleCase)*i,DIMENSIONS+decalage,decalage+(tailleCase)*i);
}
DessinerSegment(decalage+(tailleCase)*i+1,decalage,decalage+(tailleCase)*i+1,DIMENSIONS+decalage);
DessinerSegment(decalage,decalage+(tailleCase)*i+1,DIMENSIONS+decalage,decalage+(tailleCase)*i+1);
/* initialisation du tableau de l'etat des bordures */
for(i=0;i<taille+2;i++) {
tab[i][0].etat = -1;
tab[0][i].etat = -1;
tab[taille+1][i].etat = -1;
tab[i][taille+1].etat = -1;
}
/* Placer les premiers pions */
if (nb_joueurs==2) {
jouer=1;
while (1) {
if (SourisCliquee()==1) {
SourisPosition();
indice = calculIndice(_X, _Y);
if (caseVerif(indice)==1) {
if (jouer==1) {
if (taille==3) /* Cette succession de if adapte la taille de l'image des pions bleus aux dimensions choisies par l'utilisateur :
* Il y a 7 dimensions possibles, et 7 images différentes pour chaques dimensions */
ChargerImage("./img/pion_bleu3.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==4)
ChargerImage("./img/pion_bleu4.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==5)
ChargerImage("./img/pion_bleu5.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==6)
ChargerImage("./img/pion_bleu6.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==7)
ChargerImage("./img/pion_bleu7.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==8)
ChargerImage("./img/pion_bleu8.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==9)
ChargerImage("./img/pion_bleu9.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
} else if (jouer==3){
if (taille==3) /* Cette succession de if adapte la taille de l'image des pions oranges aux dimensions choisies par l'utilisateur :
* Il y a 7 dimensions possibles, et 7 images différentes pour chaques dimensions */
ChargerImage("./img/pion_orange3.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==4)
ChargerImage("./img/pion_orange4.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==5)
ChargerImage("./img/pion_orange5.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==6)
ChargerImage("./img/pion_orange6.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==7)
ChargerImage("./img/pion_orange7.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==8)
ChargerImage("./img/pion_orange8.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==9)
ChargerImage("./img/pion_orange9.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2); }
tab[indice.x][indice.y].etat=jouer;
if(jouer==3) break;
jouer=3;
}
}
}
AfficherTableau();
/* Tours de jeu, les joueurs déplacent chacun un pion, puis placent une croix, à tours de rôle */
jouer=1;
while (1) {
while(SourisCliquee()==1) {
if(jouer==1) {
SourisPosition();
indice = calculIndice(_X, _Y);
pion = chercherPion(jouer);
if ((caseVerif(indice)==1 && (deplacAdj(indice, pion)==1))) {
tab[pion.x][pion.y].etat = 0;
CopierZone(0, 0, tab[pion.x][pion.y].coord.x+1, tab[pion.x][pion.y].coord.y+1, tailleCase-2, tailleCase-2, tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1);
c=CouleurParNom("white");
ChoisirCouleurDessin(c);
RemplirRectangle(tab[pion.x][pion.y].coord.x+1, tab[pion.x][pion.y].coord.y+1, tailleCase-2, tailleCase-2);
tab[indice.x][indice.y].etat=jouer;
jouer++;
AfficherTableau();
}
break;
}
if(winCondition(chercherPion(1), chercherPion(3))==1) {
break;
}
if(jouer==2) {
SourisPosition();
indice = calculIndice(_X, _Y);
if ((caseVerif(indice)==1)) {
if (taille==3) /* Cette succession de if adapte la taille de l'image des croix bleues aux dimensions choisies par l'utilisateur :
* Il y a 7 dimensions possibles, et 7 images différentes pour chaques dimensions */
ChargerImage("./img/croix_bleue3.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==4)
ChargerImage("./img/croix_bleue4.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==5)
ChargerImage("./img/croix_bleue5.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==6)
ChargerImage("./img/croix_bleue6.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==7)
ChargerImage("./img/croix_bleue7.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==8)
ChargerImage("./img/croix_bleue8.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==9)
ChargerImage("./img/croix_bleue9.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
tab[indice.x][indice.y].etat=jouer;
jouer++;
AfficherTableau();
}
break;
}
if(winCondition(chercherPion(1), chercherPion(3))==1) {
break;
}
if(jouer==3) {
SourisPosition();
indice = calculIndice(_X, _Y);
pion = chercherPion(jouer);
if (caseVerif(indice)==1 && deplacAdj(indice, pion)==1) {
tab[pion.x][pion.y].etat = 0;
CopierZone(0, 0, tab[pion.x][pion.y].coord.x+1, tab[pion.x][pion.y].coord.y+1, tailleCase-2, tailleCase-2, tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1);
c=CouleurParNom("white");
ChoisirCouleurDessin(c);
RemplirRectangle(tab[pion.x][pion.y].coord.x+1, tab[pion.x][pion.y].coord.y+1, tailleCase-2, tailleCase-2);
tab[indice.x][indice.y].etat=jouer;
jouer++;
AfficherTableau();
}
break;
}
if(winCondition(chercherPion(1), chercherPion(3))==1) {
break;
}
if(jouer==4) {
SourisPosition();
indice = calculIndice(_X, _Y);
if (caseVerif(indice)==1) {
if (taille==3) /* Cette succession de if adapte la taille de l'image des croix oranges aux dimensions choisies par l'utilisateur :
* Il y a 7 dimensions possibles, et 7 images différentes pour chaques dimensions */
ChargerImage("./img/croix_orange3.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==4)
ChargerImage("./img/croix_orange4.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==5)
ChargerImage("./img/croix_orange5.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==6)
ChargerImage("./img/croix_orange6.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==7)
ChargerImage("./img/croix_orange7.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==8)
ChargerImage("./img/croix_orange8.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==9)
ChargerImage("./img/croix_orange9.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
tab[indice.x][indice.y].etat=jouer;
jouer = 1;
AfficherTableau();
}
break;
}
break;
}
if(winCondition(chercherPion(1), chercherPion(3))==1) {
break;
}
}
}
if(nb_joueurs==1) {
jouer=1;
while (1) {
if (SourisCliquee()==1) {
SourisPosition();
indice = calculIndice(_X, _Y);
if (caseVerif(indice)==1) {
if (jouer==1) {
if (taille==3) /* Cette succession de if adapte la taille de l'image des pions bleus aux dimensions choisies par l'utilisateur :
* Il y a 7 dimensions possibles, et 7 images différentes pour chaques dimensions */
ChargerImage("./img/pion_bleu3.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==4)
ChargerImage("./img/pion_bleu4.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==5)
ChargerImage("./img/pion_bleu5.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==6)
ChargerImage("./img/pion_bleu6.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==7)
ChargerImage("./img/pion_bleu7.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==8)
ChargerImage("./img/pion_bleu8.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==9)
ChargerImage("./img/pion_bleu9.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2); tab[indice.x][indice.y].etat=jouer;
jouer=3;
if(jouer==3) break;
}
}
}
}
while (1) {
if (jouer==3) {
_X=((rand()%DIMENSIONS)+decalage);
_Y=((rand()%DIMENSIONS)+decalage);
indice = calculIndice(_X, _Y);
if (caseVerif(indice)==1) {
if (jouer==3) {
usleep(500000);
if (taille==3) /* Cette succession de if adapte la taille de l'image des pions oranges aux dimensions choisies par l'utilisateur :
* Il y a 7 dimensions possibles, et 7 images différentes pour chaques dimensions */
ChargerImage("./img/pion_orange3.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==4)
ChargerImage("./img/pion_orange4.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==5)
ChargerImage("./img/pion_orange5.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==6)
ChargerImage("./img/pion_orange6.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==7)
ChargerImage("./img/pion_orange7.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==8)
ChargerImage("./img/pion_orange8.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==9)
ChargerImage("./img/pion_orange9.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2); tab[indice.x][indice.y].etat=jouer;
if(jouer==3) break;
}
}
}
}
AfficherTableau();
/* Tours de jeu, les joueurs déplacent chacun un pion, puis placent une croix, à tours de rôle */
jouer=1;
while (1) {
while(SourisCliquee()==1) {
if(jouer==1) {
SourisPosition();
indice = calculIndice(_X, _Y);
pion = chercherPion(jouer);
if ((caseVerif(indice)==1 && (deplacAdj(indice, pion)==1))) {
tab[pion.x][pion.y].etat = 0;
CopierZone(0, 0, tab[pion.x][pion.y].coord.x+1, tab[pion.x][pion.y].coord.y+1, tailleCase-2, tailleCase-2, tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1);
c=CouleurParNom("white");
ChoisirCouleurDessin(c);
RemplirRectangle(tab[pion.x][pion.y].coord.x+1, tab[pion.x][pion.y].coord.y+1, tailleCase-2, tailleCase-2);
tab[indice.x][indice.y].etat=jouer;
jouer++;
AfficherTableau();
}
break;
}
if(winCondition(chercherPion(1), chercherPion(3))==1) {
break;
}
if(jouer==2) {
SourisPosition();
indice = calculIndice(_X, _Y);
if ((caseVerif(indice)==1)) {
if (taille==3) /* Cette succession de if adapte la taille de l'image des croix bleues aux dimensions choisies par l'utilisateur :
* Il y a 7 dimensions possibles, et 7 images différentes pour chaques dimensions */
ChargerImage("./img/croix_bleue3.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==4)
ChargerImage("./img/croix_bleue4.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==5)
ChargerImage("./img/croix_bleue5.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==6)
ChargerImage("./img/croix_bleue6.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==7)
ChargerImage("./img/croix_bleue7.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==8)
ChargerImage("./img/croix_bleue8.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==9)
ChargerImage("./img/croix_bleue9.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
tab[indice.x][indice.y].etat=jouer;
jouer++;
AfficherTableau();
}
break;
}
if(winCondition(chercherPion(1), chercherPion(3))==1) {
break;
}
}
while (jouer==3) {
if(jouer==3) {
_X=((rand()%DIMENSIONS)+decalage);
_Y=((rand()%DIMENSIONS)+decalage);
indice = calculIndice(_X, _Y);
pion = chercherPion(jouer);
if (caseVerif(indice)==1 && deplacAdj(indice, pion)==1) {
usleep(1000000);
tab[pion.x][pion.y].etat = 0;
CopierZone(0, 0, tab[pion.x][pion.y].coord.x+1, tab[pion.x][pion.y].coord.y+1, tailleCase-2, tailleCase-2, tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1);
c=CouleurParNom("white");
ChoisirCouleurDessin(c);
RemplirRectangle(tab[pion.x][pion.y].coord.x+1, tab[pion.x][pion.y].coord.y+1, tailleCase-2, tailleCase-2);
tab[indice.x][indice.y].etat=jouer;
jouer++;
AfficherTableau();
}
break;
}
if(winCondition(chercherPion(1), chercherPion(3))==1) {
break;
}
}
while(jouer==4){
if(jouer==4) {
_X=((rand()%DIMENSIONS)+decalage);
_Y=((rand()%DIMENSIONS)+decalage);
indice = calculIndice(_X, _Y);
if (caseVerif(indice)==1) {
usleep(1000000);
if (taille==3) /* Cette succession de if adapte la taille de l'image des croix oranges aux dimensions choisies par l'utilisateur :
* Il y a 7 dimensions possibles, et 7 images différentes pour chaques dimensions */
ChargerImage("./img/croix_orange3.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==4)
ChargerImage("./img/croix_orange4.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==5)
ChargerImage("./img/croix_orange5.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==6)
ChargerImage("./img/croix_orange6.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==7)
ChargerImage("./img/croix_orange7.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==8)
ChargerImage("./img/croix_orange8.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
if (taille==9)
ChargerImage("./img/croix_orange9.png", tab[indice.x][indice.y].coord.x+1, tab[indice.x][indice.y].coord.y+1 , 0, 0, tailleCase-2, tailleCase-2);
tab[indice.x][indice.y].etat=jouer;
jouer = 1;
AfficherTableau();
}
break;
}
break;
}
if(winCondition(chercherPion(1), chercherPion(3))==1) {
break;
}
}
}
for(i=0;i<taille+2;i++) {
free(tab[i]);
}
free(tab);
while(1){
if (SourisCliquee()){
FermerGraphique();
main();
break;
}
}
return 0;
}