Dev - C++ - MEMORAMA EN C++

 
Vista:
sin imagen de perfil

MEMORAMA EN C++

Publicado por Fernando (1 intervención) el 09/06/2023 23:40:55
Muy buenas tardes a todos.

Estoy trabajando en un proyecto en el que necesito implementar ciertas funcionalidades en C++, y aunque he realizado algunos avances, me he encontrado con una duda específica que no he logrado resolver por mi cuenta. Me vendría de mucha ayuda la experiencia y conocimientos en este campo por parte de los usuarios, me gustaría solicitar su asistencisa para comprender mejor el problema y encontrar una solución.

Gracias.


#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <windows.h>
#include <locale.h>

using namespace std;

const int num_pares = 10;
const int num_filas = 4;
const int num_columnas = 5;
const int max_intentos = 10;

void cambiarColor(int colorTexto, int colorFondo) {
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
int color = colorTexto + (colorFondo * 16);
SetConsoleTextAttribute(out, color);
}

void mostrarInstrucciones() {
setlocale(LC_ALL, "spanish");
system("cls");
cout << "Instrucciones:" << endl;
cout << "- Utiliza las teclas WASD para moverte y seleccionar una carta." << endl;
cout << "- Presiona ENTER para voltear una carta." << endl;
cout << "- Encuentra los pares de cartas iguales." << endl;
cout << "- Máximo de intentos: " << max_intentos << endl;

getch();
}

void generarPares(char pares[num_pares]) {
char caracteres[] = {'@','+','$','%','#','&','!','?','*','='};
srand(time(0));
for (int i = 0; i < num_pares; i++) {
int indice = rand() % (num_pares / 2);
pares[i] = caracteres[indice];
}
}

void gotoxy(int x, int y) {
COORD posicion;
posicion.X = x;
posicion.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), posicion);
}

void inicializarCartas(char cartas[num_filas][num_columnas], char caracter) {
for (int i = 0; i < num_filas; i++) {
for (int j = 0; j < num_columnas; j++) {
cartas[i][j] = caracter;
}
}
}

void mostrarCartas(char cartas[num_filas][num_columnas]) {
system("cls");
for (int i = 0; i < num_filas; i++) {
for (int j = 0; j < num_columnas; j++) {
cout << cartas[i][j] << " ";
}
cout << endl;
}
}

bool cartaVolteada(char cartas[num_filas][num_columnas]) {
for (int i = 0; i < num_filas; i++) {
for (int j = 0; j < num_columnas; j++) {
if (cartas[i][j] == '*') {
return true;
}
}
}
return false;
}

void seleccionarCarta(int& fila, int& columna, char cartas[num_filas][num_columnas]) {
bool seleccionado = false;
while (!seleccionado) {
int tecla = getch();
if (tecla == 'w' || tecla == 'W') {
if (fila > 0) {
fila--;
}
} else if (tecla == 'a' || tecla == 'A') {
if (columna > 0) {
columna--;
}
} else if (tecla == 's' || tecla == 'S') {
if (fila < num_filas - 1) {
fila++;
}
} else if (tecla == 'd' || tecla == 'D') {
if (columna < num_columnas - 1) {
columna++;
}
} else if (tecla == 13) {
if (cartas[fila][columna] == '*') {
seleccionado = true;
}
}

mostrarCartas(cartas);
gotoxy(columna * 2, fila);
cambiarColor(15, 0);
cout << cartas[fila][columna];
gotoxy(columna * 2, fila);
cambiarColor(0, 15);
}
}

void voltearCarta(int fila, int columna, char cartas[num_filas][num_columnas], char pares[num_pares], int& paresPendientes) {
cartas[fila][columna] = pares[fila * num_columnas + columna];
mostrarCartas(cartas);
gotoxy(columna * 2, fila);
cambiarColor(0, 15);
cout << cartas[fila][columna];
gotoxy(columna * 2, fila);
cambiarColor(15, 0);

for (int i = 0; i < num_filas; i++) {
for (int j = 0; j < num_columnas; j++) {
if (cartas[i][j] != '*' && cartas[i][j] != pares[i * num_columnas + j]) {
Sleep(500);
cartas[fila][columna] = '*';
cartas[i][j] = '*';
mostrarCartas(cartas);
paresPendientes++;
return;
}
}
}

paresPendientes--;
gotoxy(0, num_filas);
cambiarColor(15, 0);
cout << "Pares pendientes: " << paresPendientes;
}

void jugar() {
char pares[num_pares];
generarPares(pares);

char cartas[num_filas][num_columnas];
inicializarCartas(cartas, '*');

int paresPendientes = num_pares;

int fila = 0, columna = 0;
mostrarCartas(cartas);
gotoxy(columna * 2, fila);
cambiarColor(0, 15);
cout << cartas[fila][columna];
gotoxy(columna * 2, fila);
cambiarColor(15, 0);

int intentos = 0;
while (paresPendientes > 0 && intentos < max_intentos && cartaVolteada(cartas)) {
seleccionarCarta(fila, columna, cartas);
voltearCarta(fila, columna, cartas, pares, paresPendientes);
intentos++;
}

system("cls");
if (paresPendientes == 0) {
cout << "¡Ganaste!" << endl;
} else {
cout << "Perdiste :(" << endl;
}

cout << "¿Deseas volver a jugar? (S/N): ";
char opcion;
cin >> opcion;
if (opcion == 'S' || opcion == 's') {
jugar();
}
}

int main() {
setlocale(LC_ALL, "spanish");
system("cls");
cout << "Memorama" << endl;
cout << "Por :" << endl;
cout << endl << "Presiona ENTER para empezar";

getch();

mostrarInstrucciones();
jugar();
return 0;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder