264 lines
7.8 KiB
C
264 lines
7.8 KiB
C
|
# include <stdio.h>
|
||
|
# include <stdlib.h>
|
||
|
# include <graph.h>
|
||
|
|
||
|
void dessine_grille(int taille_grille) {
|
||
|
int i;
|
||
|
int j;
|
||
|
int cote_par_carre = (400/taille_grille);
|
||
|
for (i = 0; i != taille_grille; i++) {
|
||
|
for (j = 0; j != taille_grille; j++) {
|
||
|
ChoisirCouleurDessin(CouleurParNom("black"));
|
||
|
DessinerRectangle(50 + (cote_par_carre*i), 50 + (cote_par_carre*j), cote_par_carre, cote_par_carre);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int compte_nb_cases_occupees(int grille[9][9], int taille_grille) {
|
||
|
/* Renvoie le nombre de cases occupées (non vides) */
|
||
|
int compteur = 0;
|
||
|
int i,j;
|
||
|
for (i = 0; i != taille_grille; i++) {
|
||
|
for (j = 0; j != taille_grille; j++) {
|
||
|
if (grille[i][j] != 0) {
|
||
|
compteur++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return compteur;
|
||
|
}
|
||
|
|
||
|
void initialise_grille(int grille[9][9], int taille_grille) {
|
||
|
int i;
|
||
|
int j;
|
||
|
|
||
|
for(i = 0; i != taille_grille; i++) {
|
||
|
for(j = 0; j != taille_grille; j++) {
|
||
|
grille[i][j] = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int choisir_emplacement_pion(int joueur, int grille[9][9], int taille_grille) {
|
||
|
/* J1 : Rouge J2 : Bleu */
|
||
|
/* Renvoie 1 si le joueur a cliqué sur une case ou non */
|
||
|
couleur c;
|
||
|
int i,j;
|
||
|
int cote_par_carre = (400/taille_grille);
|
||
|
if (joueur == 1) {
|
||
|
c = CouleurParNom("dark red");
|
||
|
printf("Red");
|
||
|
}
|
||
|
else {
|
||
|
c = CouleurParNom("dark blue");
|
||
|
printf("Blue");
|
||
|
}
|
||
|
for (i = 0; i != taille_grille; i++) {
|
||
|
for (j = 0; j != taille_grille; j++) {
|
||
|
if (souris_clique_bouton(50 + (cote_par_carre*i), 50 + (cote_par_carre*j), cote_par_carre, cote_par_carre) && grille[i][j] == 0) {
|
||
|
ChoisirCouleurDessin(c);
|
||
|
DessinerArc(50 + (cote_par_carre*i), 50 + (cote_par_carre*j), cote_par_carre, cote_par_carre,360,360);
|
||
|
RemplirArc(50 + (cote_par_carre*i), 50 + (cote_par_carre*j), cote_par_carre, cote_par_carre,360,360);
|
||
|
dessine_grille(taille_grille);
|
||
|
grille[i][j] = joueur;
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int choisir_emplacement_croix(int joueur, int grille[9][9], int taille_grille) {
|
||
|
/* J1 : Rouge J2 : Bleu */
|
||
|
/* Renvoie 1 si le joueur a cliqué sur une case ou non */
|
||
|
couleur c;
|
||
|
int i,j;
|
||
|
int cote_par_carre = (400/taille_grille);
|
||
|
if (joueur == 1) {
|
||
|
c = CouleurParNom("dark red");
|
||
|
printf("Red");
|
||
|
}
|
||
|
else {
|
||
|
c = CouleurParNom("dark blue");
|
||
|
printf("Blue");
|
||
|
}
|
||
|
for (i = 0; i != taille_grille; i++) {
|
||
|
for (j = 0; j != taille_grille; j++) {
|
||
|
if (souris_clique_bouton(50 + (cote_par_carre*i), 50 + (cote_par_carre*j), cote_par_carre, cote_par_carre) && grille[i][j] == 0) {
|
||
|
ChoisirCouleurDessin(c);
|
||
|
RemplirRectangle(50 + (cote_par_carre*i), 50 + (cote_par_carre*j), cote_par_carre, cote_par_carre);
|
||
|
dessine_grille(taille_grille);
|
||
|
grille[i][j] = 3;
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int deplacement_valide(int joueur, int pos_deplacement_x, int pos_deplacement_y, int grille[9][9], int taille_grille) {
|
||
|
/* Renvoie 1 si le déplacement est valide, 0 sinon. */
|
||
|
int i,j;
|
||
|
int pos_joueur_x, pos_joueur_y;
|
||
|
|
||
|
for (i = 0; i != taille_grille; i++) {
|
||
|
for (j = 0; j != taille_grille; j++) {
|
||
|
if (grille[i][j] == joueur) {
|
||
|
pos_joueur_x = i;
|
||
|
pos_joueur_y = j;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* Cas des 6 cases au dessus et en dessous du joueur */
|
||
|
for (i = (pos_joueur_x-1); i != (pos_joueur_x+2); i++) {
|
||
|
if (pos_deplacement_x == i
|
||
|
&& (pos_deplacement_y == pos_joueur_y-1 || pos_deplacement_y == pos_joueur_y+1)
|
||
|
&& grille[pos_deplacement_x][pos_deplacement_y] == 0) {
|
||
|
printf("TEST");
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
/* Cas des 2 cases à gauche et à droite du joueur */
|
||
|
if ((pos_deplacement_x == pos_joueur_x-1 || pos_deplacement_x == pos_joueur_x+1)
|
||
|
&& pos_deplacement_y == pos_joueur_y
|
||
|
&& grille[pos_deplacement_x][pos_deplacement_y] == 0) {
|
||
|
return 1;
|
||
|
}
|
||
|
return 0;
|
||
|
|
||
|
}
|
||
|
|
||
|
int deplacer_pion(int joueur, int grille[9][9], int taille_grille) {
|
||
|
/* Renvoie 1 si le déplacement s'est bien effectué, 0 sinon */
|
||
|
int i,j;
|
||
|
int cote_par_carre = (400/taille_grille);
|
||
|
int pos_deplacement_x, pos_deplacement_y;
|
||
|
int pos_joueur_x, pos_joueur_y;
|
||
|
|
||
|
for (i = 0; i != taille_grille; i++) {
|
||
|
for (j = 0; j != taille_grille; j++) {
|
||
|
if (souris_clique_bouton(50 + (cote_par_carre*i), 50 + (cote_par_carre*j), cote_par_carre, cote_par_carre)) {
|
||
|
pos_deplacement_x = i;
|
||
|
pos_deplacement_y = j;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (i = 0; i != taille_grille; i++) {
|
||
|
for (j = 0; j != taille_grille; j++) {
|
||
|
if (grille[i][j] == joueur) {
|
||
|
pos_joueur_x = i;
|
||
|
pos_joueur_y = j;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (deplacement_valide(joueur, pos_deplacement_x, pos_deplacement_y, grille, taille_grille)) {
|
||
|
int cote_par_carre = 400/taille_grille;
|
||
|
couleur c;
|
||
|
grille[pos_deplacement_x][pos_deplacement_y] = joueur;
|
||
|
grille[pos_joueur_x][pos_joueur_y] = 0;
|
||
|
if (joueur == 1) {
|
||
|
c = CouleurParNom("dark red");
|
||
|
printf("Red");
|
||
|
}
|
||
|
else {
|
||
|
c = CouleurParNom("dark blue");
|
||
|
printf("Blue");
|
||
|
}
|
||
|
ChoisirCouleurDessin(c);
|
||
|
DessinerArc(50 + (cote_par_carre*pos_deplacement_x), 50 + (cote_par_carre*pos_deplacement_y), cote_par_carre, cote_par_carre,360,360);
|
||
|
RemplirArc(50 + (cote_par_carre*pos_deplacement_x), 50 + (cote_par_carre*pos_deplacement_y), cote_par_carre, cote_par_carre,360,360);
|
||
|
ChoisirCouleurDessin(CouleurParNom("white"));
|
||
|
RemplirRectangle(50 + (cote_par_carre*pos_joueur_x), 50 + (cote_par_carre*pos_joueur_y), cote_par_carre, cote_par_carre);
|
||
|
dessine_grille(taille_grille);
|
||
|
return 1;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
int partie_a_deux_joueurs(int taille_grille) {
|
||
|
int joueur = 1;
|
||
|
int grille[9][9];
|
||
|
unsigned long cycle = 10000L;
|
||
|
unsigned long suivant = Microsecondes() + cycle;
|
||
|
int deplacement_fini = 0;
|
||
|
InitialiserGraphique();
|
||
|
CreerFenetre(100,100,500,500);
|
||
|
initialise_grille(grille, taille_grille);
|
||
|
dessine_grille(taille_grille);
|
||
|
|
||
|
/* Phase de placement des pions */
|
||
|
while (compte_nb_cases_occupees(grille, taille_grille) < 2) {
|
||
|
if (Microsecondes() > suivant) {
|
||
|
suivant = Microsecondes() + cycle;
|
||
|
if (joueur == 1) {
|
||
|
|
||
|
ChoisirCouleurDessin(CouleurParNom("dark red"));
|
||
|
EcrireTexte(250-(TailleChaineEcran("Tour du Joueur 1",1)/2), 475, "Tour du Joueur 1", 1);
|
||
|
}
|
||
|
else {
|
||
|
ChoisirCouleurDessin(CouleurParNom("white"));
|
||
|
RemplirRectangle(0,460,500,25);
|
||
|
ChoisirCouleurDessin(CouleurParNom("dark blue"));
|
||
|
EcrireTexte(250-(TailleChaineEcran("Tour du Joueur 2",1)/2), 475, "Tour du Joueur 2", 1);
|
||
|
}
|
||
|
if (SourisCliquee()) {
|
||
|
int nb_cases = compte_nb_cases_occupees(grille, taille_grille);
|
||
|
choisir_emplacement_pion(joueur, grille, taille_grille);
|
||
|
/* Permet d'éviter de passer au joueur suivant si on clique sur une case non vide */
|
||
|
if (nb_cases != compte_nb_cases_occupees(grille, taille_grille)) {
|
||
|
if (joueur == 1) {
|
||
|
joueur = 2;
|
||
|
}
|
||
|
else {
|
||
|
joueur = 1;
|
||
|
}
|
||
|
}
|
||
|
ChoisirCouleurDessin(CouleurParNom("white"));
|
||
|
RemplirRectangle(0,460,500,25);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* Alterne les tours jusqu'à ce que la grille soit remplie */
|
||
|
while (compte_nb_cases_occupees(grille, taille_grille) < taille_grille*taille_grille) {
|
||
|
if (Microsecondes() > suivant) {
|
||
|
suivant = Microsecondes() + cycle;
|
||
|
if (joueur == 1) {
|
||
|
|
||
|
ChoisirCouleurDessin(CouleurParNom("dark red"));
|
||
|
EcrireTexte(250-(TailleChaineEcran("Tour du Joueur 1",1)/2), 475, "Tour du Joueur 1", 1);
|
||
|
}
|
||
|
else {
|
||
|
ChoisirCouleurDessin(CouleurParNom("white"));
|
||
|
RemplirRectangle(0,460,500,25);
|
||
|
ChoisirCouleurDessin(CouleurParNom("dark blue"));
|
||
|
EcrireTexte(250-(TailleChaineEcran("Tour du Joueur 2",1)/2), 475, "Tour du Joueur 2", 1);
|
||
|
}
|
||
|
if (SourisCliquee()) {
|
||
|
int nb_cases = compte_nb_cases_occupees(grille, taille_grille);
|
||
|
if (!deplacement_fini) {
|
||
|
deplacement_fini = deplacer_pion(joueur, grille, taille_grille);
|
||
|
}
|
||
|
else {
|
||
|
choisir_emplacement_croix(joueur, grille, taille_grille);
|
||
|
/* Permet d'éviter de passer au joueur suivant si on clique sur une case non vide */
|
||
|
if (nb_cases != compte_nb_cases_occupees(grille, taille_grille)) {
|
||
|
if (joueur == 1) {
|
||
|
joueur = 2;
|
||
|
}
|
||
|
else {
|
||
|
joueur = 1;
|
||
|
}
|
||
|
deplacement_fini = 0;
|
||
|
}
|
||
|
}
|
||
|
ChoisirCouleurDessin(CouleurParNom("white"));
|
||
|
RemplirRectangle(0,460,500,25);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|