134 lines
3.4 KiB
C++
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);
|
|
}
|
|
}
|
|
} |