diff --git a/main.c b/main.c index a71595d..4a48f22 100644 --- a/main.c +++ b/main.c @@ -1,24 +1,39 @@ #include +#include #include "affichage.h" #include #include "config.h" #include "partie.h" + int main(void){ - int grille[NB_LIGNES][NB_COLS],touche; - + int grille[NB_LIGNES][NB_COLS], touche; + init_affichage(); + initialiser_plateau(grille); + + melanger_plateau(grille); + afficher_plateau(grille); while(1){ if (ToucheEnAttente()){ touche = Touche(); - if (touche == XK_q)break; + /* Pour quitter cliquer sur q minuscule ou Escape (27) */ + if (touche == 'q' || touche == 27) break; + + /* Debug : affiche le code touche */ + printf("Touche appuyée : %d\n", touche); + + /* Déplacement et mise a jour de l'affichage */ + deplacer(grille, touche); + afficher_plateau(grille); } } + fermer_affichage(); - return 0; + return EXIT_SUCCESS; } diff --git a/partie.c b/partie.c index 76d4528..5f0d30c 100644 --- a/partie.c +++ b/partie.c @@ -1,4 +1,14 @@ #include "partie.h" +/* On inclut stdio au cas où */ +#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 + void initialiser_plateau(int grille[NB_LIGNES][NB_COLS]){ int i, j; int compteur = 1; @@ -12,3 +22,67 @@ void initialiser_plateau(int grille[NB_LIGNES][NB_COLS]){ /*On laisse la dernière case du tableu vide pour le taquin*/ grille[NB_LIGNES - 1 ][NB_COLS - 1] = 0; } + +void deplacer(int grille[NB_LIGNES][NB_COLS], int touche) { + int i, j; + int vide_i, vide_j; + int cible_i, cible_j; + int temp; + + /* Trouver la case vide */ + vide_i = -1; + for(i = 0; i < NB_LIGNES; i++) { + for(j = 0; j< NB_COLS; j++) { + if (grille[i][j] == 0) { + vide_i = i; + vide_j = j; + } + } + } + +/* INiitialisation cible */ +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; + +/* Vérifier les murs */ +if (cible_i < 0 || cible_i >= NB_LIGNES || + cible_j < 0 || cible_j >= NB_COLS) { + return; + } + +/* Echanger */ +temp = grille[cible_i][cible_j]; +grille[cible_i][cible_j] = 0; +grille[vide_i][vide_j] = temp; +} + +void melanger_plateau(int grille[NB_LIGNES][NB_COLS]) { + int i; + int touche_aleatoire; + int direction; + + srand(time(NULL)); + + /* On fais 500 mouvements aléatoires */ + for (i = 0; i < 500; i++) { + /* 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 */ + deplacer(grille, touche_aleatoire); + } + printf("---DEBUG: Fin du mélange ! ---\n"); +} diff --git a/partie.h b/partie.h index 0ee530b..911de9b 100644 --- a/partie.h +++ b/partie.h @@ -4,6 +4,9 @@ #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 melanger_plateau(int grille[NB_LIGNES][NB_COLS]); #endif diff --git a/taquin b/taquin new file mode 100755 index 0000000..9e8d476 Binary files /dev/null and b/taquin differ