J'ai ajouté un ércan de fin quand le taquin est complété , mais il y a d'autres chose a réglé comme le fait que le nombre de ligne et cologne était des constante ,la case vide doit être en haut a gauche et pas en bas a droite , et rajouter des déplacements avec la souris et pas juste les fléches

This commit is contained in:
2025-12-02 23:05:23 +01:00
parent 781217559e
commit 7325bc7500
6 changed files with 79 additions and 41 deletions
+36 -20
View File
@@ -3,11 +3,8 @@
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* 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 <graph.h>
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;
}