-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharbitre.hh
More file actions
92 lines (80 loc) · 2.89 KB
/
Copy patharbitre.hh
File metadata and controls
92 lines (80 loc) · 2.89 KB
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#pragma once
#include <memory>
#include <iostream>
#include <chrono>
#include <thread>
#include <mutex>
#include <utility>
#include <functional>
#include <vector>
#include "brix.hh"
#include "jeu.hh"
#include "joueurs/joueur.hh"
#include "joueurs/joueur_random.hh"
#include "joueurs/joueur_manuel.hh"
#include "joueurs/joueur_montecarlo_.hh"
#include "joueurs/joueur_alphabeta.hh"
const int TEMPS_POUR_UN_COUP(15000); // millisecondes
//const int TEMPS_POUR_UN_COUP(10);//millisecondes -- temps lors de la compétition
/**********************************************************************************
* classe lançant la partie et qui se sert des *
* mutex pour s'assurer que les joueurs joue *
* dans les temps *
**********************************************************************************/
/*Pour appeler les joueurs
* M_1 et M_2 instancieront la classe Joueur_monte_carlo
* M_1 s'appelle MonteCarlo (M) ; M_2 s'appelle StoMonteCarlo (S)
* A_1 et A_2 instancieront la classe Joueur_AlphaBeta
* MANUEL et MANUEL2 instancieront la classe Joueur_manuel
* RAND et RAND2 instancieront la classe Joueur_Random
* RAND s'appelle Random (R) et RAND2 s'appelle Aleatoire (A)
* MANUEL s'appelle Caro (C) et MANUEL2 s'appelle Vio (V)
* */
enum class player {A_1, A_2, M_1, M_2 , MANUEL , MANUEL2, RAND, RAND2} ;
enum class result {NULLE , X , O, ERREUR } ;
/**
* @brief The Arbitre class
* classe gerant la partie et les tours des joueurs,
* et s'ils commencent ou s'ils jouent en deuxième.
* Le joueur qui commence la partie joue les 'x'
* Le joueur qui joue en deuxième joue les 'o'.
* Si un joueur ne joue pas dans les temps, il perd,
* si un joueur ne joue pas un coup correct (coup correct : brix horizontales ou verticales, brix sur le pateau et vide), il perd.
*/
class Arbitre
{
private:
std::shared_ptr<Joueur> _joueur1;
std::shared_ptr<Joueur> _joueur2;
Jeu _jeu;
std::vector<Brix> _coups;
std::vector<std::mutex> _coups_mutex;
int _nombre_parties;
int _numero_partie;
player _player1;
player _player2;
public:
/**
* @brief Arbitre
* @param player1
* @param player2
* @param nombre_parties
*/
Arbitre(player player1 , player player2, int nombre_parties);
void initialisation();
/**
* @brief challenge
* @param nombre_parties
* methode lançant un challenge avec un nombre de parties
* affiche le nombre de parties gagnées pour chaque participant
* @return 0 si tout c'est bien passé, 1 sinon
*/
int challenge();
/**
* @brief partie
* @return le gagnant de la partie (result::X pour le joueur 1, result::O pour joueur 2, result::NULLE en cas de partie nulle, result::ERREUR en cas de problème)
* lance une partie,
*
*/
result partie();
};