diff --git a/#config.h# b/#config.h# new file mode 100644 index 0000000..1e41a15 --- /dev/null +++ b/#config.h# @@ -0,0 +1,9 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#define NB_LIGNES 4 +#define NB_COLS + +#define TAILLE_CASE 100 + +#endif diff --git a/config.h b/config.h index 99128d8..e05d241 100644 --- a/config.h +++ b/config.h @@ -1,9 +1,7 @@ #ifndef CONFIG_H #define CONFIG_H - -#define NB_LIGNES 4 -#define NB_COLS 4 - +/*La grille doit être en 3 et 8 */ +#define MAX_TAILLE 8 #define TAILLE_CASE 100 #endif diff --git a/main.c b/main.c index b7b7a91..dc642d4 100644 --- a/main.c +++ b/main.c @@ -8,7 +8,7 @@ int main(void){ int grille[NB_LIGNES][NB_COLS], touche; char *nom_image = NULL; - int choix_fait = 0; + int choix_fait = 0,jeu_fini = 0; init_affichage(); @@ -26,21 +26,20 @@ int main(void){ if(ToucheEnAttente()) { touche = Touche(); - printf("Touche reçue : %d (Caractère : %c)\n", touche, (char)touche); - if(touche == '1' || touche == 38) { + if(touche == XK_1 || touche == XK_KP_1) { nom_image = "image1.png"; choix_fait = 1; } - else if(touche == '2' || touche == 233) { + else if(touche == XK_2 || touche == XK_KP_2) { nom_image = "image2.png"; choix_fait = 2; } - else if(touche == '3' || touche == 34) { + else if(touche == XK_3 || touche == XK_KP_3) { nom_image = "image3.png"; choix_fait = 3; } - else if(touche == 'q' || touche == 27) { + else if(touche == XK_q || touche == XK_Q) { fermer_affichage(); return EXIT_SUCCESS; } @@ -55,23 +54,38 @@ int main(void){ afficher_plateau(grille); - while(1){ + while(jeu_fini == 0){ if (ToucheEnAttente()){ touche = Touche(); - /* Pour quitter cliquer sur q minuscule ou Escape (27) */ - if (touche == 'q' || touche == 27) break; + /* Pour quitter on clique sur q */ + if (touche == XK_q || touche == XK_Q) break; - /* Debug : affiche le code touche */ - printf("Touche appuyée : %d\n", touche); - /* Déplacement et mise a jour de l'affichage */ + /* Déplacement +on affiche la nouvelle grille */ deplacer(grille, touche); afficher_plateau(grille); + /*On vérifie si on a gagner */ + if(verifier_victoire(grille) == 1 ){ + jeu_fini = 1; + } } - + } + + if (jeu_fini == 1){ + ChoisirCouleurDessin(CouleurParNom("white")); + RemplirRectangle(50,150,300,100); + + ChoisirCouleurDessin(CouleurParNom("red")); + EcrireTexte(60,200,"Bravo",2); + EcrireTexte(60,230,"Appuyer pour quitter...",1); + + Touche(); + } + + fermer_affichage(); return EXIT_SUCCESS; diff --git a/partie.c b/partie.c index 5f0d30c..c3a1b47 100644 --- a/partie.c +++ b/partie.c @@ -3,11 +3,8 @@ #include #include #include -/* Codes des touches avec les fleches (standards X11) */ -#define FL_GAUCHE 65361 -#define FL_HAUT 65362 -#define FL_DROITE 65363 -#define FL_BAS 65364 +#include + void initialiser_plateau(int grille[NB_LIGNES][NB_COLS]){ int i, j; @@ -34,23 +31,24 @@ void deplacer(int grille[NB_LIGNES][NB_COLS], int touche) { for(i = 0; i < NB_LIGNES; i++) { for(j = 0; j< NB_COLS; j++) { if (grille[i][j] == 0) { + /*vide i/j est l'adresse du trou*/ vide_i = i; vide_j = j; } } } -/* INiitialisation cible */ +/*cible i/j c'est l'adress de la case voisine qu'on veut faire glisser */ cible_i = vide_i; cible_j = vide_j; /* Calculer la cible */ -if(touche == FL_GAUCHE) cible_j = vide_j + 1; -if(touche == FL_DROITE) cible_j = vide_j - 1; -if(touche == FL_HAUT) cible_i = vide_i + 1; -if(touche == FL_BAS) cible_i = vide_i - 1; +if(touche == XK_Left) cible_j = vide_j - 1; +if(touche == XK_Right) cible_j = vide_j + 1; +if(touche == XK_Up) cible_i = vide_i - 1; +if(touche == XK_Down) cible_i = vide_i + 1; -/* Vérifier les murs */ +/* Vérifier les bords */ if (cible_i < 0 || cible_i >= NB_LIGNES || cible_j < 0 || cible_j >= NB_COLS) { return; @@ -74,15 +72,33 @@ void melanger_plateau(int grille[NB_LIGNES][NB_COLS]) { /* tirage d'un nombre entre 0 et 3 */ direction = rand() % 4; - /* On convertit ce nombre en code de touche fléchée */ - /* Rappel : FL_GAUCHE vaut 65361 donc 65361 + 0, 1, 2 ou 3 donne les 4 flèches */ - touche_aleatoire = FL_GAUCHE + direction; - - if (i < 5) { - printf("DEBUG: Coup %d, Direction %d, Touche %d\n", i, direction, touche_aleatoire); - } - /* On joue le coup */ + if (direction == 0)touche_aleatoire = XK_Left; + else if (direction == 1)touche_aleatoire = XK_Up; + else if (direction == 2)touche_aleatoire = XK_Right; + else touche_aleatoire = XK_Down; deplacer(grille, touche_aleatoire); } - printf("---DEBUG: Fin du mélange ! ---\n"); + +} + +int verifier_victoire(int grille[NB_LIGNES][NB_COLS]){ + int i,j,compteur = 1; + for(i = 0; i < NB_LIGNES; i++) { + for(j = 0; j< NB_COLS; j++) { + /*La dernière case en bas a droite doit être vide */ + if (i == NB_LIGNES - 1 && j == NB_COLS - 1){ + if(grille[i][j] != 0){ + return 0; + } + } + else { + /*les autres cases doivent être dans l'orde*/ + if(grille[i][j] != compteur){ + return 0; + } + compteur++; + } + } + } + return 1; } diff --git a/partie.h b/partie.h index 911de9b..88e87dc 100644 --- a/partie.h +++ b/partie.h @@ -3,10 +3,11 @@ #include "config.h" -void initialiser_plateau(int grille[NB_LIGNES][NB_COLS]); -/*Nouvelle fonction pour gérer le déplacment */ -void deplacer(int grille[NB_LIGNES][NB_COLS], int touche); +void initialiser_plateau(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_cologne); +void deplacer(int grille[MAX_TAILLE][MAX_TAILLE], int touche); +void deplacer_souris(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_cologne,int clic_x,int clic_y); +void melanger_plateau(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_cologne); -void melanger_plateau(int grille[NB_LIGNES][NB_COLS]); +int verifier_victoire(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_cologne); #endif diff --git a/taquin b/taquin deleted file mode 100755 index 3b87875..0000000 Binary files a/taquin and /dev/null differ