/*

   _                                .-.   
  :_;                               : :   
  .-. .--. .-..-. .--. .-..-..--.   : `-. 
  : :' .; :: :; :' '_.': :; :: ..'_ : .. :
  : :`.__.'`.__.'`.__.'`.__.':_; :_;:_;:_;
.-. :                                     
`._.'                                     


FICHIER	: joueur.h
DATE	: Fevrier 2003
AUTEUR	: Aymeric
EMAIL	: Aymeric.Demartin@iup.univ-avignon.fr
GROUPE	: IUP1 GMI Avignon - Groupe 5 (RT)

*/



#ifndef JOUEUR_H
#define JOUEUR_H

#include "global.h"
#include "labyrinthe.h"

class Joueur {
	private :
		int identifiant;
		int score;
		position position_i;
		position position_c;
		int nb_deplacement;
	public :
		Joueur();		
                Joueur(int, int);
                void setId(int);
                void setScore(int);
                void setPosition_i(int, int);
                void setPosition_c(int, int);
                void setDeplacement(int);
                int retourneId() const;
                int retourneScore() const;
                int retournePosition_c_x() const;
                int retournePosition_c_y() const;
                int retournePosition_i_x() const;
                int retournePosition_i_y() const;
                int retourneNbdeplacement() const;
                void incNbdeplacement();
                void incScore();
		void affiche_info_joueur(int, int, int, int);
                void calculePositionInitiale(Labyrinthe&, int);
};




/*-------------
  CONSTRUCTEURS
  -------------*/
Joueur::Joueur() {
	identifiant=0;
	score=0;
	position_i.x=0;
	position_i.y=0;
	position_c.x=0;
	position_c.y=0;
	nb_deplacement=0;
}
Joueur::Joueur(int i, int s) {
	identifiant=i;
	score=s;
}


/*----------
  ACCESSEURS
  ----------*/

// enregistre une valeur pour identifiant
void Joueur::setId(int id) {
	identifiant=id;
}

// enregistre une valeur pour le score
void Joueur::setScore(int sc) {
	score=sc;
}

// enresgitre une valeur pour la position initiale
void Joueur::setPosition_i(int px, int py) {
	position_i.x=px;
	position_i.y=py;
}

// enregistre une valeur pour la position courante
void Joueur::setPosition_c(int px, int py) {
	position_c.x=px;
	position_c.y=py;
}

// enregistre le nombre de deplacement
void Joueur::setDeplacement(int n) {
	nb_deplacement=n;
}

// donne l'identifiant du joueur
int Joueur::retourneId() const {
	return (identifiant);
}

// donne le score du joueur
int Joueur::retourneScore() const {
	return (score);
}

// donne la position x courante du joueur
int Joueur::retournePosition_c_x() const {
	return (position_c.x);
}

// donne la position y courante du joueur
int Joueur::retournePosition_c_y() const {
	return (position_c.y);
}

// donne la position x initiale du joueur
int Joueur::retournePosition_i_x() const {
	return (position_i.x);
}

// donne la position y initiale du joueur
int Joueur::retournePosition_i_y() const {
	return (position_i.y);
}

// donne le nombre de depacement pour le joueur
int Joueur::retourneNbdeplacement() const {
	return (nb_deplacement);
}

// incremente le nombre de deplacement
void Joueur::incNbdeplacement() {
	nb_deplacement++;
}

// incremente le score
void Joueur::incScore() {
	score++;
}


/*---------
  FONCTIONS
  ---------*/

// cette fonction permet l'affichage de plusieurs informations sur le joueur
void Joueur::affiche_info_joueur(int x, int y, int pn, int pt) {
	move(x,y);
	printw("Identifiant = %d",identifiant);
	printw("\nScore = %d",score);
	printw("\nPosition initiale (%d,%d)",position_i.x,position_i.y);
	printw("\nPosition courante (%d,%d)",position_c.x,position_c.y);
	printw("\nNombre de deplacement = %d",nb_deplacement);
	printw("\nPartie numero %d sur %d",pn,pt);
}

// cette fonction permet de calculer la position initiale des joueurs
void Joueur::calculePositionInitiale(Labyrinthe &lab, int id)
{
	int taille=lab.RetourneTaille();

	if (id == 1)
	{
		if (!(lab.CaseVide(1,1))) position_i=lab.PlusProcheLibre(1,1);
		else
		{
			position_i.x=1;
			position_i.y=1;
		}
	}
	else if (id == 2)
	{
		if (!(lab.CaseVide(1,taille-2))) position_i=lab.PlusProcheLibre(1,taille-2);
		else
		{
			position_i.x=1;
			position_i.y=taille-2;
		}
	}
	else if (id == 3)
	{
		if (!(lab.CaseVide(taille-2,1))) position_i=lab.PlusProcheLibre(taille-2,1);
		else
		{
			position_i.x=taille-2;
			position_i.y=1;
		}
	}
	else if (id == 4)
	{
		if (!(lab.CaseVide(taille-2,taille-2))) position_i=lab.PlusProcheLibre(taille-2,taille-2);
		else
		{
			position_i.x=taille-2;
			position_i.y=taille-2;
		}
	}
}

#endif
