-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.cpp
144 lines (104 loc) · 3.47 KB
/
main.cpp
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
//
// main.cpp
// Bulls and Cows2
//
// Created by Ezekiel Williams on 12/18/16.
// Copyright © 2016 Ezekiel Williams. All rights reserved.
//
#include <iostream>
#include "FBullCowGame.hpp"
using FText = std::string;
using int32 = int;
void PrintIntro();
void PlayGame();
FText GetValidGuess();
bool AskToPlayAgain();
void PrintGameSummary();
FBullCowGame BCGame;
int main(int32 argc, const char * argv[]) {
bool bPlayAgain = false;
do
{
PrintIntro();
PlayGame();
bPlayAgain = AskToPlayAgain();
}
while (bPlayAgain);
std::cout << std::endl;
return 0;
}
void PrintIntro()
{
std::cout << "\n\nWelcome to Bulls and Cows, a fun word game!\n\n\n";
std::cout << " BULLS AND COWS \n" << std::endl;
std::cout << " \\ / " << std::endl;
std::cout << " ________------ ------________ " << std::endl;
std::cout << " /| |o o| |o o| |\\ " << std::endl;
std::cout << " / |_______\\ / \\ /_______| \\ " << std::endl;
std::cout << " | ' | \\../ \\../ | | " << std::endl;
std::cout << " | | | | \n" << std::endl;
std::cout << "Can you guess the " << BCGame.GetHiddenWordLength();
std::cout << " letter isogram I am thinking of?\n";
std::cout << std::endl;
return;
}
void PlayGame()
{
BCGame.Reset();
int32 MaxTries = BCGame.GetMaxTries();
while (!BCGame.IsGameWon() && BCGame.GetCurrentTry() <= MaxTries)
{
FText Guess = GetValidGuess();
FBullCowCount BullCowCount = BCGame.SubmitValidGuess(Guess);
std::cout << "Bulls: " << BullCowCount.Bulls;
std::cout << ". Cows: " << BullCowCount.Cows << "\n\n";
}
PrintGameSummary();
return;
}
FText GetValidGuess()
{
EGuessStatus Status = EGuessStatus::Invalid_Status;
FText Guess = "";
do
{
int32 CurrentTry = BCGame.GetCurrentTry();
std::cout << "Try " << CurrentTry << " of " << BCGame.GetMaxTries();
std::cout << ". Enter your guess: ";
std::getline(std::cin, Guess);
Status = BCGame.CheckGuessValidity(Guess);
switch (Status)
{
case EGuessStatus::Wrong_Length:
std::cout << "Please enter " << BCGame.GetHiddenWordLength() << " letters.\n\n";
break;
case EGuessStatus::Not_Lowercase:
std::cout << "Please enter only lowercase letters.\n\n";
break;
case EGuessStatus::Not_Isogram:
std::cout << "Please do not enter any repeating letters.\n\n";
break;
default:
break;
}
} while (Status != EGuessStatus::OK);
return Guess; // because xcode wants this here
}
bool AskToPlayAgain()
{
std::cout << "Do you want to play again with the same hidden word (y/n)? ";
FText Response = "";
std::getline(std::cin, Response);
return (Response[0] == 'y') || (Response[0] == 'Y');
}
void PrintGameSummary()
{
if (BCGame.IsGameWon())
{
std::cout << "CONGRATULATIONS! You guessed the word and won the game!\n\n";
}
else
{
std::cout << "Why are you so bad at games?\n\n";
}
}