#include "partie.h" /* On inclut stdio au cas où */ #include #include #include #include void initialiser_plateau(int grille[NB_LIGNES][NB_COLS]){ int i, j; int compteur = 1; for (i = 0; i < NB_LIGNES; i++){ for(j = 0; j < NB_COLS; j++){ grille[i][j] = compteur; compteur++; } } /*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/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; 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 bords */ 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; 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); } } 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; }