const std::list<EcoAgent*>& RobotEcoAgent::getGeneur() { std::list<EcoAgent*>* geneurs = new std::list<EcoAgent*>(0); if( getEtat() == RECHERCHE_FUITE && !cheminReserve.empty() ) { // On regarde si la prochaine case à parcourir est libre // Si non, on ajoute les agents qui y sont à la liste des gêneurs if( monde->getPlace( cheminReserve.front() ) <= 0 ) { for(auto it = monde->getAgents().begin(); it != monde->getAgents().end(); ++it) { if( (*it)->getNoeud() == cheminReserve.front() ) geneurs->push_back(*it); } } } else if( getEtat() == RECHERCHE_SATISFACTION && !cheminCaisse.empty() ) { if( monde->getPlace( cheminCaisse.front() ) <= 0 ) { for(auto it = monde->getAgents().begin(); it != monde->getAgents().end(); ++it) { if( (*it)->getNoeud() == cheminCaisse.front() ) geneurs->push_back(*it); } } } return *geneurs; }
/** * @brief vérifie que le nombre de cette pièce n'est pas dépassé * @param[in] la piece à vérifier * @return un booléen pour savoir si le nombre de la pièce n'est pas dépassé * @see int Stratego::getNbAPlacer(char piece) */ bool Stratego::limitePiece(char piece) { std::string chaine = getEtat(); unsigned int taille = chaine.size(); unsigned int nbMax = getNbAPlacer(piece); for (unsigned int i = 0, nbPiece = 0; i < taille; ++i) { if (chaine[i] == piece) ++nbPiece; if (nbPiece >= nbMax) return (false); } return (true); }