-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathDemo.cpp
More file actions
137 lines (114 loc) · 2.38 KB
/
Demo.cpp
File metadata and controls
137 lines (114 loc) · 2.38 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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/**
* Demo program for Coup exercise
*
* @author: Tal Zichlinsky
* @since: 2022-02
*/
#include "Player.hpp"
#include "Duke.hpp"
#include "Assassin.hpp"
#include "Ambassador.hpp"
#include "Captain.hpp"
#include "Contessa.hpp"
#include "Game.hpp"
#include <exception>
using namespace coup;
#include <iostream>
#include <stdexcept>
#include <vector>
using namespace std;
int main() {
Game game_1{};
/* This player drew the "Duke" card, his name is Moshe
and he is a player in game_1 */
Duke duke{game_1, "Moshe"};
Assassin assassin{game_1, "Yossi"};
Ambassador ambassador{game_1, "Meirav"};
Captain captain{game_1, "Reut"};
Contessa contessa{game_1, "Gilad"};
vector<string> players = game_1.players();
/*
prints:
Moshe
Yossi
Meirav
Reut
Gilad
*/
for(string name : players){
cout << name << endl;
}
// prints Moshe
cout << game_1.turn() << endl;
// throws no exceptions
duke.income();
assassin.income();
ambassador.income();
captain.income();
contessa.income();
// throws exception, it is duke's turn now
try{
assassin.income();
}catch (const std::exception &e){
std::cerr << e.what() << '\n';
}
duke.income();
assassin.foreign_aid();
// throws exception, the last operation duke performed
// is income, which cannot be blocked by any role
try{
captain.block(duke);
}catch (const std::exception &e)
{
std::cerr << e.what() << '\n';
}
cout << duke.coins() << endl; // prints 2
cout << assassin.coins() << endl; // prints 3
// throws exception, the last operation assassin performed
// is foreign aid, which cannot be blocked by contessa
try{
contessa.block(assassin);
}catch (const std::exception &e)
{
std::cerr << e.what() << '\n';
}
duke.block(assassin);
cout << assassin.coins() << endl; // prints 1
ambassador.transfer(duke, assassin); //transfers 1 coin from duke to assassin
captain.foreign_aid();
contessa.foreign_aid();
duke.tax();
assassin.income();
ambassador.foreign_aid();
captain.steal(contessa);
contessa.foreign_aid();
duke.tax();
// no exception, assassin can coup with only 3 coins
assassin.coup(duke);
players = game_1.players();
/*
prints:
Yossi
Meirav
Reut
Gilad
*/
for (string name : players)
{
cout << name << endl;
}
contessa.block(assassin);
players = game_1.players();
/*
prints:
Moshe
Yossi
Meirav
Reut
Gilad
*/
for (string name : players)
{
cout << name << endl;
}
}