//============================================================================
// Name        : simon3.cpp
// Author      : Leandro Cadaval, Tomás Jiménez, Ricardo José Meza
// Version     :
// Copyright   :
// Description : Práctica Final de FP, consistente en la implementación del juego del SIMON.
//============================================================================
#include <iostream>
#include <conio2.h>
#include <fstream.h>
#include <windows.h>
using namespace std;
#define N 10
#define maxcar 20
#define M 30
typedef int aleatorios_juego[N];
typedef int fibonacci_puntos[N];
typedef char vector_nick[maxcar];
typedef struct {
 int codigo;
 vector_nick nombre;
 int partidas;
 int puntuacion_ultima;
 int puntuacion_max;
 int veces_final;
 int edad;
} datos_jugador;
typedef struct {
 aleatorios_juego al;
 fibonacci_puntos punt_fib;
} numerosypuntos;
//Prototipo modulos
void presentacion();
int menu();
numerosypuntos inicializar();
void mostrar_aleatorios_prueba(numerosypuntos & n);
void asteriscos();
datos_jugador introducir_datos();
void visualizar_datos(datos_jugador j);
void introducir_datos_fichero(datos_jugador j, ofstream & escritura_jugadores);
bool existencia_jugador_fichero(datos_jugador & j, ifstream & lectura_jugadores,
  int codigoint);
void carga_colores_sonidos_numero0(numerosypuntos n);
void jugar(datos_jugador & j, numerosypuntos n, bool controlador);
void carga_colores_sonidos_numero1(numerosypuntos n);
void carga_colores_sonidos_numero2(numerosypuntos n);
void carga_colores_sonidos_numero3(numerosypuntos n);
void carga_colores_sonidos_numero4(numerosypuntos n);
void carga_colores_sonidos_numero5(numerosypuntos n);
void carga_colores_sonidos_numero6(numerosypuntos n);
void carga_colores_sonidos_numero7(numerosypuntos n);
void carga_colores_sonidos_numero8(numerosypuntos n);
void carga_colores_sonidos_numero9(numerosypuntos n);
void carga_colores_sonidos_numero10(numerosypuntos n);
bool ronda_1(numerosypuntos n, datos_jugador & j);
bool ronda_2(numerosypuntos n, datos_jugador & j);
bool ronda_3(numerosypuntos n, datos_jugador & j);
bool ronda_4(numerosypuntos n, datos_jugador & j);
bool ronda_5(numerosypuntos n, datos_jugador & j);
bool ronda_6(numerosypuntos n, datos_jugador & j);
bool ronda_7(numerosypuntos n, datos_jugador & j);
bool ronda_8(numerosypuntos n, datos_jugador & j);
bool ronda_9(numerosypuntos n, datos_jugador & j);
bool ronda_10(numerosypuntos n, datos_jugador & j);
void instrucciones_juego(numerosypuntos n);
void actualizar_fichero(ofstream & escritura_jugadores, datos_jugador j);
int calculo_fibonacci(int n);
void introducir_datosjugador_menor_enfichero(ofstream & esciturajugadormenor, datos_jugador j);
int main() {
 datos_jugador jug;
 numerosypuntos nu;
 int opc;
 ifstream lectura_jugadores;
 ofstream escritura_jugadores;
 ofstream esciturajugadormenor;
 bool cont;
 int cod;
 presentacion();
 opc = menu();
 while (opc != 11) {
  switch (opc) {
  case 1:
   cout
   << "Inicializamos el conjunto de aleatorios de enteros y puntos para jugar."
   << endl;
   nu = inicializar();
   asteriscos();
   break;
  case 2:
   cout << "Introduce tus datos :" << endl;
   jug = introducir_datos();
   asteriscos();
   break;
  case 3:
   cout << "Comprobaremos los aleatorios generados." << endl;
   mostrar_aleatorios_prueba(nu);
   asteriscos();
   break;
  case 4:
   cout << "Estos son los datos del jugador :" << endl;
   asteriscos();
   visualizar_datos(jug);
   asteriscos();
   break;
  case 5:
   cout
   << "Introducimos los datos del jugador en el fichero " "simon.txt" ""
   << endl;
   introducir_datos_fichero(jug, escritura_jugadores);
   cout
   << "Los datos han sido introducidos al fichero satisfactoriamente ."
   << endl;
   break;
  case 6:
   cout
   << "Comprobamos si el jugador introducido está disponible en el fichero :"
   << endl;
   cout << "Introduce codigo del jugador para localizar :" << endl;
   cin >> cod;
   existencia_jugador_fichero(jug, lectura_jugadores, cod);
   asteriscos();
   break;
  case 7:
   instrucciones_juego(nu);
   asteriscos();
   break;
  case 8:
   textcolor(LIGHTBLUE);
   cout << "¡¡BIENVENIDO/A AL JUEGO DEL SIMON:   " << jug.nombre
     << endl;
   Sleep(2000);
   jugar(jug, nu, cont);
   break;
  case 9:
   actualizar_fichero(escritura_jugadores, jug);
   asteriscos();
   break;
  case 10:
  introducir_datosjugador_menor_enfichero(esciturajugadormenor,jug);
  cout<<"Los datos del jugador menor se han guaradado excelentemente en el fichero"<<endl;
  break;
  }
  opc = menu();
 }
 cout << "Eso, ¡sin viciarse que eso es malo!" << endl;
 system("PAUSE");
 return 0;
}
void presentacion() {
 textcolor(YELLOW);
 cout
 << "***********************************************************************************************"
 << endl;
 cout
 << "******************************  BIENVENIDO/A LA PRACTICA FINAL DE FP       ********************"
 << endl;
 cout
 << "******************************            CURSO 2015/16                    ********************"
 << endl;
 cout
 << "******************************          JUEGO 'SUPER SIMON'                ********************"
 << endl;
 cout
 << "******************************    REALIZADO POR: LEANDRO & TOMAS & RICARDO ********************"
 << endl;
 cout
 << "***********************************************************************************************"
 << endl;
 Beep(330, 100);
 Sleep(100);
 Beep(330, 100);
 Sleep(300);
 Beep(330, 100);
 Sleep(300);
 Beep(262, 100);
 Sleep(100);
 Beep(330, 100);
 Sleep(300);
 Beep(392, 100);
 Sleep(700);
 Beep(196, 100);
 Sleep(700);
}
int menu() {
 textcolor(WHITE);
 int opcion;
 cout << "1.INICIALIZAR NUMEROS ALEATORIOS Y PUNTOS." << endl;
 cout << "2.INICIALIZAR JUGADOR NUEVO." << endl;
 cout
 << "3.VISUALIZAR NUMEROS ALEATORIOS(SOLO PARA PRUEBAS): BAJO CONTRASEÑA."
 << endl;
 cout << "4.VISUALIZAR LOS DATOS DEL JUGADOR." << endl;
 cout << "5.INTRODUCIR JUGADOR EN EL FICHERO." << endl;
 cout << "6.COMPROBACION DE LA EXISTENCIA DEL JUGADOR EN EL FICHERO."
   << endl;
 cout << "7.INSTRUCCIONES DEL JUEGO (MÓDULO EXTRA AÑADIDO POR NOSOTROS)"
   << endl;
 cout << "8.JUGAR AL JUEGO." << endl;
 cout << "9.ACTUALIZAR DATOS DEL FICHERO DE JUGADORES." << endl;
 cout<<"10.ALMACENAR DATOS JUGADOR MENOR DE EDAD EN FICHERO"<<endl;
 cout << "11.SALIR DEL PROGRAMA." << endl;
 cout << "Introduce opcion de 1 a 10 :" << endl;
 cin >> opcion;
 while (opcion < 1 || opcion > 11) {
  cout
  << "Error, opciOn introducida no es valida. Introduce una opcion de 1 a 9 :"
  << endl;
  cin >> opcion;
 }
 return opcion;
}
numerosypuntos inicializar() {
 numerosypuntos n;
 srand(time(NULL));
 for (int i = 0; i < N; i++) {
  n.al[i] = rand() %11;
 }
 for (int i = 0; i < N; i++) {
  n.punt_fib[i] = calculo_fibonacci(i);
 }
 cout << "Aleatorios y puntos inicializados satisfactoriamente:)" << endl;
 return n;
}
void mostrar_aleatorios_prueba(numerosypuntos & n) {
 //Contraseña: 12345
 int contrasena;
 cout
 << "Mostraremos el vector con todos los aleatorios, pero antes, INTRODUZCA SU CONTRASENIA :"
 << endl;
 cin >> contrasena;
 while (contrasena != 12345) {
  cout
  << "Error, contraseña incorrecta. Introduzca de nuevo la contraseña :"
  << endl;
  cin >> contrasena;
 }
 cout << "Aqui estan los aleatorios generados en el vector :" << endl;
 for (int i = 0; i < N; i++) {
  cout << "El numero :   " << i << "    es     :" << n.al[i] << endl;
 }
 for (int i = 0; i < N; i++) {
  cout << "En la posicion fibonacci :  " << i
    << "   se encuentrar los puntos:   " << n.punt_fib[i] << endl;
 }
}
void asteriscos() {
 cout
 << "**************************************************************************************"
 << endl;
}
int calculo_fibonacci(int n) {
 int fib;
 if ((n == 0) || (n == 1)) {
  fib = 1;
 } else {
  fib = (calculo_fibonacci(n - 2) + calculo_fibonacci(n - 1));
 }
 return fib;
}
datos_jugador introducir_datos() {
 datos_jugador j;
 cout << "Introduce el codigo del jugador :" << endl;
 cin >> j.codigo;
 cout << "Introduce el nombre del jugador :" << endl;
 cin >> j.nombre;
 cout<<"Introduce tu edad:"<<endl;
 cin>>j.edad;
 if(j.edad<18){
  cout<<"Solo para mayores de 18 anio"<<endl;
  cout<<"Tus datos seran guardados en un fichero llamado jugadormenot.txt,posteriormente"<<endl;
 }
 j.partidas = 0;
 j.puntuacion_ultima = 0;
 j.puntuacion_max = 0;
 j.veces_final = 0;
 return j;
}
void visualizar_datos(datos_jugador j) {
 cout << "El codigo del jugador es  :    " << j.codigo << endl;
 cout << "EL nombre del jugador es  :    " << j.nombre << endl;
 cout << "El jugador   :   " << j.nombre << "    lleva   :" << j.partidas
   << "   jugadas  ." << endl;
 cout << "El jugador   :   " << j.nombre << "  consiguo un total de   :   "
   << j.puntuacion_ultima << "    puntos la ultima vez que jugo. "
   << endl;
 cout << "El jugador   :   " << j.nombre
   << "   ha conseguido una puntuacion maxima de :  "
   << j.puntuacion_max << "  puntos." << endl;
 cout << "El jugador   :   " << j.nombre
   << "   ha llegado al final del juego  :   " << j.veces_final
   << "  veces." << endl;
}
void introducir_datos_fichero(datos_jugador j, ofstream & escritura_jugadores) {
 cout
 << "Vamos a guardar los datos del jugador en el fichero de texto : simon.txt."
 << endl;
 escritura_jugadores.open("simon.txt");
 if (escritura_jugadores.fail()) {
  cout << "Error en la apertura del fichero simon.txt, lo sentimos."
    << endl;
 } else {
  escritura_jugadores << j.codigo << endl;
  escritura_jugadores << j.nombre << endl;
  escritura_jugadores << j.partidas << endl;
  escritura_jugadores << j.puntuacion_ultima << endl;
  escritura_jugadores << j.puntuacion_max << endl;
  escritura_jugadores << j.veces_final << endl;
 }
 escritura_jugadores.close();
}
bool existencia_jugador_fichero(datos_jugador & j, ifstream & lectura_jugadores,
  int codigoint) {
 bool existe = false;
 lectura_jugadores.open("simon.txt");
 if (lectura_jugadores.fail()) {
  cout
  << "Lo sentimos, se ha producido un error en la lectura del fichero."
  << endl;
 } else {
  lectura_jugadores >> j.codigo;
  while (!lectura_jugadores.eof() && existe == false) {
   if (codigoint == j.codigo) {
    existe = true;
   }
   lectura_jugadores >> j.nombre;
   lectura_jugadores >> j.partidas;
   lectura_jugadores >> j.puntuacion_max;
   lectura_jugadores >> j.puntuacion_ultima;
   lectura_jugadores >> j.veces_final;
   lectura_jugadores >> j.codigo;
  }
  if (existe == false) {
   cout
   << "El jugador que has introducido no se encuentra en el fichero, por lo tanto, lo vamos a introducir:  "
   << endl;
   j = introducir_datos();
  }
  cout << "Datos leidos correctamente..." << endl;
  if (codigoint == j.codigo) {
   cout << "El jugador con codigo  :    " << codigoint
     << "   si existe en el fichero." << endl;
  }
 }
 lectura_jugadores.close();
 return existe;
}
void carga_colores_sonidos_numero0(numerosypuntos n) {
 if (n.al[0] == 0) {
  textcolor(1);
  Beep(500, 200);
 }
 if (n.al[0] == 1) {
  textcolor(2);
  Beep(200, 101);
 }
 if (n.al[0] == 2) {
  textcolor(3);
  Beep(797, 145);
 }
 if (n.al[0] == 3) {
  textcolor(4);
  Beep(567, 189);
 }
 if (n.al[0] == 4) {
  textcolor(5);
  Beep(345, 200);
 }
 if (n.al[0] == 5) {
  textcolor(6);
  Beep(200, 400);
 }
 if (n.al[0] == 6) {
  textcolor(7);
  Beep(320, 134);
 }
 if (n.al[0] == 7) {
  textcolor(8);
  Beep(302, 211);
 }
 if (n.al[0] == 8) {
  textcolor(9);
  Beep(211, 400);
 }
 if (n.al[0] == 9) {
  textcolor(10);
  Beep(322, 1000);
 }
 if (n.al[0] == 10) {
  textcolor(11);
  Beep(233, 544);
 } //Fin for
}
void carga_colores_sonidos_numero1(numerosypuntos n) {
 if (n.al[1] == 0) {
  textcolor(1);
  Beep(500, 200);
 }
 if (n.al[1] == 1) {
  textcolor(2);
  Beep(200, 101);
 }
 if (n.al[1] == 2) {
  textcolor(3);
  Beep(797, 145);
 }
 if (n.al[1] == 3) {
  textcolor(4);
  Beep(567, 189);
 }
 if (n.al[1] == 4) {
  textcolor(5);
  Beep(345, 200);
 }
 if (n.al[1] == 5) {
  textcolor(6);
  Beep(200, 400);
 }
 if (n.al[1] == 6) {
  textcolor(7);
  Beep(320, 134);
 }
 if (n.al[1] == 7) {
  textcolor(8);
  Beep(302, 211);
 }
 if (n.al[1] == 8) {
  textcolor(9);
  Beep(211, 400);
 }
 if (n.al[1] == 9) {
  textcolor(10);
  Beep(322, 1000);
 }
 if (n.al[1] == 10) {
  textcolor(11);
  Beep(233, 544);
 } //Fin for
}
void carga_colores_sonidos_numero2(numerosypuntos n) {
 if (n.al[2] == 0) {
  textcolor(1);
  Beep(500, 200);
 }
 if (n.al[2] == 1) {
  textcolor(2);
  Beep(200, 101);
 }
 if (n.al[2] == 2) {
  textcolor(3);
  Beep(797, 145);
 }
 if (n.al[2] == 3) {
  textcolor(4);
  Beep(567, 189);
 }
 if (n.al[2] == 4) {
  textcolor(5);
  Beep(345, 200);
 }
 if (n.al[2] == 5) {
  textcolor(6);
  Beep(200, 400);
 }
 if (n.al[2] == 6) {
  textcolor(7);
  Beep(320, 134);
 }
 if (n.al[2] == 7) {
  textcolor(8);
  Beep(302, 211);
 }
 if (n.al[2] == 8) {
  textcolor(9);
  Beep(211, 400);
 }
 if (n.al[2] == 9) {
  textcolor(10);
  Beep(322, 1000);
 }
 if (n.al[2] == 10) {
  textcolor(11);
  Beep(233, 544);
 } //Fin for
}
void carga_colores_sonidos_numero3(numerosypuntos n) {
 if (n.al[3] == 0) {
  textcolor(1);
  Beep(500, 200);
 }
 if (n.al[3] == 1) {
  textcolor(2);
  Beep(200, 101);
 }
 if (n.al[3] == 2) {
  textcolor(3);
  Beep(797, 145);
 }
 if (n.al[3] == 3) {
  textcolor(4);
  Beep(567, 189);
 }
 if (n.al[3] == 4) {
  textcolor(5);
  Beep(345, 200);
 }
 if (n.al[3] == 5) {
  textcolor(6);
  Beep(200, 400);
 }
 if (n.al[3] == 6) {
  textcolor(7);
  Beep(320, 134);
 }
 if (n.al[3] == 7) {
  textcolor(8);
  Beep(302, 211);
 }
 if (n.al[3] == 8) {
  textcolor(9);
  Beep(211, 400);
 }
 if (n.al[3] == 9) {
  textcolor(10);
  Beep(322, 1000);
 }
 if (n.al[3] == 10) {
  textcolor(11);
  Beep(233, 544);
 } //Fin for
}
void carga_colores_sonidos_numero4(numerosypuntos n) {
 if (n.al[4] == 0) {
  textcolor(1);
  Beep(500, 200);
 }
 if (n.al[4] == 1) {
  textcolor(2);
  Beep(200, 101);
 }
 if (n.al[4] == 2) {
  textcolor(3);
  Beep(797, 145);
 }
 if (n.al[4] == 3) {
  textcolor(4);
  Beep(567, 189);
 }
 if (n.al[4] == 4) {
  textcolor(5);
  Beep(345, 200);
 }
 if (n.al[4] == 5) {
  textcolor(6);
  Beep(200, 400);
 }
 if (n.al[4] == 6) {
  textcolor(7);
  Beep(320, 134);
 }
 if (n.al[4] == 7) {
  textcolor(8);
  Beep(302, 211);
 }
 if (n.al[4] == 8) {
  textcolor(9);
  Beep(211, 400);
 }
 if (n.al[4] == 9) {
  textcolor(10);
  Beep(322, 1000);
 }
 if (n.al[4] == 10) {
  textcolor(11);
  Beep(233, 544);
 } //Fin for
}
void carga_colores_sonidos_numero5(numerosypuntos n) {
 if (n.al[5] == 0) {
  textcolor(1);
  Beep(500, 200);
 }
 if (n.al[5] == 1) {
  textcolor(2);
  Beep(200, 101);
 }
 if (n.al[5] == 2) {
  textcolor(3);
  Beep(797, 145);
 }
 if (n.al[5] == 3) {
  textcolor(4);
  Beep(567, 189);
 }
 if (n.al[5] == 4) {
  textcolor(5);
  Beep(345, 200);
 }
 if (n.al[5] == 5) {
  textcolor(6);
  Beep(200, 400);
 }
 if (n.al[5] == 6) {
  textcolor(7);
  Beep(320, 134);
 }
 if (n.al[5] == 7) {
  textcolor(8);
  Beep(302, 211);
 }
 if (n.al[5] == 8) {
  textcolor(9);
  Beep(211, 400);
 }
 if (n.al[5] == 9) {
  textcolor(10);
  Beep(322, 1000);
 }
 if (n.al[5] == 10) {
  textcolor(11);
  Beep(233, 544);
 } //Fin for
}
void carga_colores_sonidos_numero6(numerosypuntos n) {
 if (n.al[6] == 0) {
  textcolor(1);
  Beep(500, 200);
 }
 if (n.al[6] == 1) {
  textcolor(2);
  Beep(200, 101);
 }
 if (n.al[6] == 2) {
  textcolor(3);
  Beep(797, 145);
 }
 if (n.al[6] == 3) {
  textcolor(4);
  Beep(567, 189);
 }
 if (n.al[6] == 4) {
  textcolor(5);
  Beep(345, 200);
 }
 if (n.al[6] == 5) {
  textcolor(6);
  Beep(200, 400);
 }
 if (n.al[6] == 6) {
  textcolor(7);
  Beep(320, 134);
 }
 if (n.al[6] == 7) {
  textcolor(8);
  Beep(302, 211);
 }
 if (n.al[6] == 8) {
  textcolor(9);
  Beep(211, 400);
 }
 if (n.al[6] == 9) {
  textcolor(10);
  Beep(322, 1000);
 }
 if (n.al[6] == 10) {
  textcolor(11);
  Beep(233, 544);
 } //Fin for
}
void carga_colores_sonidos_numero7(numerosypuntos n) {
 if (n.al[7] == 0) {
  textcolor(1);
  Beep(500, 200);
 }
 if (n.al[7] == 1) {
  textcolor(2);
  Beep(200, 101);
 }
 if (n.al[7] == 2) {
  textcolor(3);
  Beep(797, 145);
 }
 if (n.al[7] == 3) {
  textcolor(4);
  Beep(567, 189);
 }
 if (n.al[7] == 4) {
  textcolor(5);
  Beep(345, 200);
 }
 if (n.al[7] == 5) {
  textcolor(6);
  Beep(200, 400);
 }
 if (n.al[7] == 6) {
  textcolor(7);
  Beep(320, 134);
 }
 if (n.al[7] == 7) {
  textcolor(8);
  Beep(302, 211);
 }
 if (n.al[7] == 8) {
  textcolor(9);
  Beep(211, 400);
 }
 if (n.al[7] == 9) {
  textcolor(10);
  Beep(322, 1000);
 }
 if (n.al[7] == 10) {
  textcolor(11);
  Beep(233, 544);
 } //Fin for
}
void carga_colores_sonidos_numero8(numerosypuntos n) {
 if (n.al[8] == 0) {
  textcolor(1);
  Beep(500, 200);
 }
 if (n.al[8] == 1) {
  textcolor(2);
  Beep(200, 101);
 }
 if (n.al[8] == 2) {
  textcolor(3);
  Beep(797, 145);
 }
 if (n.al[8] == 3) {
  textcolor(4);
  Beep(567, 189);
 }
 if (n.al[8] == 4) {
  textcolor(5);
  Beep(345, 200);
 }
 if (n.al[8] == 5) {
  textcolor(6);
  Beep(200, 400);
 }
 if (n.al[8] == 6) {
  textcolor(7);
  Beep(320, 134);
 }
 if (n.al[8] == 7) {
  textcolor(8);
  Beep(302, 211);
 }
 if (n.al[8] == 8) {
  textcolor(9);
  Beep(211, 400);
 }
 if (n.al[8] == 9) {
  textcolor(10);
  Beep(322, 1000);
 }
 if (n.al[8] == 10) {
  textcolor(11);
  Beep(233, 544);
 } //Fin for
}
void carga_colores_sonidos_numero9(numerosypuntos n) {
 if (n.al[9] == 0) {
  textcolor(1);
  Beep(500, 200);
 }
 if (n.al[9] == 1) {
  textcolor(2);
  Beep(200, 101);
 }
 if (n.al[9] == 2) {
  textcolor(3);
  Beep(797, 145);
 }
 if (n.al[9] == 3) {
  textcolor(4);
  Beep(567, 189);
 }
 if (n.al[9] == 4) {
  textcolor(5);
  Beep(345, 200);
 }
 if (n.al[9] == 5) {
  textcolor(6);
  Beep(200, 400);
 }
 if (n.al[9] == 6) {
  textcolor(7);
  Beep(320, 134);
 }
 if (n.al[9] == 7) {
  textcolor(8);
  Beep(302, 211);
 }
 if (n.al[9] == 8) {
  textcolor(9);
  Beep(211, 400);
 }
 if (n.al[9] == 9) {
  textcolor(10);
  Beep(322, 1000);
 }
 if (n.al[9] == 10) {
  textcolor(11);
  Beep(233, 544);
 } //Fin for
}
void carga_colores_sonidos_numero10(numerosypuntos n) {
 if (n.al[10] == 0) {
  textcolor(1);
  Beep(500, 200);
 }
 if (n.al[10] == 1) {
  textcolor(2);
  Beep(200, 101);
 }
 if (n.al[10] == 2) {
  textcolor(3);
  Beep(797, 145);
 }
 if (n.al[10] == 3) {
  textcolor(4);
  Beep(567, 189);
 }
 if (n.al[10] == 4) {
  textcolor(5);
  Beep(345, 200);
 }
 if (n.al[10] == 5) {
  textcolor(6);
  Beep(200, 400);
 }
 if (n.al[10] == 6) {
  textcolor(7);
  Beep(320, 134);
 }
 if (n.al[10] == 7) {
  textcolor(8);
  Beep(302, 211);
 }
 if (n.al[10] == 8) {
  textcolor(9);
  Beep(211, 400);
 }
 if (n.al[10] == 9) {
  textcolor(10);
  Beep(322, 1000);
 }
 if (n.al[10] == 10) {
  textcolor(11);
  Beep(233, 544);
 } //Fin for
}
bool ronda_1(numerosypuntos n, datos_jugador & j) {
 bool controlador=true;
 int numero_int;
 clrscr();
 carga_colores_sonidos_numero0(n);
 cout << n.al[0] << endl;
 Sleep(1500);
 textcolor(WHITE);
 cout << "Esperamos 5 segundos a que memorices el contenido..." << endl;
 Sleep(5000); //Espero 5 segundos
 clrscr();
 cout << "Introduce los numeros que has visto :" << endl;
 for(int i=0;i<1;i++)
  {
   cin>>numero_int;
   if(numero_int!=n.al[i])
   {
    controlador=false;
    break;
   }
  }
  if(controlador)
  {
   j.puntuacion_ultima = n.punt_fib[0];
   cout << "¡¡FELICIDADES!! Has logrado pasar la ronda 1." << endl;
   cout << "Llevas una puntuacion total de   :  " << j.puntuacion_ultima
     << endl;
  cout << "******************RONDA 2*************************************"
    << endl;
  Sleep(4000);
 }
  else
  {
   j.partidas++;
   j.puntuacion_ultima = j.puntuacion_ultima-M/3;
   j.puntuacion_max = j.puntuacion_ultima;
   cout << "Tu puntuacion es de :   " << j.puntuacion_max << endl;
  }
 return controlador;
}
bool ronda_2(numerosypuntos n, datos_jugador & j) {
 bool controlador;
 int numero_int;
 clrscr();
 carga_colores_sonidos_numero0(n);
 cout << n.al[0] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero1(n);
 cout << n.al[1] << endl;
 textcolor(WHITE);
 cout << "Esperamos 5 segundos a que memorices el contenido..." << endl;
 Sleep(5000); //Espero 5 segundos
 clrscr();
 cout << "Introduce los numeros que has visto :" << endl;
 for(int i=0;i<2;i++)
  {
   cin>>numero_int;
   if(numero_int!=n.al[i])
   {
    controlador=false;
    break;
   }
  }
  if(controlador)
  {
   j.puntuacion_ultima = n.punt_fib[1];
   cout << "¡¡FELICIDADES!! Has logrado pasar la ronda 2." << endl;
   cout << "Llevas una puntuacion total de   :  " << j.puntuacion_ultima
     << endl;
  cout << "******************RONDA 3*************************************"
    << endl;
  Sleep(4000);
 }
  else
  {
   j.partidas++;
   j.puntuacion_ultima = n.punt_fib[1];
   j.puntuacion_max = j.puntuacion_ultima;
   cout << "Tu puntuacion es de :   " << j.puntuacion_max << endl;
  }
 return controlador;
}
bool ronda_3(numerosypuntos n, datos_jugador & j) {
 bool controlador=true;
 int numero_int;
 clrscr();
 carga_colores_sonidos_numero0(n);
 cout << n.al[0] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero1(n);
 cout << n.al[1] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero2(n);
 cout << n.al[2] << endl;
 textcolor(WHITE);
 cout << "Esperamos 5 segundos a que memorices el contenido..." << endl;
 Sleep(5000); //Espero 5 segundos
 clrscr();
 cout << "Introduce los numeros que has visto :" << endl;
 for(int i=0;i<3;i++)
 {
  cin>>numero_int;
  if(numero_int!=n.al[i])
  {
   controlador=false;
   break;
  }
 }
 if(controlador)
 {
  j.puntuacion_ultima = n.punt_fib[2];
  cout << "¡¡FELICIDADES!! Has logrado pasar la ronda 3." << endl;
  cout << "Llevas una puntuacion total de   :  " << j.puntuacion_ultima
    << endl;
  cout << "******************RONDA 4*************************************"
    << endl;
  Sleep(4000);
 }
 else
 {
  j.partidas++;
  j.puntuacion_ultima = n.punt_fib[1];
  j.puntuacion_max = j.puntuacion_ultima;
  cout << "Tu puntuacion es de :   " << j.puntuacion_max << endl;
 }
 return controlador;
}
bool ronda_4(numerosypuntos n, datos_jugador & j) {
 bool controlador;
 int numero_int;
 clrscr();
 carga_colores_sonidos_numero0(n);
 cout << n.al[0] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero1(n);
 cout << n.al[1] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero2(n);
 cout << n.al[2] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero3(n);
 cout << n.al[3] << endl;
 textcolor(WHITE);
 cout << "Esperamos 5 segundos a que memorices el contenido..." << endl;
 Sleep(5000); //Espero 5 segundos
 clrscr();
 cout << "Introduce los numeros que has visto :" << endl;
 for(int i=0;i<4;i++)
  {
   cin>>numero_int;
   if(numero_int!=n.al[i])
   {
    controlador=false;
    break;
   }
  }
  if(controlador)
  {
   j.puntuacion_ultima = n.punt_fib[3];
   cout << "¡¡FELICIDADES!! Has logrado pasar la ronda 4." << endl;
   cout << "Llevas una puntuacion total de   :  " << j.puntuacion_ultima
     << endl;
  cout << "******************RONDA 5*************************************"
    << endl;
  Sleep(4000);
 }
  else
  {
   j.partidas++;
   j.puntuacion_ultima = n.punt_fib[2];
   j.puntuacion_max = j.puntuacion_ultima;
   cout << "Tu puntuacion es de :   " << j.puntuacion_max << endl;
  }
 return controlador;
}
bool ronda_5(numerosypuntos n, datos_jugador & j) {
 bool controlador;
 int numero_int;
 clrscr();
 carga_colores_sonidos_numero0(n);
 cout << n.al[0] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero1(n);
 cout << n.al[1] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero2(n);
 cout << n.al[2] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero3(n);
 cout << n.al[3] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero4(n);
 cout << n.al[4] << endl;
 textcolor(WHITE);
 cout << "Esperamos 5 segundos a que memorices el contenido..." << endl;
 Sleep(5000); //Espero 5 segundos
 clrscr();
 cout << "Introduce los numeros que has visto :" << endl;
 for(int i=0;i<3;i++)
  {
   cin>>numero_int;
   if(numero_int!=n.al[i])
   {
    controlador=false;
    break;
   }
  }
  if(controlador)
  {
   j.puntuacion_ultima = n.punt_fib[4];
   cout << "¡¡FELICIDADES!! Has logrado pasar la ronda 5." << endl;
   cout << "Llevas una puntuacion total de   :  " << j.puntuacion_ultima
     << endl;
  j.puntuacion_ultima = n.punt_fib[4] + M / 2;
 cout<< "Y POR HABER PASADO YA LA MITAD DEL JUEGO, ¡¡¡TE LLEVAS UN BONUS DE 15 PUNTOS!!!" << endl;
  Beep(322, 1000);
  Beep(122, 1000);
  Beep(343, 1000);
  cout << "Llevas una puntuacion total de   :  " << j.puntuacion_ultima
    << endl;
  cout << "******************RONDA 6*************************************"
    << endl;
  Sleep(4000);
 }
  else
  {
   j.partidas++;
   j.puntuacion_ultima = n.punt_fib[3];
   j.puntuacion_max = j.puntuacion_ultima;
   cout << "Tu puntuacion es de :   " << j.puntuacion_max << endl;
  }
 return controlador;
}
bool ronda_6(numerosypuntos n, datos_jugador & j) {
 bool controlador;
 int numero_int;
 clrscr();
 carga_colores_sonidos_numero0(n);
 cout << n.al[0] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero1(n);
 cout << n.al[1] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero2(n);
 cout << n.al[2] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero3(n);
 cout << n.al[3] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero4(n);
 cout << n.al[4] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero5(n);
 cout << n.al[5] << endl;
 textcolor(WHITE);
 cout << "Esperamos 5 segundos a que memorices el contenido..." << endl;
 Sleep(5000); //Espero 5 segundos
 clrscr();
 cout << "Introduce los numeros que has visto :" << endl;
 for(int i=0;i<6;i++)
  {
   cin>>numero_int;
   if(numero_int!=n.al[i])
   {
    controlador=false;
    break;
   }
  }
  if(controlador)
  {
   j.puntuacion_ultima = n.punt_fib[5]+M/2;
   cout << "¡¡FELICIDADES!! Has logrado pasar la ronda 6." << endl;
   cout << "Llevas una puntuacion total de   :  " << j.puntuacion_ultima
     << endl;
  cout << "******************RONDA 7*************************************"
    << endl;
  Sleep(4000);
 }
  else
  {
   j.partidas++;
   j.puntuacion_ultima = n.punt_fib[4]+M/2;
   j.puntuacion_max = j.puntuacion_ultima;
   cout << "Tu puntuacion es de :   " << j.puntuacion_max << endl;
  }
 return controlador;
}
bool ronda_7(numerosypuntos n, datos_jugador & j) {
 bool controlador;
 int numero_int;
 clrscr();
 carga_colores_sonidos_numero0(n);
 cout << n.al[0] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero1(n);
 cout << n.al[1] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero2(n);
 cout << n.al[2] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero3(n);
 cout << n.al[3] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero4(n);
 cout << n.al[4] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero5(n);
 cout << n.al[5] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero6(n);
 cout << n.al[6] << endl;
 textcolor(WHITE);
 cout << "Esperamos 5 segundos a que memorices el contenido..." << endl;
 Sleep(5000); //Espero 5 segundos
 clrscr();
 cout << "Introduce los numeros que has visto :" << endl;
 for(int i=0;i<7;i++)
  {
   cin>>numero_int;
   if(numero_int!=n.al[i])
   {
    controlador=false;
    break;
   }
  }
  if(controlador)
  {
   j.puntuacion_ultima = n.punt_fib[6]+M/2;
   cout << "¡¡FELICIDADES!! Has logrado pasar la ronda 7." << endl;
   cout << "Llevas una puntuacion total de   :  " << j.puntuacion_ultima
     << endl;
  cout << "******************RONDA 8*************************************"
    << endl;
  Sleep(4000);
 }
  else
  {
   j.partidas++;
   j.puntuacion_ultima = n.punt_fib[5]+M/2;
   j.puntuacion_max = j.puntuacion_ultima;
   cout << "Tu puntuacion es de :   " << j.puntuacion_max << endl;
  }
 return controlador;
}
bool ronda_8(numerosypuntos n, datos_jugador & j) {
 bool controlador;
 int numero_int;
 clrscr();
 carga_colores_sonidos_numero0(n);
 cout << n.al[0] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero1(n);
 cout << n.al[1] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero2(n);
 cout << n.al[2] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero3(n);
 cout << n.al[3] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero4(n);
 cout << n.al[4] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero5(n);
 cout << n.al[5] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero6(n);
 cout << n.al[6] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero7(n);
 cout << n.al[7] << endl;
 textcolor(WHITE);
 cout << "Esperamos 5 segundos a que memorices el contenido..." << endl;
 Sleep(5000); //Espero 5 segundos
 clrscr();
 cout << "Introduce los numeros que has visto :" << endl;
 for(int i=0;i<9;i++)
  {
   cin>>numero_int;
   if(numero_int!=n.al[i])
   {
    controlador=false;
    break;
   }
  }
  if(controlador)
  {
   j.puntuacion_ultima = n.punt_fib[7]+M/2;
   cout << "¡¡FELICIDADES!! Has logrado pasar la ronda 8." << endl;
   cout << "Llevas una puntuacion total de   :  " << j.puntuacion_ultima
     << endl;
  cout << "******************RONDA 9*************************************"
    << endl;
  Sleep(4000);
 }
  else
  {
   j.partidas++;
   j.puntuacion_ultima = n.punt_fib[6]+M/2;
   j.puntuacion_max = j.puntuacion_ultima;
   cout << "Tu puntuacion es de :   " << j.puntuacion_max << endl;
  }
 return controlador;
}
bool ronda_9(numerosypuntos n, datos_jugador & j) {
 bool controlador;
 int numero_int;
 clrscr();
 carga_colores_sonidos_numero0(n);
 cout << n.al[0] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero1(n);
 cout << n.al[1] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero2(n);
 cout << n.al[2] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero3(n);
 cout << n.al[3] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero4(n);
 cout << n.al[4] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero5(n);
 cout << n.al[5] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero6(n);
 cout << n.al[6] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero7(n);
 cout << n.al[7] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero8(n);
 cout << n.al[8] << endl;
 textcolor(WHITE);
 cout << "Esperamos 5 segundos a que memorices el contenido..." << endl;
 Sleep(5000); //Espero 5 segundos
 clrscr();
 cout << "Introduce los numeros que has visto :" << endl;
 for(int i=0;i<9;i++)
  {
   cin>>numero_int;
   if(numero_int!=n.al[i])
   {
    controlador=false;
    break;
   }
  }
  if(controlador)
  {
   j.puntuacion_ultima = n.punt_fib[8]+M/2;
   cout << "¡¡FELICIDADES!! Has logrado pasar la ronda 9 ." << endl;
   cout << "Llevas una puntuacion total de   :  " << j.puntuacion_ultima
     << endl;
  cout
  << "******************RONDA 10*************************************"
  << endl;
  Sleep(4000);
 }
  else
  {
   j.partidas++;
   j.puntuacion_ultima = n.punt_fib[7]+M/2;
   j.puntuacion_max = j.puntuacion_ultima;
   cout << "Tu puntuacion es de :   " << j.puntuacion_max << endl;
  }
 return controlador;
}
bool ronda_10(numerosypuntos n, datos_jugador & j) {
 bool controlador;
 int numero_int;
 clrscr();
 carga_colores_sonidos_numero0(n);
 cout << n.al[0] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero1(n);
 cout << n.al[1] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero2(n);
 cout << n.al[2] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero3(n);
 cout << n.al[3] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero4(n);
 cout << n.al[4] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero5(n);
 cout << n.al[5] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero6(n);
 cout << n.al[6] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero7(n);
 cout << n.al[7] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero8(n);
 cout << n.al[8] << "        ";
 Sleep(1500);
 carga_colores_sonidos_numero9(n);
 cout << n.al[9] << endl;
 textcolor(WHITE);
 cout << "Esperamos 5 segundos a que memorices el contenido..." << endl;
 Sleep(5000); //Espero 5 segundos
 clrscr();
 cout << "Introduce los numeros que has visto :" << endl;
 for(int i=0;i<10;i++)
  {
   cin>>numero_int;
   if(numero_int!=n.al[i])
   {
    controlador=false;
    break;
   }
  }
  if(controlador)
  {
   j.puntuacion_ultima = n.punt_fib[9]+M/2+M;
   cout << "¡¡FELICIDADES!! Has logrado pasar la ronda 10." << endl;
   cout << "Llevas una puntuacion total de   :  " << j.puntuacion_ultima
     << endl;
  j.veces_final++;
  j.partidas++;
  cout<< "ENHORABUENA, ¡¡¡ERES UN AUTENTICO GENIO!!! HAS CONSEGUIDO ACABARTE EL JUEGO."<< endl;
  cout<< "**********************¡¡¡FIN DEL JUEGO!!!*************************************"<< endl;
  Sleep(4000);
 }
  else
  {
   j.partidas++;
   j.puntuacion_ultima = n.punt_fib[8]+M/2;
   j.puntuacion_max = j.puntuacion_ultima;
   cout << "Tu puntuacion es de :   " << j.puntuacion_max << endl;
  }
 return controlador;
}
void jugar(datos_jugador & j, numerosypuntos n, bool controlador) {
 bool prueba = true;
 controlador = ronda_1(n, j);
 prueba = controlador;
 if (prueba == true) {
  controlador = ronda_2(n, j);
  prueba = controlador;
 }
 if (prueba == true) {
  controlador = ronda_3(n, j);
  prueba = controlador;
 }
 if (prueba == true) {
  controlador = ronda_4(n, j);
  prueba = controlador;
 }
 if (prueba == true) {
  controlador = ronda_5(n, j);
  prueba = controlador;
 }
 if (prueba == true) {
  controlador = ronda_6(n, j);
  prueba = controlador;
 }
 if (prueba == true) {
  controlador = ronda_7(n, j);
  prueba = controlador;
 }
 if (prueba == true) {
  controlador = ronda_8(n, j);
  prueba = controlador;
 }
 if (prueba == true) {
  controlador = ronda_9(n, j);
  prueba = controlador;
 }
 if (prueba == true) {
  controlador = ronda_10(n, j);
  prueba = controlador;
 } else {
  cout << "Has perdido." << endl;
  Sleep(4000);
  asteriscos();
 }
}
void instrucciones_juego(numerosypuntos n) {
 textcolor(LIGHTRED);
 cout
 << "******************************************************************************************************************************"
 << endl;
 cout
 << "*********************************************INSTRUCCIONES DEL JUEGO**********************************************************"
 << endl;
 cout
 << "******************************************************************************************************************************"
 << endl;
 textcolor(WHITE);
 cout << "1.-Aparecera un numero en la pantalla." << endl;
 cout<< "2.-Deberas memorizar el numero bien, tienes 5 segundos para hacerlo."<< endl;
 cout<< "3.-Despues, deberas introducir ese mismo numero correctamente, si no lo haces el juego terminara y perderas. Tu puntuacion sera de -10."<< endl;
 cout<< "4.-Si aciertas, iras progresando en el juego, pasaras de ronda. Aparecera el numero que aparecio anteriormente, mas otro nuevo. Asi sera hasta que termines las 10 rondas o pierdas."<< endl;
 cout<< "5.-Los puntajes son los siguientes (RONDA 0 ES LA RONDA 1, RONDA 9 ES LA RONDA 10)"<< endl;
 for (int i = 0; i < N; i++) {
  cout << "Si superas la ronda:  " << i << "  te llevas:    "
    << n.punt_fib[i] << "  puntos." << endl;
 }
 cout<< "6.-Si consigues llegar a la mitad del juego (ronda 5), recibiras una bonificación extra de 15 puntos."<< endl;
 cout<< "7.-Si consigues acabar el juego (ronda 10), recibiras una bonificacion extra de 30 puntos. "<< endl;
 textcolor(LIGHTRED);
 cout<< "**************************************¡¡A JUGAR!!*****************************************************************************"<< endl;
 Beep(330, 100);
 Sleep(100);
 Beep(330, 100);
 Sleep(300);
 Beep(330, 100);
 Sleep(300);
 Beep(262, 100);
 Sleep(100);
 Beep(330, 100);
 Sleep(300);
 Beep(392, 100);
 Sleep(700);
 Beep(196, 100);
 Sleep(700);
 textcolor(WHITE);
}
void actualizar_fichero(ofstream & escritura_jugadores, datos_jugador j) {
 escritura_jugadores.open("simon.txt");
 if (escritura_jugadores.fail()) {
  cout << "Error en la apertura del fichero de escritura." << endl;
 } else {
  escritura_jugadores << j.codigo << endl;
  escritura_jugadores << j.nombre << endl;
  escritura_jugadores << j.partidas << endl;
  escritura_jugadores << j.puntuacion_ultima << endl;
  escritura_jugadores << j.puntuacion_max << endl;
  escritura_jugadores << j.veces_final << endl;
 }
 escritura_jugadores.close();
}
void introducir_datosjugador_menor_enfichero(ofstream & esciturajugadormenor, datos_jugador j){
 esciturajugadormenor.open("jugadormenor.txt");
 if (esciturajugadormenor.fail()) {
   cout << "Error en la apertura del fichero de escritura." << endl;
  } else {
   esciturajugadormenor << j.codigo << endl;
   esciturajugadormenor << j.nombre << endl;
   esciturajugadormenor<< j.partidas << endl;
   esciturajugadormenor << j.puntuacion_ultima << endl;
   esciturajugadormenor << j.puntuacion_max << endl;
   esciturajugadormenor << j.veces_final << endl;
   esciturajugadormenor << j.edad << endl;
  }
 esciturajugadormenor.close();
 }
/**bool existencia_jugador_fichero(datos_jugador & j, ifstream & lectura_jugadores,
  int codigoint) {
 bool existe = false;
 lectura_jugadores.open("jugadormenor.txt");
 if (lectura_jugadores.fail()) {
  cout
  << "Lo sentimos, se ha producido un error en la lectura del fichero."
  << endl;
 } else {
  lectura_jugadores >> j.codigo;
  while (!lectura_jugadores.eof() && existe == false) {
   if (codigoint == j.codigo) {
    existe = true;
   }
   lectura_jugadores >> j.nombre;
   lectura_jugadores >> j.partidas;
   lectura_jugadores >> j.puntuacion_max;
   lectura_jugadores >> j.puntuacion_ultima;
   lectura_jugadores >> j.veces_final;
   lectura_jugadores >> j.edad;
   lectura_jugadores >> j.codigo;
  }
  if (existe == false) {
   cout
   << "El jugador que has introducido no se encuentra en el fichero, por lo tanto, lo vamos a introducir:  "
   << endl;
   j = introducir_datos();
  }
  cout << "Datos leidos correctamente..." << endl;
  if (codigoint == j.codigo) {
   cout << "El jugador con codigo  :    " << codigoint
     << "no se puede jugar.Porque no esta permitido el juego a menores" << endl;
  }
 }
 lectura_jugadores.close();
 return existe;
}
**/
