Пример #1
0
Coordonnees grille::getPos(Coordonnees _pos, int i)
{
	int refX;
	int refY;

	switch(i)
	{
	case 1:
		refX = 5;
		refY = 5;
		break;
	case 2:
		refX = 20;
		refY = 20;
		break;
	case 3:
		refX = 30;
		refY = 30;
		break;
	case 4:
		refX = 100;
		refY = 50;
	}

	int tmpX = refX;
	int tmpY = refY;
	
	while( _pos.getX() > tmpX + refX ) tmpX = tmpX + (refX*2);
	while( _pos.getY() > tmpY + refY ) tmpY = tmpY + (refY*2);

	return Coordonnees(tmpX,tmpY);
}
Пример #2
0
void Canon::rotate(Coordonnees posSouris){
	const float Pi = 3.141592654f;

	float ab = std::abs(this->Sprite.GetPosition().x - posSouris.getX());
	float cb = std::abs(this->Sprite.GetPosition().y - posSouris.getY());
	float ac = std::sqrt(ab*ab + cb*cb);

	float angle = std::acos( ( ab*ab + ac*ac - cb*cb ) / ( 2*ab*ac ) );
	angle = angle / Pi * 180;

	if(posSouris.getX() < this->Sprite.GetPosition().x){
		if(posSouris.getY() < this->Sprite.GetPosition().y){
			//Haut Gauche
			this->Sprite.SetRotation(180-angle);
		}else{
			//Bas Gauche
			this->Sprite.SetRotation(180+angle);
		}
	}else{
		if(posSouris.getY() < this->Sprite.GetPosition().y){
			//Haut Droite
			this->Sprite.SetRotation(angle);
		}else{
			//Bas Droite
			this->Sprite.SetRotation(-angle);
		}
	}
}
Пример #3
0
void grille::del(Coordonnees _pos)
{
	std::map<Coordonnees, Objet*>::iterator it = this->_Grille.find(_pos);
	
	if(it != this->_Grille.end()) this->_Grille.erase(it);

	if(this->listeCases[(_pos.getX()-5)/10][(_pos.getY()-5)/10] == 1) this->listeCases[(_pos.getX()-5)/10][(_pos.getY()-5)/10] = 0;
}
Пример #4
0
void Plateau::marquer(Coordonnees c, Joueur* j){

    if (Getcase(c)==0 /*&& c est dans le plateau*/){
        plateau[c.Getlig()][c.Getcol()] = j->GetnumeroTour();
    }
    else
    {
        cout << "case invalide echec du tour" << endl;
    }
}
Пример #5
0
Plateau::Plateau(string chemin)
{
    //chargement du fichier contenant le plateau
    ifstream source (chemin.c_str());

    int col=-1, lig=0;
    int tmp;

    // initialisation variables du plateau
    source >> tmp;
    SetnbColonnes(tmp);
    source >> tmp;
    SetnbLignes(tmp);
    source >> tmp;
    SetnbAlign(tmp);

    // reservation du plateau
    plateau = new int* [nbLignes];
    int i;
    for (i=0; i<nbLignes; i++)
        plateau[i] = new int [nbColonnes];

    // initialisation du plateau
    for (int i=0; i < nbLignes; i++)
        for (int j=0; j < nbColonnes; j++)
            plateau[i][j] = 0;

    // creation des masques du plateau
    creerMasques();

    // recuperation des valeurs depuis le fichier
    Coordonnees c;
    bool continuer=true;
    while(continuer){
        source >> tmp;
        col++;
        if (col==nbColonnes-1 && lig==nbLignes-1)
            continuer=false;

        if(col==nbColonnes){
            col=0;
            lig++;
        }
        c.Setcol(col);
        c.Setlig(lig);

//        cout << c << " " << tmp << endl;

        Setcase(c, tmp);
    }
}
Пример #6
0
Canon::Canon(Coordonnees pos){
	this->Type = 4;
	this->ColorRed = false;

	imageManager *imageMur	= imageManager::getInstance();
	grille *Grille			= grille::getInstance();

	Grille->add(pos, this, 1);

	this->Sprite.SetImage(*imageMur->GetImage("images/canon.psd"));

	this->Sprite.SetCenter(5,5);
	this->Sprite.SetPosition(pos.getX(),pos.getY());
}
Пример #7
0
bool  grille::add(Coordonnees _pos, Objet *_obj, int overType)
{
	if(!overType) _pos = this->getPos(_pos,_obj->getType());
	else		  _pos = this->getPos(_pos,overType);
	
	if(this->isFree(_pos,0))
	{
		this->_Grille[_pos] = _obj;
		if(_obj->getType() == 1) this->listeCases[(_pos.getX()-5)/10][(_pos.getY()-5)/10] = 1;
		return true;
	}
	
	return false;
}
Пример #8
0
void Image::print(Image * buffer, Coordonnees where, Coordonnees from)
{
    SDL_Rect ou, dou;
    ou.x = where.x();
    ou.y = where.y();
    ou.w = where.w();
    ou.h = where.h();
    dou.x = from.x();
    dou.y = from.y();
    dou.w = from.w();
    dou.h = from.h();
    SDL_BlitSurface(image, &dou, buffer->image, &ou);
}
Пример #9
0
void Image::print(Coordonnees where, Coordonnees from)
{
    SDL_Rect ou, dou;
    ou.x = where.x();
    ou.y = where.y();
    ou.w = where.w();
    ou.h = where.h();
    dou.x = from.x();
    dou.y = from.y();
    dou.w = from.w();
    dou.h = from.h();
    SDL_BlitSurface(image, &dou, SDL_GetVideoSurface(), &ou);
}
Пример #10
0
void BlockMur::SetPosition(int x, int y)
{
	int tmpX = x; 
	int tmpY = y;
	Coordonnees pos;

	grille *Grille = grille::getInstance();
	carte *Carte	= carte::getInstance();

	// deplace les mur en fonction de la position precedente du mur 1
	for(int i=0;i<this->_nbMur;i++)
	{
		if(i > 0)
		{
			tmpX = this->_Mur[i]->getSprite().GetPosition().x - this->prevX + x;
			tmpY = this->_Mur[i]->getSprite().GetPosition().y - this->prevY + y;
		}

		pos.Set(tmpX,tmpY);
		
		this->_Mur[i]->SetPosition(tmpX,tmpY);
				
		if( ( Carte->getElement(pos) != 1 || !Grille->isFree(pos, 0) ) && !this->_Mur[i]->getColor() )
		{
			// position mur interdit, on color en rouge
			this->_Mur[i]->setColor(true);
		}
		else if(Carte->getElement(pos) == 1 && Grille->isFree(pos, 0) && this->_Mur[i]->getColor())
		{
			// position mur ok
			this->_Mur[i]->setColor(false);
		}

	}

	// Sauvegarde la nouvelle position du mur 1
	this->prevX = x;
	this->prevY = y;
}
Пример #11
0
bool BlockMur::ToGrille(void)
{
	grille *Grille	= grille::getInstance();
	carte *Carte	= carte::getInstance();

	Coordonnees pos;
	int nbCheckOK = 0;
	int i=0;

	// on check si tous les mur sont dans une zone libre et sur la terre
	for(i=0;i<this->_nbMur;i++)
	{
		pos.Set(this->_Mur[i]->getSprite().GetPosition().x,this->_Mur[i]->getSprite().GetPosition().y);

		if(Carte->getElement(pos) == 1 && Grille->isFree(pos, 0))
		{
			nbCheckOK++;
		}
	}

	if(nbCheckOK == this->_nbMur)
	{
		nbCheckOK = 0;

		for(i=0;i<this->_nbMur;i++)
		{
			pos.Set(this->_Mur[i]->getSprite().GetPosition().x,this->_Mur[i]->getSprite().GetPosition().y);

			if(Grille->add(pos,this->_Mur[i]))
			{
				nbCheckOK++;
			}
		}

		if(nbCheckOK == this->_nbMur) return true;
	}

	return false;
}
Пример #12
0
void Vaisseau::move()
{
    /**
    *** On déplace proportionnellement à la distance à parcourir le vaisseau sur les deux axes.
    *** Ensuite on signale si on a bougé
    **/
    Coordonnees pos = Coordonnees(position.x()+position.w()/2, position.y()+position.h()/2, position.w(), position.h());
    int vecX = cible.x()-pos.x();
    int vecY = cible.y()-pos.y();
    int base = abs(vecX)+abs(vecY);
    if(base > vitesse) {
        int movX = vitesse*vecX/base;
        int movY = vitesse*vecY/base;
        position.x(position.x()+movX);
        position.y(position.y()+movY);
        etat[0] = (abs(movX)>abs(movY)) ? (movX>0 ? RIGHT : LEFT) : (movY>0 ? BOTTOM : TOP);
        hasMoved = true;
    }
    else
    {
        hasMoved = false;
    }
}
int main() {
    cout << endl << endl << endl;
    PersonnageBNHumain pbn("pôl_é_kockduhi");
    cout << "pbn : " << pbn.getNomBN() << endl;
    cout << " J'ai une grille de taille : (" << pbn.getTailleGrille().getLongueur() << "," << pbn.getTailleGrille().getHauteur() << ")" << endl;
    cout << "J'ai des bateaux de taille : ";
    for(int i=0; i<pbn.getBateaux().size(); i++) {
        cout << pbn.getBateaux()[i]->getTailleBateau() << " " ;
    }
    cout << endl;
    cout << "J'ai une " << pbn.getArme()->getNomArme() << endl;
    cout << "Le PV initial du bateau 2 est " << pbn.getBateaux()[2]->getPV() << endl;
    pbn.getBateaux()[0]->retirerPV();
    pbn.getBateaux()[0]->retirerPV();

    pbn.getBateaux()[1]->retirerPV();
    pbn.getBateaux()[1]->retirerPV();
    pbn.getBateaux()[1]->retirerPV();

    pbn.getBateaux()[2]->retirerPV();
    pbn.getBateaux()[2]->retirerPV();
    pbn.getBateaux()[2]->retirerPV();

    pbn.getBateaux()[3]->retirerPV();
    pbn.getBateaux()[3]->retirerPV();
    pbn.getBateaux()[3]->retirerPV();
    pbn.getBateaux()[3]->retirerPV();
    cout << "Flotte Coulee?? " << pbn.flotteCoulee() << endl;

    pbn.getBateaux()[4]->retirerPV();
    pbn.getBateaux()[4]->retirerPV();
    pbn.getBateaux()[4]->retirerPV();
    pbn.getBateaux()[4]->retirerPV();
    pbn.getBateaux()[4]->retirerPV();
    cout << "Le PV final du bateau 2 est " << pbn.getBateaux()[2]->getPV() << endl;
    cout << "Flotte Coulee?? " << pbn.flotteCoulee() << endl;







    cout << endl << endl << endl;
    Arme* ar = new ArmeClassique();
    PersonnageBNHumain pbn2("Léauéclem",6,10,ar);
    cout << "pbn2 : " << pbn2.getNomBN() << endl;
    cout << " J'ai une grille de taille : (" << pbn2.getTailleGrille().getLongueur() << "," << pbn2.getTailleGrille().getHauteur() << ")" << endl;
    cout << "J'ai des bateaux de taille : ";
    for(int i=0; i<pbn2.getBateaux().size(); i++) {
        cout << pbn2.getBateaux()[i]->getTailleBateau() << " " ;
    }
    cout << endl;
    cout << "J'ai une " << pbn2.getArme()->getNomArme() << endl;
    pbn2.placerBateaux();
    for(int i=0; i<pbn2.getBateaux().size(); i++) {
        cout << "La taille du bateau n° " << i << " est : " << pbn2.getBateaux()[i]->getTailleBateau() <<endl;
        for(int j=0; j<pbn2.getBateaux()[i]->getTailleBateau(); j++) {
            cout << "Il a : " << pbn2.getBateaux()[i]->getPV() << " PV" << endl;
            pbn2.getBateaux()[i]->retirerPV();
        }
    }


    cout << endl << endl << endl;
    Arme* arm = new ArmeCroix();
    PersonnageBNHumain pbn3("Bas ti 1 et Da mi 1",arm);
    cout << "pbn3 : " << pbn3.getNomBN() << endl;
    cout << " J'ai une grille de taille : (" << pbn3.getTailleGrille().getLongueur() << "," << pbn3.getTailleGrille().getHauteur() << ")" << endl;
    cout << "J'ai des bateaux de taille : ";
    for(int i=0; i<pbn3.getBateaux().size(); i++) {
        cout << pbn3.getBateaux()[i]->getTailleBateau() << " " ;
    }
    cout << endl;
    cout << "J'ai une " << pbn3.getArme()->getNomArme() << endl;





    cout << endl << endl << endl;
    PersonnageBNHumain pbn4("BasssssssssssssttttiennéVivi",8,12);
    cout << "pbn4 : " << pbn4.getNomBN() << endl;
    cout << " J'ai une grille de taille : (" << pbn4.getTailleGrille().getLongueur() << "," << pbn4.getTailleGrille().getHauteur() << ")" << endl;
    cout << "J'ai des bateaux de taille : ";
    for(int i=0; i<pbn4.getBateaux().size(); i++) {
        cout << pbn4.getBateaux()[i]->getTailleBateau() << " " ;
    }
    cout << endl;
    cout << "J'ai une " << pbn4.getArme()->getNomArme() << endl;




    cout << endl << endl << endl;
    vector<int> vec= {5,4,3,3,2};
    PersonnageBNHumain pbn5("Perso",vec);
    cout << "pbn5 : " << pbn5.getNomBN() << endl;
    cout << " J'ai une grille de taille : (" << pbn5.getTailleGrille().getLongueur() << "," << pbn5.getTailleGrille().getHauteur() << ")" << endl;
    cout << "J'ai des bateaux de taille : ";
    for(int i=0; i<pbn5.getBateaux().size(); i++) {
        cout << pbn5.getBateaux()[i]->getTailleBateau() << " " ;
    }
    cout << endl;
    cout << "J'ai une " << pbn5.getArme()->getNomArme() << endl;
    Grille gr=pbn5.placerBateaux();
    cout << "Voici la grille renvoyée par le placement bateau chez un PersonnageBNHumain : " << endl;
    afficherGrille(gr);
    cout << "C'est bien ce que l'on cherchait car on ne peut pas placer de bateau dans la partie modèle, on créé donc une grille vide en attendant le travail de l'IHM" << endl;
    Grille* gr2 = new Grille(8,10);
    Coordonnees coord = pbn5.coordonneesAViser(gr2);
    cout << "Les cordonnees a viser sont" << coord.getAbscisse() << coord.getOrdonnee() << endl;
    cout << "C'est bien ce que l'on cherchait car on ne peut pas savoir quelles sont les coordonnees visees dans la partie modèle, on créé donc des coordonnees vides en attendant le travail de l'IHM" << endl;



    cout << endl << endl << endl;
    vector<int> vec2= {9,6,3,4};
    PersonnageBNHumain pbn6("DaméAnn",3,3,vec2);
    cout << "pbn6 : " << pbn6.getNomBN() << endl;
    cout << " J'ai une grille de taille : (" << pbn6.getTailleGrille().getLongueur() << "," << pbn6.getTailleGrille().getHauteur() << ")" << endl;
    cout << "J'ai des bateaux de taille : ";
    for(int i=0; i<pbn6.getBateaux().size(); i++) {
        cout << pbn6.getBateaux()[i]->getTailleBateau() << " " ;
    }
    cout << endl;
    cout << "J'ai une " << pbn6.getArme()->getNomArme() << endl;





    cout << endl << endl << endl;
    vector<int> vec3= {4,6,6,2,1};
    Arme* arme = new ArmeFatale();
    PersonnageBNHumain pbn7("jesaispasqui",vec3,arme);
    cout << "pbn7 : " << pbn7.getNomBN() << endl;
    cout << " J'ai une grille de taille : (" << pbn7.getTailleGrille().getLongueur() << "," << pbn7.getTailleGrille().getHauteur() << ")" << endl;
    cout << "J'ai des bateaux de taille : ";
    for(int i=0; i<pbn7.getBateaux().size(); i++) {
        cout << pbn7.getBateaux()[i]->getTailleBateau() << " " ;
    }
    cout << endl;
    cout << "J'ai une " << pbn7.getArme()->getNomArme() << endl;








    cout << endl << endl << endl;
    vector<int> vec4= {5,7,6,4,9,3};
    Arme* armm = new ArmeFatale();
    PersonnageBNHumain pbn8("jesaistout",7,6,vec4,armm);
    cout << "pbn8 : " << pbn8.getNomBN() << endl;
    cout << " J'ai une grille de taille : (" << pbn8.getTailleGrille().getLongueur() << "," << pbn8.getTailleGrille().getHauteur() << ")" << endl;
    cout << "J'ai des bateaux de taille : ";
    for(int i=0; i<pbn8.getBateaux().size(); i++) {
        cout << pbn8.getBateaux()[i]->getTailleBateau() << " " ;
    }
    cout << endl;
    cout << "J'ai une " << pbn8.getArme()->getNomArme() << endl;
}
Пример #14
0
void PlaceJoueur::getZone(Coordonnees coordActuel, int **carte, int largeur, int hauteur, bool **depl, vector<Coordonnees>* zone, int peuple)
{
	if (!depl[coordActuel.x()][coordActuel.y()])
	{
		depl[coordActuel.x()][coordActuel.y()]=true;
		if (coordActuel.x()-1>=0)
		{
			if (verif[peuple][carte[coordActuel.x()-1][coordActuel.y()]])
			{
				Coordonnees coord(coordActuel.x()-1,coordActuel.y());
				if (find(zone->begin(),zone->end(),coord)==zone->end())
					zone->push_back(coord);
				getZone(coord,carte, largeur, hauteur,depl,zone,peuple); 
			}
		}
		if (coordActuel.x()+1<largeur)
		{
			if (verif[peuple][carte[coordActuel.x()+1][coordActuel.y()]])
			{
				Coordonnees coord(coordActuel.x()+1,coordActuel.y());
				if (find(zone->begin(),zone->end(),coord)==zone->end())
					zone->push_back(coord);
				getZone(coord,carte, largeur, hauteur,depl,zone,peuple); 
			}
		}
		if (coordActuel.y()-1>=0)
		{
			if (verif[peuple][carte[coordActuel.x()][coordActuel.y()-1]])
			{
				Coordonnees coord(coordActuel.x(),coordActuel.y()-1);
				if (find(zone->begin(),zone->end(),coord)==zone->end())
					zone->push_back(coord);
				getZone(coord,carte, largeur, hauteur,depl,zone,peuple); 
			}
		}
		if (coordActuel.y()+1<hauteur)
		{
			if (verif[peuple][carte[coordActuel.x()][coordActuel.y()+1]])
			{
				Coordonnees coord(coordActuel.x(),coordActuel.y()+1);
				if (find(zone->begin(),zone->end(),coord)==zone->end())
					zone->push_back(coord);
				getZone(coord,carte, largeur, hauteur,depl,zone,peuple); 
			}
		}
		if (peuple==Nain && carte[coordActuel.x()][coordActuel.y()]==Montagne)
        {
            for (int i=0;i<largeur;i++)
            {
                for (int j=0;j<hauteur;j++)
                {
                    if(carte[i][j]==Montagne)
                    {
							Coordonnees coord(i,j);
							if (find(zone->begin(),zone->end(),coord)==zone->end())
								zone->push_back(coord);
							getZone(coord,carte, largeur, hauteur,depl,zone,peuple); 
                    }
                }
            }
        }
	}
}
Пример #15
0
Coordonnees grille::calcBezier(Coordonnees A, Coordonnees B, Coordonnees C, double t)
{
    return Coordonnees(pow((1 - t), 2) * A.getX() + 2 * t * (1 -t) * B.getX() + pow(t, 2) * C.getX() , pow((1 - t), 2) * A.getY() + 2 * t * (1 -t) * B.getY() + pow(t, 2) * C.getY());
}