예제 #1
0
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;
}
예제 #2
0
/**
 * @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);
}