236 lines
7.8 KiB
C
236 lines
7.8 KiB
C
#include <stdlib.h>
|
|
#include <graph.h>
|
|
#include "graphique.h"
|
|
#include "jeu.h"
|
|
|
|
|
|
/* Afficher un pion */
|
|
void AfficherPion(int x, int y, int pion) {
|
|
AfficherSprite(pion, x, y);
|
|
}
|
|
//
|
|
|
|
|
|
/* Afficher une croix */
|
|
void AfficherCroix(int x, int y, int croix) {
|
|
AfficherSprite(croix, x, y);
|
|
}
|
|
|
|
/* Redessiner une case */
|
|
void RedessinerCase(int caseX, int caseY, int largeur_case, int offset_x, int offset_y) {
|
|
int x = offset_x + caseX * largeur_case;
|
|
int y = offset_y + caseY * largeur_case;
|
|
|
|
ChoisirCouleurDessin(CouleurParComposante(255, 255, 255));
|
|
RemplirRectangle(x, y, largeur_case, largeur_case);
|
|
ChoisirCouleurDessin(CouleurParComposante(0, 0, 0));
|
|
DessinerRectangle(x, y, largeur_case, largeur_case);
|
|
}
|
|
|
|
void MenuGraphique(int *taille_grille, int *nombre_joueurs) {
|
|
int i;
|
|
couleur grisClair = CouleurParComposante(255, 255, 255);
|
|
couleur noir = CouleurParComposante(0, 0, 0);
|
|
couleur orange = CouleurParComposante(250, 143, 2);
|
|
couleur cyan = CouleurParComposante(2, 183, 219);
|
|
|
|
int pion_bleu, pion_orange, croix_bleu, croix_orange; /* Déclarer les variables pour les sprites*/
|
|
|
|
EffacerEcran(grisClair);
|
|
|
|
Bouton boutonsGrille[] = {
|
|
{150, 70, 70, 50, "3x3", noir}, {250, 70, 70, 50, "4x4", noir},
|
|
{350, 70, 70, 50, "5x5", noir}, {450, 70, 70, 50, "6x6", noir},
|
|
{550, 70, 70, 50, "7x7", noir}, {650, 70, 70, 50, "8x8", noir},
|
|
{750, 70, 70, 50, "9x9", noir}
|
|
};
|
|
|
|
Bouton bouton1J = {440, 240, 50, 50, "IA", cyan};
|
|
Bouton bouton2J = {520, 240, 50, 50, "2J", orange};
|
|
Bouton confirmer = {430, 400, 120, 50, "Confirmer?", noir};
|
|
|
|
EcrireTexte(300, 50, "Veuillez choisir la taille de la grille : ", 1);
|
|
|
|
for (i = 0; i < 7; i++) {
|
|
DessinerBouton(boutonsGrille[i]);
|
|
}
|
|
|
|
EcrireTexte(230, 200, "Voulez-vous demarrer une partie a un ou deux joueurs?", 1);
|
|
|
|
DessinerBouton(bouton1J);
|
|
DessinerBouton(bouton2J);
|
|
|
|
int choix_grille_precedent = -1;
|
|
int choix_mode_precedent = -1;
|
|
|
|
while (1) {
|
|
if (SourisCliquee()) {
|
|
SourisPosition();
|
|
int x = _X, y = _Y;
|
|
|
|
for (i = 0; i < 7; i++) {
|
|
if (EstClique(boutonsGrille[i], x, y)) {
|
|
*taille_grille = i + 3;
|
|
|
|
if (choix_grille_precedent != -1) {
|
|
Bouton bouton_precedent = boutonsGrille[choix_grille_precedent];
|
|
ChoisirCouleurDessin(grisClair);
|
|
RemplirRectangle(bouton_precedent.x, bouton_precedent.y, bouton_precedent.largeur, bouton_precedent.hauteur);
|
|
DessinerBouton(bouton_precedent);
|
|
}
|
|
|
|
ChoisirCouleurDessin(noir);
|
|
RemplirRectangle(boutonsGrille[i].x, boutonsGrille[i].y, boutonsGrille[i].largeur, boutonsGrille[i].hauteur);
|
|
DessinerBouton(boutonsGrille[i]);
|
|
choix_grille_precedent = i;
|
|
|
|
EcrireTexte(360, 330, "Taille de grille selectionnee", 1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (EstClique(bouton1J, x, y)) {
|
|
*nombre_joueurs = 1;
|
|
|
|
ChoisirCouleurDessin(grisClair);
|
|
RemplirRectangle(340, 350, 200, 40);
|
|
|
|
if (choix_mode_precedent == 2) {
|
|
ChoisirCouleurDessin(grisClair);
|
|
RemplirRectangle(bouton2J.x, bouton2J.y, bouton2J.largeur, bouton2J.hauteur);
|
|
DessinerBouton(bouton2J);
|
|
}
|
|
|
|
ChoisirCouleurDessin(cyan);
|
|
RemplirRectangle(bouton1J.x, bouton1J.y, bouton1J.largeur, bouton1J.hauteur);
|
|
DessinerBouton(bouton1J);
|
|
choix_mode_precedent = 1;
|
|
|
|
EcrireTexte(360, 370, "Mode 1 joueur selectionne", 1);
|
|
|
|
} else if (EstClique(bouton2J, x, y)) {
|
|
*nombre_joueurs = 2;
|
|
|
|
ChoisirCouleurDessin(grisClair);
|
|
RemplirRectangle(340, 350, 200, 40);
|
|
|
|
if (choix_mode_precedent == 1) {
|
|
ChoisirCouleurDessin(grisClair);
|
|
RemplirRectangle(bouton1J.x, bouton1J.y, bouton1J.largeur, bouton1J.hauteur);
|
|
DessinerBouton(bouton1J);
|
|
}
|
|
|
|
ChoisirCouleurDessin(orange);
|
|
RemplirRectangle(bouton2J.x, bouton2J.y, bouton2J.largeur, bouton2J.hauteur);
|
|
DessinerBouton(bouton2J);
|
|
choix_mode_precedent = 2;
|
|
|
|
EcrireTexte(360, 370, "Mode 2 joueur selectionne", 1);
|
|
}
|
|
|
|
if (*taille_grille > 0 && *nombre_joueurs > 0) {
|
|
DessinerBouton(confirmer);
|
|
if (EstClique(confirmer, x, y)) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/* Fonction pour réinitialiser la grille */
|
|
void ReinitialiserGrille(int grille[][9], int taille_grille) {
|
|
int i, j;
|
|
for (i = 0; i < taille_grille; i++) {
|
|
for (j = 0; j < taille_grille; j++) {
|
|
grille[i][j] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Menu de fin */
|
|
void MenuFin(int gagnant, int grille[][9], int taille_grille, int pion_bleu, int pion_orange,
|
|
int croix_bleu, int croix_orange) {
|
|
int x, y;
|
|
|
|
EffacerEcran(CouleurParComposante(255, 255, 255));
|
|
|
|
/* Affichage du message de fin */
|
|
if (gagnant == 1) {
|
|
ChoisirCouleurDessin(CouleurParComposante(2, 183, 219));
|
|
EcrireTexte(400, 300, "Le joueur bleu a gagne !", 1);
|
|
ChoisirCouleurDessin(CouleurParComposante(250, 143, 2));
|
|
EcrireTexte(400, 350, "Le joueur orange a perdu.", 1);
|
|
} else if (gagnant == 2) {
|
|
ChoisirCouleurDessin(CouleurParComposante(250, 143, 2));
|
|
EcrireTexte(400, 300, "Le joueur orange a gagne !", 1);
|
|
ChoisirCouleurDessin(CouleurParComposante(2, 183, 219));
|
|
EcrireTexte(400, 350, "Le joueur bleu a perdu.", 1);
|
|
}
|
|
|
|
/* Définition des boutons */
|
|
Bouton quitter = {430, 380, 120, 40, "Quitter ?"};
|
|
Bouton recommencer = {410, 460, 160, 40, "Recommencer ?"};
|
|
|
|
/* Dessiner les boutons */
|
|
DessinerBouton(quitter);
|
|
DessinerBouton(recommencer);
|
|
|
|
while (1) {
|
|
if (SourisCliquee()) {
|
|
SourisPosition();
|
|
x = _X;
|
|
y = _Y;
|
|
|
|
/* Vérifier si le clic est sur le bouton "Quitter" */
|
|
if (EstClique(quitter, x, y)) {
|
|
FermerGraphique();
|
|
return;
|
|
}
|
|
|
|
/* Vérifier si le clic est sur le bouton "Recommencer" */
|
|
else if (EstClique(recommencer, x, y)) {
|
|
int taille_grille = 0;
|
|
int nombre_joueurs = 0;
|
|
debutJeu(grille, taille_grille, nombre_joueurs, pion_bleu, pion_orange, croix_bleu, croix_orange);
|
|
/* Réinitialiser la grille */
|
|
ReinitialiserGrille(grille, taille_grille);
|
|
|
|
/* Relancer le jeu */
|
|
debutJeu(grille, taille_grille,nombre_joueurs, pion_bleu, pion_orange, croix_bleu, croix_orange);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Dessiner un bouton */
|
|
void DessinerBouton(Bouton bouton) {
|
|
ChoisirCouleurDessin(bouton.couleurTexte);
|
|
DessinerRectangle(bouton.x, bouton.y, bouton.largeur, bouton.hauteur);
|
|
EcrireTexte(bouton.x + 10, bouton.y + bouton.hauteur / 2 + 5, bouton.texte, 1);
|
|
}
|
|
|
|
/* Vérifier si un bouton a été cliqué */
|
|
int EstClique(Bouton bouton, int x, int y) {
|
|
return (x >= bouton.x && x <= bouton.x + bouton.largeur && y >= bouton.y && y <= bouton.y + bouton.hauteur);
|
|
}
|
|
|
|
/* Afficher la grille */
|
|
void AfficherGrille(int taille_grille, int largeur_case, int offset_x, int offset_y) {
|
|
int i, j;
|
|
|
|
for (i = 0; i < taille_grille; i++) {
|
|
for (j = 0; j < taille_grille; j++) {
|
|
int x = offset_x + j * largeur_case;
|
|
int y = offset_y + i * largeur_case;
|
|
DessinerRectangle(x, y, largeur_case, largeur_case);
|
|
}
|
|
}
|
|
}
|