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); }
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); } } }
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; }
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; } }
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); } }
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()); }
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; }
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); }
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); }
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; }
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; }
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; }
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); } } } } } }
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()); }