#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Implementar um programa de gerenciamento de high scores. O programa deve:
//a. carregar os high scores de um arquivo e mostrar. Cada high score é composto de um nome (max. 10 caracteres) e um inteiro (pontuação).
//b. pedir ao usuário o seu nome e a sua pontuação no jogo.
//c. posicionar os dados do usuário na tabela de highest scores (max. 5) e regravar no arquivo.

typedef struct{
    char pessoa[12];
    int pontos;
}highscore;

highscore rank;

FILE *pont_arq;

void abre_arquivo(void){//Abre o arquivo

	pont_arq=fopen("arquivo.txt","a+b");

}

void menu(){
    printf("MENU\n\n");
    printf("Inserir Dados   1\n");
    printf("Mostrar Ranking 2\n");
    printf("Sair            3\n");
}

void inserir(){

printf("\nDigite o nome do usuario: ");
        fflush(stdin);
        gets(rank.pessoa);
        if (strlen(rank.pessoa)>10){
            printf("Limite de letras maior que o permitido! Somente aceitos ate 10 caracteres.\n");
            printf("Digite o nome do usuario novamente: ");
                fflush(stdin);
                gets(rank.pessoa);
        }

printf ("\nDigite sua pontuacao no jogo: ");
    scanf("%i",&rank.pontos);
    if (rank.pontos>1000){
        printf("\nPontuacao excede o limite maximo ou foi digitada de forma incorreta. Digite novamente:");
            scanf("%i",&rank.pontos);
    }

	fwrite(&rank, sizeof(highscore), 1, pont_arq);//Insere os dados no arquivo
    printf("\n\nOperacao realizada\n\n");

    system("pause");
}

void mostrar(){

    //Exibe em forma de tabela
    int j=1;
    printf("\n ___________________________");
	printf("\n|NOME           |PONTUACAO  |");
	printf("\n|_______________|___________|");

	rewind(pont_arq);//Move o cursor para o inicio do arquivo

    while(fread(&rank, sizeof(highscore), 1, pont_arq)){
            dados(j);
    }

    printf("\n|_______________|___________|");
	printf("\nTecle [Enter] para voltar ao menu...");
    system("pause>null");

}

int dados(int i){
    /*Esta função a linha contendo os dados do jogador, linha-a-linha.
        de aocordo com a quantidade
    */
    printf("\n|%-15s|%-11d|",rank.pessoa,rank.pontos);
}

int main(){
int opcao;
char nome;
abre_arquivo();

do{
        system("cls");
        printf("HIGH SCORE\n\n\n");
        menu();
        printf("\nEscolha uma opcao: ");
        scanf("%d",&opcao);

        switch(opcao){
            case 1: inserir();  break;
            case 2: mostrar(); break;
            case 3: exit(1);   break;
            default: printf("\n\nOpcao invalida\n");
            system("pause");
            break;
        }
    }while(opcao != 3);
    fclose(pont_arq);
    system("pause");

}
