#include "partie.h" #include #include #include #include void initialiser_plateau(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_colonne){ int i, j; int compteur = 1; grille[0][0] = 0; for (i = 0; i < nb_ligne; i++){ for(j = 0; j < nb_colonne; j++){ /*On saute la 1er case*/ if (i == 0 && j== 0)continue; grille[i][j] = compteur; compteur++; } } } int deplacer(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_colonne,int touche) { int i, j; int vide_i = -1, vide_j = -1; int cible_i, cible_j; int temp; /* Trouver la case vide */ for(i = 0; i < nb_ligne; i++) { for(j = 0; j< nb_colonne; j++) { if (grille[i][j] == 0) { /*vide i/j est l'adresse du trou*/ vide_i = i; vide_j = j; } } } /*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 == XK_Left) cible_j = vide_j - 1; else if(touche == XK_Right) cible_j = vide_j + 1; else if(touche == XK_Up) cible_i = vide_i - 1; else if(touche == XK_Down) cible_i = vide_i + 1; else { return 0; } /* Vérifier les bords */ if (cible_i < 0 || cible_i >= nb_ligne || cible_j < 0 || cible_j >= nb_colonne) { return 0; } /* Echanger */ temp = grille[cible_i][cible_j]; grille[cible_i][cible_j] = 0; grille[vide_i][vide_j] = temp; return 1; } void melanger_plateau(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_colonne) { 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; 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,nb_ligne,nb_colonne,touche_aleatoire); } } int verifier_victoire(int grille[MAX_TAILLE][MAX_TAILLE],int nb_ligne,int nb_colonne){ int i,j,compteur = 1; if(grille[0][0] != 0)return 0; for(i = 0; i < nb_ligne; i++) { for(j = 0; j< nb_colonne; j++) { if (i == 0 && j == 0)continue; if(grille[i][j] != compteur)return 0; compteur++; } } return 1; }