1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| #include <iostream>
#include <utility>
#include <array>
#include <numeric>
#include <algorithm>
#include <random>
#include <string>
const auto nbCarte = 52;
const auto nbCarteParSigne = 13;
const auto nbCouleur = 4;
using Carte = std::pair<unsigned, unsigned>;
using Deck = std::array<Carte, nbCarte>;
Carte& operator++(Carte& p) //Ajoute un operateur ++ pour la fonction std::iota qui est appelé dans la fonction "creationDeck"
{
++p.first;
++p.second;
return p;
}
auto creationDeck() //Creation d'un array de 52 emplacements qui contient chacun une paire de deux unsigned int
{
Deck tab;
std::iota(std::begin(tab), std::end(tab), Carte());
std::transform(std::begin(tab), std::end(tab), std::begin(tab), [](Carte c)
{
c.first %= nbCarteParSigne;
c.second %= nbCouleur;
return c;
});
std::sort(std::begin(tab), std::end(tab));
return tab;
}
void melangerCarte(Deck &tab) //Fonction de mélange aleatoire
{
std::random_device random;
std::shuffle(std::begin(tab), std::end(tab), random);
}
void couperCarte(Deck &tab) //Fonction qui coupe les carte en deux
{
std::rotate(tab.begin(), tab.begin() + 27, tab.end());
}
void afficherCarte(Deck &tab, int n) //Fonction qui affiche le nom d'une carte
{
std::array<std::string, nbCarteParSigne> numero = { "As","Deux","Trois","Quatre","Cinq","Six","Sept","Huit","Neuf","Dix","Valet","Dame","Roi" };
std::array<std::string, nbCouleur> couleur = { "coeur","carreau","pique","trefle" };
std::cout << numero[tab[n].first] << " de " << couleur[tab[n].second] << std::endl;
}
int main()
{
auto jeuDeCarte = creationDeck(); //Crétion du jeu de carte dans un array en appelant la fonction "creationDeck"
melangerCarte(jeuDeCarte); //Melange les cartes aléatoirement en appelant la fonction "melangerCarte"
couperCarte(jeuDeCarte); //Coupe le jeu de carte au milieu en appelant la fonction "couperCarte"
afficherCarte(jeuDeCarte, 0); //Permet d'affiché le nom de la carte demandé en deuxieme argument contenu dans un array en premier argument
return 0;
} |
Partager