#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>

struct config {
    int hauteur;
    int largeur;
    bool** tablette;
    int joueur;
    int score;
    int coup_a_jouer_i;
    int coup_a_jouer_j;

};
typedef struct config config;

void affiche_tab(bool** tab,int n, int m){
    for (int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(tab[i][j])
                printf("|*|");
        }
        printf("\n");
    }

}
bool coup_possible(config* c, int i, int j){
    
}
void coup (config* c, int i, int j,bool** res){
    //on suppose avoir utilisé la fonction precedente et que le coup est possible
       
    
  
    
}

bool termine(config* c){
    int n=c->hauteur;
    int m =c->largeur;
    bool res = true;
    //à completer
    return res;
}

void strat_j1(config* c){
 
    if (termine(c)){
        if(c->joueur==1)
            c->score=-1;
        else
            c->score=1;
    }
    else if(c->joueur==1){
        
        int maximum = -1;
        int n = c->hauteur;
        int p = c->largeur;
        bool** new_tab=malloc(n*sizeof(bool*));
        for (int u=0;u<n;u++){
            new_tab[u]=malloc(p*sizeof(bool));
        }
        for(int i=0;i<c->hauteur;i++){
            for(int j=0;j<c->largeur;j++){
                if ((i!=0 || j!=0)&&coup_possible(c,i,j)){
                   
                coup(c,i,j,new_tab);
                
                config* new_config = malloc(sizeof(config));
                //new_config-> largeur =
                //new_config->hauteur  =
                //new_config->tablette  = 
                //new_config-> joueur  = 
                //new_config-> score = 
                
                // completer cette ligne
                if (new_config->score==1){
                    c->coup_a_jouer_i=i;
                    c->coup_a_jouer_j=j;
                    maximum=1;
                    c->score=1;

                }
            }
        }
        }
        if(maximum==-1){
            //completer
        }

    }
    else{

        //a completer
    }
   
}


void affiche_strat(config* c){

    affiche_tab(c->tablette,c->hauteur,c->largeur);
    strat_j1(c);
    printf("jouer : %d,%d\n",c->coup_a_jouer_i,c->coup_a_jouer_j);
    coup(c,c->coup_a_jouer_i,c->coup_a_jouer_j,c->tablette);
    affiche_tab(c->tablette,c->hauteur,c->largeur);
}


void jouer(config* c){
    int i,j;
    affiche_strat(c);
    while(!termine(c)){
        
        printf("Quel carre veux tu jouer \n");
        scanf("%d %d",&i,&j);
        coup(c,i,j,c->tablette);
        affiche_strat(c);
    }
    printf("c'est perdu!");
}

int main(){
    config* c = malloc(sizeof(config));
    c->hauteur=4;
    c->largeur=3;
    bool** tablette = malloc(c->hauteur*sizeof(bool*));
    for (int u=0;u<c->hauteur;u++){
        tablette[u]=malloc(c->largeur*sizeof(bool));
        for (int y = 0;y<c->largeur;y++){
            tablette[u][y]=true;
        }
    }
    c->tablette = tablette;
    c->joueur=1;
    c->score=0;

   jouer(c);


}
