← Memory Game Download

#include <iostream> #include <ctime> //play the game void play(); //print the game board void printBoard(int a[4][4], int b[4][4]); //shuffle the game board int shuffleBoard(int (&a)[4][4]); int main() { std::cout << "Welcome to the memory game! Cards are flipped by entering a corresponding X/Y coordinate." << std::endl; std::cout << "First, X is requested, then Y." << std::endl; short startAgain; do { play(); std::cout << "Would you like to play again?" << std::endl; std::cout << "1. Yes" << std::endl; std::cout << "2. No" << std::endl; std::cin >> startAgain; } while (startAgain == 1); return 0; } void play() { int cards[4][4] = { {1,2,3,4}, {5,6,7,8}, {1,2,3,4}, {5,6,7,8} }; int flipped[4][4] = { {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0} }; //shuffle the game board shuffleBoard(cards); int completion = 0; do { //ask for first card to flip printBoard(cards, flipped); int firstX = 0, firstY = 0; std::cout << "Choose the first card to flip." << std::endl; do { do { std::cout << "Column: "; std::cin >> firstY; } while (firstY < 1 || firstY > 4); do { std::cout << "Row: "; std::cin >> firstX; } while (firstX < 1 || firstX > 4); if (flipped[firstX - 1][firstY - 1] == 0) { std::cout << "\n\n\n\n\n\n\n\n\n\n"; std::cout << std::endl << "Flipping " << firstY << "," << firstX << std::endl; flipped[firstX - 1][firstY - 1] = 1; } else { std::cout << "You cannot choose that card. (Already flipped)" << std::endl; } } while (flipped[firstX - 1][firstY - 1] != 1); //ask for second card to flip printBoard(cards, flipped); int secondX = 0, secondY = 0; std::cout << "Choose the second card to flip." << std::endl; do { do { std::cout << "Column: "; std::cin >> secondY; } while (firstY < 1 || secondY > 4); do { std::cout << "Row: "; std::cin >> secondX; } while (firstX < 1 || secondX > 4); if (firstX == secondX && firstY == secondY) { std::cout << "You cannot choose that card. (Same card)" << std::endl; } else { if (flipped[secondX - 1][secondY - 1] == 0) { std::cout << "\n\n\n\n\n\n\n\n\n\n"; std::cout << std::endl << "Flipping " << secondY << "," << secondX << std::endl; flipped[secondX - 1][secondY - 1] = 1; } else { std::cout << "You cannot choose that card. (Already flipped)" << std::endl; } } } while (firstX == secondX && firstY == secondY || flipped[secondX - 1][secondY - 1] != 1); //compare the cards to see if we have a win if (cards[firstX - 1][firstY - 1] == cards[secondX - 1][secondY - 1]) { flipped[firstX - 1][firstY - 1] = 2; flipped[secondX - 1][secondY - 1] = 2; std::cout << "Winner! You found a pair of: " << cards[firstX - 1][firstY - 1] << std::endl; } else { printBoard(cards, flipped); flipped[firstX - 1][firstY - 1] = 0; flipped[secondX - 1][secondY - 1] = 0; std::cout << "No match, please try again." << std::endl; } //calculate game completion completion = 0; for (int x = 0; x < 4; x ++) { for (int y = 0; y < 4; y ++) { completion += flipped[x][y]; } } //completed game adds up to 32 (when the 4x4 flipped cards array is filled with 2s) } while (completion < 32); std::cout << "Congratulations, you've won!" << std::endl; } //prints the game board void printBoard(int a[4][4], int b[4][4]) { std::cout << "-----------" << std::endl; for (int w = 0; w < 4; w ++) { std::cout << "| "; for (int h = 0; h < 4; h ++) { if (b[w][h] == 1) { std::cout << a[w][h] << " "; } else if (b[w][h] == 2) { std::cout << a[w][h] << " "; } else { std::cout << "* "; } } std::cout << "|"; std::cout << std::endl; } std::cout << "-----------" << std::endl; } int shuffleBoard(int (&a)[4][4]) { for (int x = 0; x < 4; x ++) { for (int y = 0; y < 4; y ++) { srand(time(NULL)); //randomly swap with another array position int r = y + (rand() % (4 - y)); int temp = a[x][y]; a[x][y] = a[x][r]; a[x][r] = temp; //amplify randomness r = x + (rand() % (4 - x)); temp = a[x][y]; a[x][y] = a[r][y]; a[r][y] = temp; } } }