예제 #1
0
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;
}
예제 #2
0
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);
}
예제 #3
0
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);
}
예제 #4
0
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);
    }
}
예제 #5
0
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);
}
예제 #6
0
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;
}
예제 #7
0
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;
    }
}
예제 #8
0
int Unite::getMouvement() {
    return m_mouvement + getJoueur()->getListeBonusJoueur(5);
}