
#include <iostream>
#include "Thebault-Buchele-plateau.h"
using namespace std;

int main (int argc, char * const argv[]) {
    // insert code here...
	
	int choix = -1;
	while(choix != 0 && choix != 1)
	{
		if(choix != 0)cout<<endl<<"Qui de vous deux débutera le combat :"<<endl<<"0 : Humain"<<endl<<"1 : Ordinateur"<<endl;
		cin>>choix;
	}
	
	int longueur = 0;
	int largeur = 0;
	int prof= 0;
	MinMax::profondeurDonnee = 3;
	while((largeur == 0 || longueur == 0)||(prof > longueur && prof > largeur))
	{
		if(prof > longueur && prof > largeur)cout<<endl<<"Le nombre de marque ne doit pas etre superieur à la hauteur et à la longueur à la fois"<<endl;
		cout<<endl<<"Taille du tableau"<<endl<<"Longueur : ";cin>>longueur;cout<<endl<<"Hauteur : ";cin>>largeur;cout<<endl<<"nombre de marques à alignées : ";cin>>prof;
		cout<<endl;
		cout<<"Difficulté du jeu (profondeur de l'arbre) : ";cin>>MinMax::profondeurDonnee;cout<<endl;
	}
	int technique = -1;
	while(technique  !=1 && technique !=0)
	{
		cout<<"Quel technique de jeu ?"<<endl<<"0 MinMax Traditionnel"<<endl<<"1 Elagage"<<endl;
		cin>>technique;
	}
	
	plateau *jeu;
	jeu = plateau::getInstance(largeur,longueur,prof);
	//jeu->jouerMachine();
	//jeu->jouerElagage();
	/*jeu->cellule[0][0]->setAvailable_case(2);
	jeu->cellule[2][0]->setAvailable_case(2);
	jeu->cellule[2][2]->setAvailable_case(2);
	jeu->cellule[1][1]->setAvailable_case(1);
	jeu->cellule[0][1]->setAvailable_case(1);float test = jeu->heuristique();cout<<test ;
	//jeu->cellule[3][1]->setAvailable_case(2);
	/*jeu->cellule[4][1]->setAvailable_case(1);
	jeu->cellule[0][3]->setAvailable_case(1);
	jeu->cellule[3][2]->setAvailable_case(1);
	jeu->cellule[4][2]->setAvailable_case(1);
	jeu->cellule[3][0]->setAvailable_case(1);
	//jeu->cellule[plateau::getN()-1][plateau::getM() - 1]->setAvailable_case(1);*/
	/*int o = 0;
	o = jeu->victory(jeu->cellule[3][1]);
	cout<<"o est egal a "<<o<<endl;
	jeu->cellule[0][0]->setAvailable_case(2);
	jeu->cellule[1][2]->setAvailable_case(1);
	jeu->affichage();
	cout<<"le cout est "<<jeu->heuristique()<<endl;*/
	
	
	int notendJoueur = 0;
	int notendOrdi = 0;
	while(notendOrdi == 0 && notendJoueur == 0 && plateau::getLibre()>0)
	{
		jeu->affichage();
		if(choix == 0)
		{	
			if(technique == 0)
			{
				notendJoueur = jeu->jouerHomme();
				if(notendJoueur == 0 && plateau::getLibre()>0)notendOrdi = jeu->jouerMachine();
			}
			else {
				notendJoueur = jeu->jouerHomme();
				if(notendJoueur == 0 && plateau::getLibre()>0)notendOrdi = jeu->jouerElagage();
			}

		}
		if(choix == 1)
		{
			if(technique == 0)
			{
				notendOrdi = jeu->jouerMachine();
				if(notendOrdi == 0 && plateau::getLibre()>0)notendJoueur = jeu->jouerHomme();
			}
			else {
				notendOrdi = jeu->jouerElagage();
				if(notendOrdi == 0 && plateau::getLibre()>0)notendJoueur = jeu->jouerHomme();
			}

		}
	}
	
	delete plateau::getInstance();
    return 0;
}
