Cpp/JuegoSudoku_FernandoMéndez/JuegoSudoku.cpp

134 lines
3.4 KiB
C++

//Sudoku - Fernando Méndez Torrubiano
#include "JuegoSudoku.h"
using namespace std;
void mostrar(const tJuegoSudoku& juego) {
mostrar(juego.registro);
mostrar(juego.tablero);
}
int jugar(const tRegSudoku& sudoku) {
tJuegoSudoku juego;
int puntos = 0;
juego.registro.nomTablero = sudoku.nomTablero;
juego.registro.puntos = sudoku.puntos;
if (cargar(juego.tablero, sudoku.nomTablero)) {
clear();
mostrar(juego);
ejecutarSubMenu(juego, puntos);
}
else {
cout << "No se ha podido cargar el tablero." << endl;
}
return puntos;
}
void ejecutarSubMenu(tJuegoSudoku& juego, int& puntos) {
tCoor coordenadas;
char opc = '1';
int num = 0;
bool resuelto = false;
do {
actulizarCandidatos(juego, coordenadas);
opc = subMenu();
switch (opc) {
case '1':
pedirCoordenadas(coordenadas);
mostrarCandidatos(juego.tablero, coordenadas);
pausa();
break;
case '2':
pedirCoordenadas(coordenadas);
do {
cout << endl << "Introduzca un numero [1-9]: ";
cin >> num;
} while ((num < 1) || (num > MAXDIM));
if (actualizar(juego.tablero, coordenadas, num)) {
cout << "Casilla actualizada correctamente." << endl;
}
else {
cout << "No se ha podido actualizar esa casilla." << endl;
}
pausa();
break;
case '3':
pedirCoordenadas(coordenadas);
if (borrar(juego.tablero, coordenadas)) {
cout << "Borrado correctamente." << endl;
}
else {
cout << "No se puede borrar esa casilla." << endl;
}
pausa();
break;
case '4':
if (cargar(juego.tablero, juego.registro.nomTablero)) {
cout << "Tablero reiniciado correctamente." << endl;
}
pausa();
break;
case '5':
completarSimples(juego.tablero);
break;
}
if (numVacias(juego.tablero) == 0) {
resuelto = true;
puntos = juego.registro.puntos;
}
clear();
mostrar(juego);
} while ((opc != '0') && (!resuelto));
}
char subMenu() {
char opc = '1';
cout << endl << "<" << setfill(char('-')) << setw(35) << "OPCIONES DE JUEGO" << setw(18) << ">" << "\n" << setfill(char(0));
cout << "1 - Ver posibles valores de una casilla vacía" << endl;
cout << "2 - Colocar valor en una casilla" << endl;
cout << "3 - Borrar valor de una casilla" << endl;
cout << "4 - Reiniciar el tablero" << endl;
cout << "5 - Autocompletar celdas simples" << endl;
cout << "0 - Abortar la resolución y volver al menú principal" << endl;
cout << "<" << setfill(char('-')) << setw(53) << ">" << "\n" << setfill(char(0));
cout << "Seleccione una opcion: ";
cin >> opc;
while (opc != '0' && opc != '1' && opc != '2' && opc != '3' && opc != '4' && opc != '5') {
cout << "Seleccione una opción del menu (entre 0 y 5): ";
cin >> opc;
}
return opc;
}
void pedirCoordenadas(tCoor& coordenadas) {
do {
cout << "Introduzca fila [1-9]: ";
cin >> coordenadas.fila;
} while ((coordenadas.fila < 1) || (coordenadas.fila > MAXDIM));
coordenadas.fila -= 1;
do {
cout << "Introduzca columna [1-9]: ";
cin >> coordenadas.col;
} while ((coordenadas.col < 1) || (coordenadas.col > MAXDIM));
coordenadas.col -= 1;
}
void actulizarCandidatos(tJuegoSudoku& juego, tCoor& coordenadas) {
for (int i = 0; i < MAXDIM; i++) {
for (int j = 0; j < MAXDIM; j++) {
coordenadas.fila = i;
coordenadas.col = j;
cargarCandidatos(juego.tablero, coordenadas);
}
}
}