#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
#define MAX_PALABRAS 1
#define FILA 2
#define COLUMNA 2
#define MAX_CARACTER 31
ifstream lectura;
ofstream escritura;
typedef int matriz_numeros
[FILA][COLUMNA];
typedef char matriz_letras
[FILA][COLUMNA];
typedef char cadena[MAX_CARACTER];
typedef struct
{ int codigo_jugador;
cadena nick;
}jugador;
typedef char vector[MAX_CARACTER];
void menu(void);
void introducir_jugador(cadena nombre_fichero,jugador&a);
void mostrar_jugador(const jugador a,int
num_par_jugadas,int punt_max_obt);
void RellenarMatrizManual
(matriz_numeros&num, matriz_letras&let);
void MostrarMatriz
(const matriz_numeros num,const matriz_letras let);
void tipo_de_partida(void);
void JUGAR(cadena nombre_fich,cadena fichero1,cadena fichero2,matriz_numeros&num, matriz_letras&let,int&puntos);
void jugada_correcta
(cadena nombre_fich,const matriz_numeros num, const matriz_letras let,int punto);
void MostrarMatrizFichero(cadena
nombre_ficheroLET,cadena nombre_ficheroNUM,matriz_numeros num,matriz_letras let);
void actualizar_fichero_jugadores(cadena ficheroJ,jugador a);
bool comprobar_palabra(cadena palabra,cadena
nombre_fichero);
int main() {
jugador j;
matriz_numeros valores;
matriz_letras palabras;
int opcion_menu;
int NumeroPartidasJugadas=0,PuntuacionMaxima=0;
bool booleana_menu=false;
char desea_salir;
cout<<"---
WORDAMENT ---"<<endl<<endl;
menu();
cout<<endl<<"Seleccione
opción para recorrer el menú: ";
cin>>opcion_menu;
while(opcion_menu<1||opcion_menu>5)
{
cout<<"ERROR. Seleccione una opción válida: ";
cin>>opcion_menu; }
while(opcion_menu!=5&&booleana_menu==false)
{
switch(opcion_menu)
{
case 1: cout<<endl<<"-
Introduzca datos del jugador -"<<endl;
introducir_jugador("jugadores.txt",j);
break;
case 2:
mostrar_jugador(j,NumeroPartidasJugadas,PuntuacionMaxima);
break;
case 3: JUGAR("palabras.txt","matriz_letras.txt","matriz_numeros.txt",valores,palabras,PuntuacionMaxima);
NumeroPartidasJugadas++;
break;
case 4: //Mostrar
datos de los ficheros
break; }
cout<<endl<<"¿Desea
salir? (s/n): ";
cin>>desea_salir;
while(desea_salir!='s'&&desea_salir!='S'&&desea_salir!='n'&&desea_salir!='S')
{ cout<<"ERROR. Introduzca un
caracter válido (s/n): ";
cin>>desea_salir; }
if(desea_salir=='S'||desea_salir=='s')
{ booleana_menu=true; }
else
{ cout<<endl<<endl;
menu();
cout<<endl<<"Seleccione
opción para recorrer el menú: ";
cin>>opcion_menu;
while(opcion_menu<1||opcion_menu>5)
{ cout<<"ERROR. Seleccione una
opción válida: ";
cin>>opcion_menu; }
}
}
return 0; }
//=====================================
void menu(void) {
cout<<"1.-
Introducir datos del jugador"<<endl;
cout<<"2.-
Visualizar datos del jugador"<<endl;
cout<<"3.-
Jugar"<<endl;
cout<<"4.-
Mostrar datos de los ficheros"<<endl;
cout<<"5.-
Salir"<<endl;
}
void introducir_jugador(cadena nombre_fichero,jugador&a) {
cout<<"Código
del jugador: ";
cin>>a.codigo_jugador;
while(a.codigo_jugador<0)
{
cout<<"ERROR. Introduzca valor válido (entero positivo): ";
cin>>a.codigo_jugador; }
cout<<"Nick:
";
cin>>a.nick;
actualizar_fichero_jugadores(nombre_fichero,a);
}
void mostrar_jugador(const jugador a,int
num_par_jugadas,int punt_max_obt) {
cout<<endl;
cout<<"Codigo
del jugador: "<<a.codigo_jugador<<endl;
cout<<"Nick:
"<<a.nick<<endl;
cout<<"Número
de partidas jugadas: "<<num_par_jugadas<<endl;
cout<<"Puntuación
máxima obtenida: "<<punt_max_obt<<endl;
}
void RellenarMatrizManual
(matriz_numeros&num, matriz_letras&let) {
cout<<endl;
cout<<"Vamos a
introducir las matrices de letras y valores (recuerda que debes hacerlo en
concordancia con el modo de juego que has elegido). "<<endl;
cout<<"Todas
las letras deberán ir en mayúsculas (A-Z) y los valores serán enteros positivos
del 1 al 15."<<endl<<endl;
for(int
i=0;i<FILA;i++)
{
for(int
j=0;j<COLUMNA;j++)
{ cout<<"Introduzca el elemento
letra de la fila "<<i<<" y columna "<<j<<" :"<<endl;
cout<<"·Letra:
";
cin>>let[i][j];
while(let[i][j]<'A'||let[i][j]>'Z')
{
cout<<"ERROR. Introduzca caracter válido (A-Z): ";
cin>>let[i][j]; }
cout<<"·Valor:
";
cin>>num[i][j];
while(num[i][j]<1||num[i][j]>15)
{
cout<<"ERROR. Introduzca valor válido (1-15): ";
cin>>num[i][j]; }
cout<<endl;
}
}
}
void MostrarMatriz
(const matriz_numeros num,const matriz_letras let) {
cout<<endl;
cout<<"Visualizamos
la matriz"<<endl<<endl;
for(int
i=0;i<FILA;i++)
{
for(int
j=0;j<COLUMNA;j++)
{ cout<<let[i][j]<<"("<<num[i][j]<<")"<<" "; }
cout<<endl; }
}
void tipo_de_partida(void) {
int tipo_partida;
cadena tema;
cout<<endl;
cout<<"Tipos de
partidas disponibles: "<<endl;
cout<<"1.-
Partida de letra con valor especial."<<endl;
cout<<"2.-
Partida temática"<<endl;
cout<<"3.-
Partida de misma letra en las esquinas."<<endl;
cout<<endl<<"Seleccione
tipo de partida: ";
cin>>tipo_partida;
while(tipo_partida<1||tipo_partida>3)
{
cout<<"ERROR. Seleccione una opción válida: ";
cin>>tipo_partida; }
switch(tipo_partida)
{
case 1: cout<<"Partida
de letra con valor especial. Introduce los datos normalmente en la matriz de
letras/valores excepto en una letra, que su valor debe ser mayor al común,
";
cout<<"y
encuentra todo tipo de palabras."<<endl; break;
case 2: cout<<"Partida
temática. Introduce los datos normalmente en la matriz de letras/valores, pero
encuentra únicamente las palabras de un tema escogido."<<endl;
cout<<"Introduce
el tema a tratar (ej: animales, música, cine, deportes, etc...): ";
cin>>tema;
cout<<endl<<endl<<"El tema
elegido es "<<tema<<", centra tu atención en palabras
sobre ello."<<endl; break;
case 3: cout<<"Partida
donde las cuatro esquinas tienen la misma letra. Introduce los datos en la
matriz de letras/valores adjuntando la misma letra en las cuatro posiciones de
las esquinas y encuentra ";
cout<<"todo
tipo de palabras."<<endl; break;
}
}
void JUGAR(cadena nombre_fich,cadena fichero1,cadena fichero2,matriz_numeros&num, matriz_letras&let,int&puntos) {
char
manual_automatica;
tipo_de_partida();
cout<<"¿Desea partida manual
(pulse M) o automatica (pulse A)?"<<endl;
cin>>manual_automatica;
while(manual_automatica!='m'&&manual_automatica!='M'&&manual_automatica!='a'&&manual_automatica!='A')
{
cout<<"ERROR. Introduce un caracter válido (a/m): ";
cin>>manual_automatica; }
if(manual_automatica=='m'||manual_automatica=='M')
{
RellenarMatrizManual (num,let);
MostrarMatriz (num, let); }
else
{
MostrarMatrizFichero(fichero1,fichero2,num,let); }
for(int
i=0;i<MAX_PALABRAS;i++)
{
jugada_correcta(nombre_fich,num,let,puntos); }
}
void jugada_correcta
(cadena nombre_fich,const matriz_numeros num, const matriz_letras let,int punto) {
char pedir_letra;
int
contador_vector=0,valor_palabra=0;
int posi,posj;
vector v;
cout<<"¿Quiere
seleccionar letra? (s/n): ";
cin>>pedir_letra;
while(pedir_letra!='S'&&pedir_letra!='n'&&pedir_letra!='N'&&pedir_letra!='s')
{
cout<<"ERROR. Introduce caracter válido(s/n): ";
cin>>pedir_letra; }
while((pedir_letra=='s'||pedir_letra=='S')&&contador_vector<MAX_CARACTER)
{
cout<<"Escoja
posición a seleccionar [i][j]: ";
cin>>posi;
cin>>posj;
v[contador_vector]=let[posi][posj];
valor_palabra=valor_palabra+num[posi][posj];
contador_vector++;
cout<<"¿Quiere
seleccionar otra letra? (s/n) (recuerda que deben estar contiguas): ";
cin>>pedir_letra;
while(pedir_letra!='S'&&pedir_letra!='n'&&pedir_letra!='N'&&pedir_letra!='s')
{
cout<<"ERROR. Introduce caracter válido(s/n): ";
cin>>pedir_letra; }
}
cout<<"La
palabra seleccionada es ";
for(int
i=0;i<contador_vector;i++)
{
cout<<v[i]; }
cout<<" y tiene un valor de
"<<valor_palabra<<" puntos"<<endl;
if(comprobar_palabra(v,nombre_fich)==true)
{
cout<<"Palabra
correcta, enhorabuena"<<endl;
valor_palabra=punto;
}
else
{ cout<<"Palabra
no válida, vuelve a intentarlo"<<endl; }
}
void MostrarMatrizFichero(cadena
nombre_ficheroLET,cadena nombre_ficheroNUM,matriz_numeros num,matriz_letras let) {
lectura.open(nombre_ficheroLET);
lectura.open(nombre_ficheroNUM);
if(lectura.fail())
{
cout<<"Error en el fichero de lectura"<<endl; }
else
{
for(int
i=0;i<FILA;i++)
{
for(int
j=0;j<COLUMNA;j++)
{
lectura>>let[i][j];
lectura>>num[i][j];
while(!lectura.eof())
{
lectura>>let[i][j];
lectura>>num[i][j];
cout<<let[i][j]<<"("<<num[i][j]<<") "; }
}
cout<<endl; }
}
lectura.close();
}
void actualizar_fichero_jugadores(cadena ficheroJ,jugador a) {
escritura.open(ficheroJ);
if(escritura.fail())
{
cout<<"Error en el fichero de escritura"<<endl; }
else
{
escritura<<a.codigo_jugador<<endl;
escritura<<a.nick;
}
escritura.close();
}
bool comprobar_palabra(cadena palabra,cadena nombre_fichero)
{
bool correcto=false;
cadena word;
lectura.open(nombre_fichero);
if(lectura.fail())
{
cout<<"Error en el fichero de lectura"<<endl; }
else
{
lectura>>word;
while(!lectura.eof()&&correcto==false)
{
lectura>>word;
if(word==palabra)
{ correcto=true; }
}
}
return correcto;
}