bool Unite::attaquer(Case* c, Sort* attaque) { bool attaquer; if(!c->contientBatiment()) { bool sortOk = (attaque->getNom() == "Concentration" || attaque->getNom() == "Soin" || attaque->getNom() == "Glyphe de Gel"); if(sortOk || (c->isOccupee()&&c->getOccupant()->getJoueur() != ((Case*)parentItem())->parent()->getJoueurTour()) || attaque->getDegat() + this->getJoueur()->getListeBonusJoueur()[2] + this->getBonusUnite()[1] < 0) { if (getJoueur()->getPtAction()<attaque->getPtAction()) { attaquer = false; } else if ((abs(c->getX() - this->getPosition()[0]->getX()) + abs(c->getY() - this->getPosition()[0]->getY())) > attaque->getPortee()+this->getJoueur()->getListeBonusJoueur()[3] + this->getBonusUnite()[2]) { attaquer = false; } else { attaque->lancerAttaque(c); this->getJoueur()->modifPtAction(this->getCout()); attaquer = true; } } else { attaquer = false; } } else { attaquer = false; } return attaquer; }
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); }
void Unite::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if(getActif()) { Entite::mouseReleaseEvent(event); ((Case*)parentItem())->parent()->CapturePossible(this->getPosition()[0]); if(((Case*)parentItem())->parent()->getFlag()==attente) { ((Case*)parentItem())->parent()->setBoutons(unite, getJoueur()->getNumero()); ((Case*)parentItem())->parent()->CapturePossible(this->getPosition()[0]); ((Case*)parentItem())->parent()->afficheInfoUnite(this); } else ((Case*)parentItem())->parent()->setFlag(attente); } else { ((Case*)parentItem())->parent()->setBoutons(carre); } }
void supprimerJoueur(FileJoueur *fileJoueurs,int socket) { if(fileJoueurs==NULL) { perror("File ou dessin vide \n");exit(EXIT_FAILURE); } Joueur *joueur=getJoueur(fileJoueurs,socket); if(joueur==fileJoueurs->premier) { fileJoueurs->premier=joueur->suivant; } else { Joueur *precedent; for(precedent=fileJoueurs->premier;precedent->suivant!=joueur;precedent=precedent->suivant); precedent->suivant=joueur->suivant; } /*envoyer exited */ printf("je joueur a supprimer est %s \n",joueur->nom); free(joueur); }
bool Unite::attaquer(Case* c, AttaqueDeBase* attaque) { bool attaquer; if(!c->isOccupee() || c->getOccupant()->getJoueur()!= ((Case*)parentItem())->parent()->getJoueurTour()) { if (getJoueur()->getPtAction()<attaque->getPtAction()) { attaquer = false; } else if ((abs(c->getX() - this->getPosition()[0]->getX()) + abs(c->getY() - this->getPosition()[0]->getY())) > attaque->getPortee()+this->getJoueur()->getListeBonusJoueur()[3] + this->getBonusUnite()[2]) { attaquer = false; } else { attaque->lancerAttaque(c); this->getJoueur()->modifPtAction(this->getCout()); attaquer = true; } } else { attaquer = false; } return attaquer; }
bool Unite::deplacer(Case* c) { int mvt = this->mouvementDemande(c); vector<Case*> chemin=((Case*)this->parentItem())->parent()->cheminDeplacement(getPosition()[0],c,min((getMouvement()+getJoueur()->getListeBonusJoueur()[4]+this->getBonusUnite()[3]),(getJoueur()->getPtAction()+getJoueur()->getListeBonusJoueur()[1]))); if(chemin[chemin.size()-1]!=NULL) { if(this->getJoueur()->getPtAction()-mvt >=0) { animationDeplacement(chemin); vector<Case*> position; position.push_back(c); this->setPosition(position); this->setMouvement((this->getMouvement()+this->getJoueur()->getListeBonusJoueur()[4]+this->getBonusUnite()[3]-((chemin.size())-1))); this->getJoueur()->modifPtAction(1); ((Plateau*)((Case*)this->parentItem())->parent())->setFlag(attente); return true; } else { return false; } } else { return false; } }
int Unite::getMouvement() { return m_mouvement + getJoueur()->getListeBonusJoueur(5); }