#include <stdlib.h>
#include <graph.h>
#include <string.h>
#include <time.h>
#include <stdio.h>

int** CreerGrille(int* tab, int nbligne, int nbcolonne) {
    /*Fonction qui permet de mélanger les cartes de façon aléatoire et les stocker dans un tableau 2D
    Prend en argument un tableau, le nombre de ligne et colonne (nbligne*nbcolonne=longeur du tableau)
    Renvoie un tableau 2D*/
    srand(time(NULL));
    int** grille = calloc(nbligne, sizeof(int*));
    for (int c = 0; c < nbcolonne; c++) {
      grille[c] = calloc(nbcolonne, sizeof(int));
    }
    int i;
    int image;
    int ligne;
    int colonne;
    int taille =(nbcolonne*nbligne)-1;
    for (ligne=0;ligne<nbligne;ligne++) {
        for (colonne=0;colonne<nbcolonne;colonne++) {
            if (taille>=1) {
                image=rand() % taille;
            }
            else {
                image=0;
            }
            grille[ligne][colonne]=tab[image];
            for (i=image;i<taille;i++) {
                tab[i]=tab[i+1];
            }
            taille--;
        }
    }
    return grille;
}

void CacherGrille(int** grille, int difficulte) {
    /*Fonction qui dessine une grille de cartes de dos*/
    int ligne;
    int colonne;
    int sprite;
    if (difficulte==1) {
        sprite=ChargerSprite("./images/wood2.png");
        for (ligne=0;ligne<4;ligne++) {
            for (colonne=0;colonne<4;colonne++) {
                if (grille[ligne][colonne]!=0) {
                    AfficherSprite(sprite,422+(124*colonne),152+(124*ligne));
                }
            }
        }
    }
    else if (difficulte==2) {
        sprite=ChargerSprite("./images/wood2.png");
        for (ligne=0;ligne<6;ligne++) {
            for (colonne=0;colonne<6;colonne++) {
                if (grille[ligne][colonne]!=0) {
                    AfficherSprite(sprite,308+(114*colonne),38+(114*ligne));
                }
            }
        }
    }
}

void AfficherGrille(int** grille, int difficulte) {
    /*Fonction qui dévoile tous les cartes, utile en mode tricheur*/
    int ligne;
    int colonne;
    int image;
    int sprite;
    char str[50];
    AfficherSprite(sprite,380,110);
    if (difficulte==1) {
        for (ligne=0;ligne<4;ligne++) {
            for (colonne=0;colonne<4;colonne++) {
                if (grille[ligne][colonne]!=0){
                    sprintf(str,"./images/%i.png", grille[ligne][colonne]);
                    sprite=ChargerSprite(str);
                    AfficherSprite(sprite,432+(124*colonne),162+(124*ligne));
                    LibererSprite(sprite);
                }
            }
        }
    }
    else if (difficulte==2) {
        for (ligne=0;ligne<6;ligne++) {
            for (colonne=0;colonne<6;colonne++) {
                if (grille[ligne][colonne]!=0) {
                    sprintf(str,"./images/%i.png", grille[ligne][colonne]);
                    sprite=ChargerSprite(str);
                    AfficherSprite(sprite,308+(114*colonne),38+(114*ligne));
                    LibererSprite(sprite);
                }
            }
        }
    }
}

int** ChargerFacile() {
    /*Afficher la fenêtre de jeu facile*/
    int sprite;
    ChargerImageFond("./images/japanbg.png");
    sprite=ChargerSprite("./images/wood3.png");
    AfficherSprite(sprite,380,110);
    LibererSprite(sprite);
    int i;
    int f;
    int cpt=1;
    char str[50];
    int tab[16];
    int** grille;
    for (i=0; i<16; i=i+2) {
        tab[i]=cpt;
        tab[i+1]=cpt;
        cpt+=1;
    }
    grille=CreerGrille(tab,4,4);
    CacherGrille(grille, 1);
    return grille;
}

int** ChargerMoyen() {
    /*Afficher la fenêtre de jeu moyen*/
    int sprite;
    ChargerImageFond("./images/japanbg3.png");
    sprite=ChargerSprite("./images/wood4.png");
    AfficherSprite(sprite,265,10);
    LibererSprite(sprite);
    int i;
    int f;
    int cpt=1;
    char str[50];
    int tab[36];
    int** grille;
    for (i=0; i<36; i=i+2) {
        tab[i]=cpt;
        tab[i+1]=cpt;
        cpt+=1;
    }
    grille=CreerGrille(tab,6,6);
    CacherGrille(grille, 2);
    return grille;
}
