# include # include # include 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); } } } }