#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
const int SIZE = 4; // Tamaño de la matriz (4x4)
char board[SIZE][SIZE]; // Matriz del juego
bool revealed[SIZE][SIZE]; // Matriz para saber qué cartas han sido reveladas
// Función para inicializar el tablero
void initializeBoard() {
char characters[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
std::vector<char> deck;
// Llenar el deck con pares de caracteres
for (char c : characters) {
deck.push_back(c);
deck.push_back(c);
}
// Mezclar el deck
std::srand(static_cast<unsigned int>(std::time(0)));
std::random_shuffle(deck.begin(), deck.end());
// Llenar la matriz con los caracteres
for (int i = 0; i < SIZE; ++i) {
for (int j = 0; j < SIZE; ++j) {
board[i][j] = deck[i * SIZE + j];
revealed[i][j] = false; // Inicialmente, todas las cartas están ocultas
}
}
}
// Función para mostrar el tablero
void displayBoard() {
std::cout << "Tablero:\n";
for (int i = 0; i < SIZE; ++i) {
for (int j = 0; j < SIZE; ++j) {
if (revealed[i][j]) {
std::cout << board[i][j] << " ";
} else {
std::cout << "* "; // Carta oculta
}
}
std::cout << std::endl;
}
}
// Función principal del juego
int main() {
initializeBoard();
int score = 0;
int turns = 0;
while (score < (SIZE * SIZE) / 2) { // Mientras haya pares por encontrar
displayBoard();
int x1, y1, x2, y2;
// Primer intento
std::cout << "Jugador, elige la primera carta (fila columna): ";
std::cin >> x1 >> y1;
// Revelar la carta seleccionada
revealed[x1][y1] = true;
displayBoard();
// Segundo intento
std::cout << "Jugador, elige la segunda carta (fila columna): ";
std::cin >> x2 >> y2;
// Revelar la segunda carta
revealed[x2][y2] = true;
displayBoard();
// Verificar si son iguales
if (board[x1][y1] == board[x2][y2]) {
std::cout << "¡Encontraste un par!\n";
score++;
} else {
std::cout << "No son iguales. Intenta de nuevo.\n";
revealed[x1][y1] = false; // Ocultar la carta nuevamente
revealed[x2][y2] = false; // Ocultar la carta nuevamente
}
turns++;
}
std::cout << "¡Felicidades! Has encontrado todos los pares en " << turns << " intentos.\n";
return 0;
}