void Unite::attaquer(Case c) { if (getJoueur()->getPtAction()<m_AttaqueParDefaut->getPtAction()) { ManquePtAction ex; throw ex; } Case cE = *(getPosition()[0]); if ((abs(c.getX() - cE.getX()) + abs(c.getY() - cE.getY())) <= m_AttaqueParDefaut->getPortee()) { ManquePortee ex; throw ex; } m_AttaqueParDefaut->lancerAttaque(&c); }
void Unite::attaquer(Case c, Attaque* attaque) { if (getJoueur()->getPtAction()<attaque->getPtAction()) { ManquePtAction ex; throw ex; } Case cE = *(getPosition()[0]); if ((abs(c.getX() - cE.getX()) + abs(c.getY() - cE.getY())) <= attaque->getPortee()) { ManquePortee ex; throw ex; } attaque->lancerAttaque(&c); }
Case * AngeAleatoire::choisirUneCase() { int x = 0; int y = 0; int t = maPartie->monDamier->taille; int i, j, n, r; Case * c; // le programme choisit un coup n = 0; // on compte le nombre de coups possibles. for (i=0; i<t; i++) { for (j=0; j<t; j++) { c = maPartie->monDamier->mesCases[i][j]; if ((c->distance(maCase)<=puissance) && !(c->estBouchee()) && (!c->estAnge())) n++; } } r = Alea::engendrer(n); n = 0; // on selectionne un coup aleatoire dans les coups possibles. for (i=0; i<t; i++) { for (j=0; j<t; j++) { c = maPartie->monDamier->mesCases[i][j]; if ((c->distance(maCase)<=puissance) && !(c->estBouchee()) && (!c->estAnge())) if (++n == r) { x = c->getX() + 1; y = c->getY() + 1; } } } return c; }
void Unite::deplacer(Case c) { Case nouveau = deplacement(c); if (c.getX()!=nouveau.getX() && c.getY()!=nouveau.getY() && !nouveau.isOccupee()) { nouveau.setCase(this); //Rajout de void setCase(Unite unite); -> Test de si la case n'est pas occup�, puis mettre a jour la case // appel d'une exception si la case est occup� (Pour saut� l'instruction suivante) // ou avec un booleen, je ne sais pas // Nicolas :-D c.setCase(NULL); // mettre a 0 la case } else { cout << "case prise"<<endl; } }