card_game_vector

Amina GUERMOUCHE et Michel SIMATIC

2 mai 2020

1 Introduction

Le but de cet exercice est, dans un premier temps, de manipuler les vecteurs de la STL. Puis, vous utiliserez le framework GoogleTest pour faire les tests unitaires.

2 Partie 1 : Manipulation des vecteurs

Nous supposons qu’il y a une partie de coinche en cours entre deux joueurs : vous et l’ordinateur. L’idée est de savoir, pour une configuration donnée (c’est-à-dire une carte jouée par votre adversaire et les cartes de votre main), si vous allez prendre le pli ou pas. Pour ceux qui ne connaissent pas du tout la coinche, commencez par lire la section 2.4.

2.1 Règles

Les règles de notre jeu de coinche simplifié sont les suivantes:

  1. Vous disposez d’un jeu de 32 cartes.
  2. Vous prenez 8 cartes et l’adversaire pose une carte. Vous ne vous souciez pas du jeu de l’adversaire. En d’autres termes, cette carte est sélectionnée aléatoirement parmi les 24 cartes restantes.
  3. L’atout est choisi au hasard.
  4. Si vous avez au moins une carte de la même couleur :
    1. Si vous avez plusieurs cartes de valeurs supérieures, vous mettez la plus proche de la valeur de la carte posée et vous gagnez le pli.
    2. Sinon vous mettez la carte la plus petite (il en va de même si la carte posée est un atout) et vous perdez le pli.
  5. Si vous n’avez pas de carte de la même couleur et que vous avez des atouts, vous mettez le plus petit atout et vous gagnez le pli.
  6. Sinon vous mettez la carte la plus petite d’une autre couleur (si, par exemple, vous avez deux mêmes cartes de deux couleurs différentes (disons des septs), on suppose, par souci de simplicité, que coeur < carreau < pique < trefle. Dans ce cas vous perdez le pli.

Le but n’est pas de savoir qui gagne la partie. L’idée est de partir d’une configuration de base, c’est-à-dire une carte jouée et 8 cartes dans votre main et de savoir qui prend le pli. Ce qui signifie qu’il y aura un seul tour (et donc que vous ne jouerez pas vos 8 cartes).

2.2 Etapes

Les étapes du jeu sont les suivantes :

  1. Construire le jeu de carte
  2. Mélanger le jeu
  3. Tirer les huit premières cartes
  4. Choisir un atout au hasard et mettre à jour les valeurs des cartes (14 pour le 9 et 20 pour le valet).
  5. Tirer la 9e carte (parmi les 24 qui restent) qui sera jouée par l’adversaire.
  6. Jouer une carte en respectant les règles décrite ci-dessus.
  7. Afficher le gagnant de la manche.

2.3 Détails d’implémentation

Commencez par créer un projet Console que vous appellerez Coinche. Un fichier Coinche.h vous est fourni ici. Vous pouvez l’étendre, mais pas modifier les prototypes des fonctions. Pour information, afin d’ajouter un fichier Coinche.h à votre projet Coinche, il suffit de faire un clic droit sur le projet Coinche (au niveau de l’explorateur de solution) -> add -> new item -> header file et donnez Coinche.h en nom. Copier les prototypes de fonctions et ce que vous jugez nécessaires dans ce fichier

Afin de représenter le jeu de cartes, vous utiliserez un vecteur. Chaque case du vecteur est une carte représentée par une structure. La structure est composée de :

2.4 Règle complète de la coinche (pour ceux qui n’y ont jamais joué)

Règle de la coinche (l’explication pour 2 joueurs seulement) :

3 Partie 2 : Utilisation de GoogleTest

Dans cette section, nous allons mettre en oeuvre des tests unitaires.

3.1 Installation de l’environnement de tests unitaires

3.2 Présentation de l’environnement mis en place par cmake

Cette section décrit l’environnement mis en place par cmake :

3.3 Création de tests

Créez Coinche.h et Coinche.cpp dans le répertoire src. Recopiez dans ces fichiers le contenu des fichiers de votre projet Coinche initial.

Dans Coinche.cpp, renommez main() en myMain().

Dans l’explorateur de solutions, cliquez droit sur mainLauncher, puis sélectionnez “Définir comme projet par défaut”. Ensuite, exécutez votre application et vérifier qu’elle fonctionn comme précédemment.

Mettez à jour le fichier unitTests\unitTests.cpp avec quelques tests, comme l’exemple de test suivant :

/* Test : la valeur du 9 d'atout est 14*/
TEST(TestAtout, TestUpdate9Atout)
{
    card played;
    std::vector<card> jeu(1);
    std::vector<card> deck(0);
    Couleur atout = pique;
    jeu[0].force = neuf;
    jeu[0].value = 0;
    jeu[0].couleur = pique;
    update_values(atout, deck, jeu);
    EXPECT_EQ(14, jeu[0].value);
}