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; }
//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; }
////////////////////////////////////////////////////////////////////// /////////////////////////////Opérator///////////////////////////////// ///////////////////////////////////////////////////////////////////// bool operator==(Carte const& a, Carte const& b) { return (int)a.getValeur()==(int)b.getValeur() && (int)a.getCouleur()==(int)b.getCouleur(); }