pues nada, aqui esta mi trabajo final, gracias a todos
/*
***************************************************************
***** ABRIR CON WINDOWS PARA OBTENER MEJORES RESULTADOS *****
* *************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct datos{
int numero;
char nombre[32];
int intentos;
int aciertos;
};
//Estas son los subprogramas utilizados
void crearfichero(void);
void uno(struct datos ju[],int jug);
void dos(struct datos ju[],int jug);
void tres(struct datos ju[],int *jug);
int comprueba(struct datos ju[], int n,int jug);
int numvector(struct datos ju[],int n,int jug);
void error(void);
//Estos son ya del juego
int juego(int m);
void llenar(int list1[],int list2[],int m);
void inicializa(int v[],int m);
int danumero(int v[],int x);
void imprime(int v1[],int v2[],int m1[],int m2[],int m);
void ver3s(int v1[],int v2[],int m1[],int m2[],int x,int y,int m);
int main() {
int i,a,njug=0,jugadores;
struct datos jugador[20];
crearfichero();
FILE *registro;
registro=fopen("juego.dat","rb");
while(!feof(registro)){
fread(&jugador[njug],sizeof(struct datos),1,registro);
njug++;
}
jugadores=njug-1;
njug=-1;
while (a!=4){
system("cls");
printf("MENU PRINCIPAL\n\n");
printf("1) Iniciar nueva partida\n");
printf("2) Mostrar estadisticas de las jugadas\n");
printf("3) Registrar usuario\n");
printf("4) Salir\n\nQue quieres hacer: ");
scanf("%d",&a);
fflush( stdin );
switch(a){
case 1:
uno(jugador,jugadores);
break;
case 2:
dos(jugador,jugadores);
break;
case 3:
tres(jugador,&jugadores);
break;
case 4:
system("cls");
printf("Gracias por haber usado el programa\nEspero que nos volvamos a ver\n\n\n");
registro=fopen("juego.dat","wb");
for (i=0;i<jugadores;i++){
fwrite(&jugador[i],sizeof(struct datos),1,registro);
}
fclose(registro);
break;
default:
error();
break;
}
}
}
//Crea el fichero si no existe, si existe lo deja como está
void crearfichero(){
int n,i;
FILE *registro;
struct datos jugador;
registro=fopen("juego.dat","a+b");
fclose(registro);
}
//Elemento del primer menu, sirve para pedir el numero del jugador e iniciar una partida
void uno(struct datos ju[],int jug){
int dif,n,njug;
system("cls");
do{
system("cls");
printf("Dime el numero de jugador: ");
scanf("%d",&n);
while(getchar()!='\n');
}while(comprueba(ju,n,jug)!=1);
njug=numvector(ju,n,jug);
do{printf("\nDime la dificultad (0-5): ");
scanf("%d",&dif);}while(dif>5||dif<0);
system("cls");
printf("Inicia partida el jugador [%d] con la dificultad [%d]",n,dif);
system("sleep 4");
system("cls");
if(juego(dif)==1){
ju[njug].intentos++;
ju[njug].aciertos++;
}else ju[njug].intentos++;
};
//Elemento del primer menú y que despliega otro submenu, nos servira para ver las estadisticas
void dos(struct datos ju[],int jug){
char op;
int n,nivel,njug,i;
float media;
do{
system("cls");
printf("ETADISTICAS\n\n");
printf("a) Mostrar estadisticas un jugador\n");
printf("b) Mostrar todas las estadisticas\n");
printf("c) Volver al menu principal\n\nQue quieres hacer: ");
op=getchar();
while(getchar()!='\n');
switch(op){
case 'a':
do{
system("cls");
printf("Dime el numero de jugador: ");
scanf("%d",&n);
while(getchar()!='\n');
}while(comprueba(ju,n,jug)!=1);
njug=numvector(ju,n,jug);
printf("Estadisticas del Jugador [%d]",n);
media=((float)ju[njug].aciertos/ju[njug].intentos)*100;
if(ju[njug].intentos!=0){
printf("\nNumero: %d Nombre: %s \nIntentos: %d Aciertos: %d --- Media(g/p): %.0f/100 \n\nPresiona enter para salir",
ju[njug].numero,ju[njug].nombre,ju[njug].intentos,ju[njug].aciertos,media);}
else printf("\nNumero: %d Nombre: %s \nIntentos: %d Aciertos: %d --- Media: No se ha jugado %\n\nPresiona enter para salir",
ju[njug].numero,ju[njug].nombre,ju[njug].intentos,ju[njug].aciertos);
while(getchar()!='\n');
break;
case 'b':
system("cls");
printf("-----------------------------");
for(i=0;i<jug;i++){
media=((float)ju[i].aciertos/ju[i].intentos)*100;
printf("\nNumero: %d \nNombre: %s \nIntentos: %d Aciertos: %d \n-----------------------------",
ju[i].numero,ju[i].nombre,ju[i].intentos,ju[i].aciertos);
}
printf("\n\nPresiona enter para salir");
while(getchar()!='\n');
break;
case 'c':
break;
default:
error();
}
}while(op!='c');
}
//Hecho para comprobar si ya existe el numero que se pasa como parametro "n" en el vector jugadores.numero
int comprueba(struct datos ju[], int n,int jug){
int i,control=0;
for (i=0;i<jug;i++){
if(ju[i].numero==n)control++;
}
return control;
}
//Elemento del primer menú, nos sirve para dar de alta un jugador
void tres(struct datos ju[],int *jug){
int n;
do{
system("cls");
printf("Dime el numero de jugador: ");
scanf("%d",&n);
while(getchar()!='\n');
}while(comprueba(ju,n,*jug)>0);
ju[*jug].numero=n;
printf("Damen un nombre: ");
gets(ju[*jug].nombre);
ju[*jug].intentos=0;
ju[*jug].aciertos=0;
system("cls");
printf("Jugador [%d] registrado",ju[*jug].numero);
system("sleep 4");
*jug=*jug+1;
}
//En caso de error se llamara a esta funcion
void error(){
system("cls");
printf(" ****************************\n");
printf(" ** La opcion no es valida **\n");
printf(" ****************************");
system("sleep 2");
}
//Nos dice la posicion del vector en la que se encuentra un número
int numvector(struct datos ju[],int n,int jug){
int i;
for (i=0;i<jug;i++){
if(ju[i].numero==n)return i;
}
}
//Apartir de aqui son subfunciiones relacionadas con el juego
int juego(int m) {
int i,j,a,b,intentos,control=0;
m=m+3;
int lista1[m],lista2[m],mostrar1[m],mostrar2[m];
intentos=m+5;
inicializa(mostrar1,m);
inicializa(mostrar2,m);
llenar(lista1,lista2,m);
for(i=intentos;i>0;i--){
printf(" ********** TIENES %d INTENTOS **********\n\n",i);
imprime(lista1,lista2,mostrar1,mostrar2,m);
printf("\n\n\nPrimera lista(0-%d): ",m-1);
scanf("%d",&a);
printf("Segunda lista(0-%d): ",m-1);
scanf("%d",&b);
if(danumero(lista1,a)==danumero(lista2,b)){
mostrar1[a]=1;
mostrar2[b]=1;
}
ver3s(lista1,lista2,mostrar1,mostrar2,a,b,m);
control=0;
for(j=0;j<m;j++){
if(mostrar1[j]==1)control++;
}
if (control==m){
system("cls");
printf("\nBIEN, HAS GANADO\n");
system("sleep 5");
return 1;
}
}
system("cls");
printf("\nLO LAMENTO, HAS PERDIDO\n");
system("sleep 5");
return 0;
}
void llenar(int list1[],int list2[],int m){
int ale,a=0,i,control=1,num[10];
for(i=0;i<10;i++)num[i]=0;
srand((unsigned) time(NULL));
for (i=0;i<m;i++){
ale=rand();
ale=ale%10;
list1[i]=ale;
num[ale]++;
}
while(control!=0){
control=0;
ale=rand();
ale=ale%10;
if(num[ale]!=0){
list2[a]=ale;
a++;
num[ale]--;
}
for(i=0;i<10;i++){
if(num[i]!=0)control++;
}
}
}
void inicializa(int v[],int m){
int i;
for (i=0;i<m;i++){
v[i]=0;
}
}
int danumero(int v[],int x){
int r;
r=v[x];
return r;
}
void imprime(int v1[],int v2[],int m1[],int m2[],int m){
int i;
printf("\n");
for(i=0;i<m;i++){
if (m1[i]==0)printf(" - "); else printf(" %d ",v1[i]);
}
printf("\n");
for(i=0;i<m;i++){
if (m2[i]==0)printf(" - "); else printf(" %d ",v2[i]);
}
}
void ver3s(int v1[],int v2[],int m1[],int m2[],int x,int y,int m){
int i;
system("cls");
printf(" ********** MEMORIZA EN 3 SEGUNDOS **********\n\n\n");
for(i=0;i<m;i++){
if (m1[i]==1||i==x)printf(" %d ",v1[i]); else printf(" - ");
}
printf("\n");
for(i=0;i<m;i++){
if (m2[i]==1||i==y)printf(" %d ",v2[i]); else printf(" - ");
}
system("sleep 3");
system("cls");
}
No me cruzifiqueis demasiado