#ifndef CJEU_H
#define CJEU_H

class CJeu
{
public:
	CCube CubeMatrice[MAX_X][MAX_Y][MAX_Z+10];			// Matrice de dimension trois pour la
														// vérification de présence de blocs
	std::list< CCube > CubeADessiner;					// Listes des cubes à dessiner
	void (CBloc::*Createur[NBBLOCDIFFERENT])(void);		// Tableau de fonctions qui créent un bloc
	void (CBloc::*Colorateur[NBCOULDIFFERENTE])(void);	// Tableua de fonctions qui colorent un bloc
	CBloc Bloc;											// Bloc de jeu
	CBloc BlocGuide;									// Bloc de guide
	CBloc BlocPreview;									// Bloc de previe

	std::vector< int > Indices;							// Indices des plans à enlever s'il y a lieu

	short Niveau;										// Niveau auquel le joueur est rendu
	int NombreDePlans;									// Nombre de plans que le joueur a fait

	// Constructeur
	CJeu();
	// Vérifie si le bloc peut être là
	bool PeutEtreLa(CBloc& LeBloc);
	// Créer un nouveau bloc (en updatant le preview bien sûr
	void CreeBloc(void);
	// Créer un nouveau bloc guide
	void CreeBlocGuide(void);
	// Ajoute le bloc (qui est en bas) à la matrice 3D et à la liste de blocs à dessinger
	void AjouterBloc(CBloc& LeBloc);
	// Obtiens le nombre de plans à enlever s'il y a lieu et changer les fontions en conséquence
	void GetPlans(void);
	// Enlève les plans à enlever
	void EnlevePlans(void);
	// Fait l'animation pour que les blocs non enlevées soit descendus progressivement
	void DescendPlans(void);
	
	
	

	// Initialisation du graphisme
	void Init(void);
	void SetGameFunc(void);
	void SetDropFunc(void);

	// Dessin de la partie
	void GameDraw(void);
	
};

extern CJeu gJeu;

inline void GameDisplay(void)
{
	gJeu.GameDraw();
}

void DropDisplay(void);

#endif
