-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
159 lines (114 loc) · 4.15 KB
/
main.cpp
File metadata and controls
159 lines (114 loc) · 4.15 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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include "misc.h"
#include "player.h"
#include "info.h"
#include "games.h"
#include <cctype>
#include <iostream>
#include <vector>
enum class Game {
TicTacToe,
Battleship,
Hangman,
Guess,
None
};
static void header() {
clearScreen();
biggestDivision();
std::cout << "TEXT-BASED GAMES!\n";
biggestDivision();
}
static int availableGames() {
return static_cast<int>(Game::None);
}
static Game getUserGamePick() {
int pick{ static_cast<int>(Game::None) };
do {
std::cout << "Which game do you want to play?\n\n";
std::printf("[%d] - Tic Tac Toe\n", Game::TicTacToe);
std::printf("[%d] - Battleship\n", Game::Battleship);
std::printf("[%d] - Hangman\n", Game::Hangman);
std::printf("[%d] - Guess\n", Game::Guess);
std::printf("[%d] - None\n", Game::None);
pick = inputInt();
} while (pick < 0 || pick > static_cast<int>(Game::None));
return static_cast<Game>(pick);
}
static void registerPlayers(std::vector<Player>& registeredPlayers) {
char morePlayersNeeded{ 'N'};
char symbol{ ' ' };
int playerIndex{ 1 };
std::string nickname;
do {
std::cout << "Enter the nickname of the player " << playerIndex << ": ";
nickname = inputStr();
std::cout << "Choose a default symbol for " << nickname << ": ";
symbol = inputChar();
registeredPlayers.push_back(Player{ nickname, symbol, playerIndex++ });
std::cout << "Done? [Y/N] ";
morePlayersNeeded = inputChar();
} while (std::toupper(morePlayersNeeded) != 'Y');
bigDivision();
}
static void showRegisteredPlayers(const std::vector<Player>& registeredPlayers) {
std::cout << "Players who were registered:\n";
for (const auto& player : registeredPlayers) {
std::cout << player.id << ". " << player.name << "\n";
}
bigDivision();
}
static Player& selectPlayer(std::vector<Player>& registeredPlayers) {
showRegisteredPlayers(registeredPlayers);
int selectedPlayer{ 0 };
do {
std::printf("Choose one [0-%d]: ", static_cast<int>(registeredPlayers.size() - 1));
selectedPlayer = inputInt();
} while (selectedPlayer < 0 || selectedPlayer >= registeredPlayers.size());
std::cout << registeredPlayers.at(selectedPlayer).name << " has been selected!\n";
bigDivision();
return registeredPlayers.at(selectedPlayer);
}
int main() {
std::vector<Player> registeredPlayers;
seed();
header();
registeredPlayers.push_back(Player{ "Computer", 'C', 0});
registerPlayers(registeredPlayers);
showRegisteredPlayers(registeredPlayers);
bool playedOneGame{ false };
char oneMoreGame{ 'N' };
do {
Game gamePick{ getUserGamePick() };
clearScreen();
switch (gamePick) {
case Game::TicTacToe:
std::cout << "TIC TAC TOE selected! Now choose the players who are going to play.\n";
bigDivision();
runTicTacToe(selectPlayer(registeredPlayers), selectPlayer(registeredPlayers));
playedOneGame = true;
break;
case Game::Battleship:
std::cout << "BATTLESHIP selected! Now choose the players who are going to play.\n";
bigDivision();
runBattleship(selectPlayer(registeredPlayers), selectPlayer(registeredPlayers));
playedOneGame = true;
break;
case Game::Guess:
std::cout << "GUESS selected! Now choose the players who are going to play.\n";
bigDivision();
runGuess(selectPlayer(registeredPlayers), selectPlayer(registeredPlayers));
playedOneGame = true;
break;
case Game::Hangman:
std::cout << "HANGMAN selected! Now choose the players who are going to play.\n";
bigDivision();
runHangman(selectPlayer(registeredPlayers), selectPlayer(registeredPlayers));
playedOneGame = true;
break;
}
if (playedOneGame)
oneMoreGame = inputChar("Do you want to play another game? [Y/N]\n");
} while (std::toupper(oneMoreGame) == 'Y');
std::cout << "Goodbye!\n";
return 0;
}