Exemple #1
0
vector<Carte*> Joueur::priorite(Carte** tas, Couleur atout){
    int premier = 0, moi = -1, part = -1;
    Carte *prems = tas[premier];

    // On trouve le premier joueur
    while(premier < 4 && (prems == nullptr || tas[(premier+3)%4] != nullptr)){
        prems = tas[++premier];
    }

    //On trouve ma position, et par conséquent celle de mon partenaire
    for(int i = 0; i < 4; i++){
        int ii = (i+premier)%4;
        if(tas[ii] == nullptr){
            moi = ii;
            part = (moi+2)%4;
        }
    }
    vector<Carte*> ret;
    if(premier == 4){//On est le premier
        ret = jeu;
    }else{ // Sinon
        if(prems->getCouleur() != atout){ // SI la couleur demandée n'est pas l'atout
            if(aCouleur(prems->getCouleur())){ //Si on a la couleur demandée, alors couleur
                for(Carte *c:jeu){
                        if(c->getCouleur() == prems->getCouleur()){
                            ret.push_back(c);
                        }
                }
            }else{
                int best = getMeilleur(tas, atout, premier); // Sinon on regarde qui est le meilleur
                if(part == best){ // Si le partenaire est le meilleur, ça implique qu'il ait déjà joué, on peut jouer n'imp
                    ret = jeu;
                }
            }
        }else{ // SI la couleur demandée est de l'atout
            int best = getMeilleur(tas, atout, premier);
            if(tas[best]->getCouleur() == atout){
                int bestVal = tas[best]->getValeur(atout);
                for(Carte *c:jeu){ // On regarde si on peut mettre un meilleur atout
                    if(c->getCouleur() == atout && c->getValeur(atout) > bestVal){
                        ret.push_back(c);
                    }
                }
            }
        }

        if(ret.empty()){// Si ret est toujours vide, on regarde si on a une carte de la couleur demandée
            if(aCouleur(prems->getCouleur())){ //Si on a la couleur demandée, alors couleur
                for(Carte *c:jeu){
                        if(c->getCouleur() == prems->getCouleur()){
                            ret.push_back(c);
                        }
                }
            }else{ // sinon n'importe quelle carte
                ret = jeu;
            }
        }
    }
    return ret;
}
Exemple #2
0
    //calcul du best
int Joueur::getMeilleur(Carte **tas, Couleur atout, int premierJoueur){
    int best = premierJoueur;
    Carte *prems = tas[premierJoueur];
    bool isAtout = false;
    for(int i = 0; i < 4; i++){
        if(tas[i] != nullptr){
            //Si la carte actuelle est un atout
            if(tas[i]->isCouleur(atout)){

                //Si la meilleure carte est aussi un atout on doit comparer
                if(isAtout){
                    if(tas[best]->getValeur(atout) < tas[i]->getValeur(atout))
                        best = i;
                }else{ // Sinon ça devient automatiquement la meilleure carte
                    best = i;
                }
            }//sinon, si la carte actuelle est de la couleur demandée (et qu'on a pas déjà eu un atout
            else if(tas[i]->isCouleur(prems->getCouleur())){
                //On compare la puissance de l'âme des cartes, Yugi
                if(tas[best]->getValeur(atout) < tas[i]->getValeur(atout))
                        best = i;
            }
        }
    }
    return best;
}
Exemple #3
0
//////////////////////////////////////////////////////////////////////
/////////////////////////////Opérator/////////////////////////////////
/////////////////////////////////////////////////////////////////////
bool operator==(Carte const& a, Carte const& b)
{
    return (int)a.getValeur()==(int)b.getValeur() && (int)a.getCouleur()==(int)b.getCouleur();
}