Rajout des fichiers parce que j'avais oublié un m dans "ammend"
This commit is contained in:
parent
778045442e
commit
0346f20bfe
3 changed files with 314 additions and 0 deletions
236
snippets/Coinche.cpp
Normal file
236
snippets/Coinche.cpp
Normal file
|
@ -0,0 +1,236 @@
|
||||||
|
//
|
||||||
|
// Created by trotfunky on 25/04/19.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Coinche.h"
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<card> generate_cards()
|
||||||
|
{
|
||||||
|
std::vector<card> deck;
|
||||||
|
deck.reserve(32);
|
||||||
|
|
||||||
|
for(int couleur = Couleur::coeur ; couleur != Couleur::last ; couleur++)
|
||||||
|
{
|
||||||
|
for(int carte = Force::sept ; carte != Force::dernier ; carte++)
|
||||||
|
{
|
||||||
|
int valeur;
|
||||||
|
switch (carte)
|
||||||
|
{
|
||||||
|
case sept:
|
||||||
|
case huit:
|
||||||
|
case neuf:
|
||||||
|
valeur = 0;
|
||||||
|
break;
|
||||||
|
case dix :
|
||||||
|
valeur = 10;
|
||||||
|
break;
|
||||||
|
case valet:
|
||||||
|
valeur = 1;
|
||||||
|
break;
|
||||||
|
case dame:
|
||||||
|
valeur = 2;
|
||||||
|
break;
|
||||||
|
case roi:
|
||||||
|
valeur = 3;
|
||||||
|
break;
|
||||||
|
case as:
|
||||||
|
valeur = 11;
|
||||||
|
break;
|
||||||
|
case dernier:
|
||||||
|
default:
|
||||||
|
valeur = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
deck.push_back({static_cast<Couleur>(couleur), static_cast<Force>(carte), valeur});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shuffle(deck.begin(),deck.end(),randomDevice);
|
||||||
|
|
||||||
|
return deck;
|
||||||
|
}
|
||||||
|
|
||||||
|
void update_values(Couleur atout, std::vector<card>& deck, std::vector<card>& jeu)
|
||||||
|
{
|
||||||
|
for(card& carte : deck)
|
||||||
|
{
|
||||||
|
if(carte.couleur == atout)
|
||||||
|
{
|
||||||
|
if(carte.force == Force::valet)
|
||||||
|
{
|
||||||
|
carte.value = 20;
|
||||||
|
}
|
||||||
|
else if(carte.force == Force::neuf)
|
||||||
|
{
|
||||||
|
carte.value = 14;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(card& carte : jeu)
|
||||||
|
{
|
||||||
|
if(carte.couleur == atout)
|
||||||
|
{
|
||||||
|
if(carte.force == Force::valet)
|
||||||
|
{
|
||||||
|
carte.value = 20;
|
||||||
|
}
|
||||||
|
else if(carte.force == Force::neuf)
|
||||||
|
{
|
||||||
|
carte.value = 14;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
card play(card played, std::vector<card>& jeu, Couleur atout)
|
||||||
|
{
|
||||||
|
const card* minGagnant = nullptr;
|
||||||
|
const card* minAtout = nullptr;
|
||||||
|
const card* minCouleur = nullptr;
|
||||||
|
const card* minPerdant = nullptr;
|
||||||
|
|
||||||
|
for(const card& carte : jeu)
|
||||||
|
{
|
||||||
|
if(carte.couleur == played.couleur)
|
||||||
|
{
|
||||||
|
if((!minGagnant && carte.value > played.value ) ||
|
||||||
|
(minGagnant && carte.value > played.value && carte.value < minGagnant->value))
|
||||||
|
{
|
||||||
|
minGagnant = &carte;
|
||||||
|
}
|
||||||
|
else if(!minCouleur || ( carte.value < played.value && carte.value < minCouleur->value) )
|
||||||
|
{
|
||||||
|
minCouleur = &carte;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(carte.couleur == atout)
|
||||||
|
{
|
||||||
|
if(!minAtout || carte.value < minAtout->value)
|
||||||
|
{
|
||||||
|
minAtout = &carte;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(!minPerdant || carte.value < minPerdant->value)
|
||||||
|
{
|
||||||
|
minPerdant = &carte;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(minGagnant)
|
||||||
|
{
|
||||||
|
return(*minGagnant);
|
||||||
|
}
|
||||||
|
else if(minCouleur)
|
||||||
|
{
|
||||||
|
return(*minCouleur);
|
||||||
|
}
|
||||||
|
else if(minAtout)
|
||||||
|
{
|
||||||
|
return(*minAtout);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return(*minPerdant);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Couleur pick_atout()
|
||||||
|
{
|
||||||
|
int nbCouleurs;
|
||||||
|
for(nbCouleurs = Couleur::coeur; nbCouleurs != Couleur::last ; nbCouleurs++);
|
||||||
|
nbCouleurs--;
|
||||||
|
|
||||||
|
std::uniform_int_distribution<int> uniformIntDistribution(0,nbCouleurs);
|
||||||
|
|
||||||
|
return(static_cast<Couleur>(uniformIntDistribution(engine)));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WonOrLost(card played, card chosen, Couleur atout)
|
||||||
|
{
|
||||||
|
if(played.couleur == chosen.couleur)
|
||||||
|
{
|
||||||
|
return(chosen.value > played.value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return(chosen.couleur == atout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& ostream, const Couleur& couleur)
|
||||||
|
{
|
||||||
|
std::string str;
|
||||||
|
switch (couleur)
|
||||||
|
{
|
||||||
|
case coeur:
|
||||||
|
str = "cœur";
|
||||||
|
break;
|
||||||
|
case carreau:
|
||||||
|
str = "carreau";
|
||||||
|
break;
|
||||||
|
case pique:
|
||||||
|
str = "pique";
|
||||||
|
break;
|
||||||
|
case trefle:
|
||||||
|
str = "trèfle";
|
||||||
|
break;
|
||||||
|
case last:
|
||||||
|
default:
|
||||||
|
str = "cassé";
|
||||||
|
}
|
||||||
|
return ostream << str;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& ostream, const Force& force)
|
||||||
|
{
|
||||||
|
std::string valeur;
|
||||||
|
switch (force)
|
||||||
|
{
|
||||||
|
case sept:
|
||||||
|
valeur = "sept";
|
||||||
|
break;
|
||||||
|
case huit:
|
||||||
|
valeur = "huit";
|
||||||
|
break;
|
||||||
|
case neuf:
|
||||||
|
valeur = "neuf";
|
||||||
|
break;
|
||||||
|
case valet:
|
||||||
|
valeur = "valet";
|
||||||
|
break;
|
||||||
|
case dame:
|
||||||
|
valeur = "dame";
|
||||||
|
break;
|
||||||
|
case roi:
|
||||||
|
valeur = "roi";
|
||||||
|
break;
|
||||||
|
case dix:
|
||||||
|
valeur = "dix";
|
||||||
|
break;
|
||||||
|
case as:
|
||||||
|
valeur = "as";
|
||||||
|
break;
|
||||||
|
case dernier:
|
||||||
|
default:
|
||||||
|
valeur = "rien";
|
||||||
|
}
|
||||||
|
return ostream << valeur;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& ostream, const card& card)
|
||||||
|
{
|
||||||
|
std::string prefixe = (card.force == Force::dame ? "une " : "un ");
|
||||||
|
return ostream << prefixe << card.force << " de " << card.couleur;
|
||||||
|
}
|
29
snippets/Coinche.h
Normal file
29
snippets/Coinche.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#pragma once
|
||||||
|
#include <vector>
|
||||||
|
#include <random>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <ctime>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
enum Couleur {coeur, carreau, pique, trefle, last};
|
||||||
|
enum Force { sept, huit, neuf, valet, dame, roi, dix, as, dernier };
|
||||||
|
|
||||||
|
struct card {
|
||||||
|
Couleur couleur;
|
||||||
|
Force force;
|
||||||
|
int value;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::ostream& operator << (std::ostream& ostream,const Couleur& couleur);
|
||||||
|
std::ostream& operator <<(std::ostream& ostream, const Force& force);
|
||||||
|
std::ostream& operator << (std::ostream& ostream, const card& card);
|
||||||
|
|
||||||
|
static std::random_device randomDevice;
|
||||||
|
static std::default_random_engine engine(randomDevice());
|
||||||
|
|
||||||
|
std::vector<card> generate_cards();
|
||||||
|
void update_values(Couleur atout , std::vector<card> &deck, std::vector<card> &jeu);
|
||||||
|
Couleur pick_atout();
|
||||||
|
bool WonOrLost(card played, card chosen, Couleur atout);
|
||||||
|
card play(card played, std::vector<card> &jeu, Couleur atout);
|
49
snippets/playCoinche.cpp
Normal file
49
snippets/playCoinche.cpp
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
//
|
||||||
|
// Created by trotfunky on 25/04/19.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "Coinche.h"
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
std::cout << "Faisons un pli de coinche ! " << std::endl << std::endl;
|
||||||
|
|
||||||
|
// On génère un deck
|
||||||
|
std::vector<card> deck = generate_cards();
|
||||||
|
|
||||||
|
std::vector<card> main;
|
||||||
|
|
||||||
|
// On génère une main à partir de ce deck
|
||||||
|
for(int i = 0;i<8;i++)
|
||||||
|
{
|
||||||
|
main.push_back(deck.back());
|
||||||
|
deck.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Voilà notre main : " << std::endl;
|
||||||
|
for(const card& carte : main)
|
||||||
|
{
|
||||||
|
std::cout << carte << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// On choisit un atout
|
||||||
|
Couleur atout = pick_atout();
|
||||||
|
std::cout << std::endl << "On a choisi l'atout " << atout << std::endl;
|
||||||
|
|
||||||
|
// Puis on met à jour les valeurs des cartes de l'atout (9 et valet)
|
||||||
|
update_values(atout,deck,main);
|
||||||
|
|
||||||
|
// On fait jouer une carte aléatoire à l'adversaire, vu que le tableau est mélangé de manière aléatoire
|
||||||
|
card played = deck.back();
|
||||||
|
std::cout << std::endl << "L'adversaire a joué " << played << " !" << std::endl;
|
||||||
|
|
||||||
|
// On décide la carte que nous allons jouer
|
||||||
|
card toPlay = play(played,main,atout);
|
||||||
|
std::cout << "Nous allons donc jouer " << toPlay << std::endl;
|
||||||
|
|
||||||
|
// On gagne ou perd
|
||||||
|
std::cout << "C'est " <<(WonOrLost(played,toPlay,atout) ? "gagné ! " : "perdu :(") << std::endl;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue