#include #include #include "animals.h" using namespace std; enum class StatusT:char { HIDDEN, FLIPPED, FOUND}; const int BOARD_SIZE = 4; const char ROW_MAX = char ('A'+BOARD_SIZE-1); const int GAME_SIZE = BOARD_SIZE*BOARD_SIZE; const string HIDDEN = "XXXXXXX"; const int WORD_SIZE = 9; void InitBoard(AnimalT board[], StatusT display[]); void ShowBoard(AnimalT board[], StatusT display[]); void Shuffle(AnimalT board[]); int GetPosition(AnimalT board[], StatusT display[], StatusT status); void TakeTurn(AnimalT board[], StatusT display[], int & found); int TwoToOne(int row, int col); int main() { StatusT display[GAME_SIZE]; AnimalT board[GAME_SIZE]; int found = 0; // initializations srand48(time(nullptr)); InitBoard(board, display); Shuffle(board); while (found < GAME_SIZE/2) { TakeTurn(board, display, found); } cout << endl; cout << "Congratulations, you win!" << endl; cout << endl; return 0; } void Hold(AnimalT board[], StatusT display[]) { string junk; cout << endl; ShowBoard(board, display); cout <<"Press any key to continue"; getline(cin,junk); getline(cin,junk); return; } void TakeTurn(AnimalT board[], StatusT display[], int & found) { int first, second; first = GetPosition(board, display, StatusT::HIDDEN); display[first] = StatusT::FLIPPED; second = GetPosition(board,display, StatusT::HIDDEN); display[second] = StatusT::FLIPPED; cout << endl; if (board[first] == board[second]) { cout << "Match!" << endl; } else { cout << "Miss " << endl; } Hold(board, display); if (board[first] == board[second]) { display[first] = StatusT::FOUND; display[second] = StatusT::FOUND; found++; } else { display[first] = StatusT::HIDDEN; display[second] = StatusT::HIDDEN; } return; } int GetRow() { char inputValue; do { cout << "Enter a row letter (A-" << ROW_MAX << ") => "; cin >> inputValue; } while (inputValue < 'A' or inputValue >ROW_MAX ) ; return int(inputValue - 'A'); } int GetCol() { int inputValue; do { cout << "Enter a collumn number (1-" << BOARD_SIZE << ") =>"; cin >> inputValue; } while (inputValue < 1 or inputValue > BOARD_SIZE); return inputValue -1; } int GetPosition(AnimalT board[], StatusT display[], StatusT status) { int row, col; int pos; do { ShowBoard(board, display); cout << endl; cout << "Enter a position" << endl; cout << endl; row = GetRow(); col = GetCol(); pos = TwoToOne(row,col); } while (display[pos] != status); return pos; } void InitBoard(AnimalT board[], StatusT display[]){ size_t i; for(i=0;i