Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rajaba21

Manipulação Arquivo e Registro

Recommended Posts

Pessoal,

 

Bom dia, fiz um jogo em c que é um labirinto, acontece que nesse jogo tenho que gravar o nome do jogador e sua pontuação, depois disso comparar e mostrar as 3 maiores pontuações, segue baixo o código completo.

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

//Definições do desenho do mapa
#define SOLO 0
#define BARREIRA 1
#define VOCE 2
#define OBJETIVO 3

FILE *arq;

int coluna_atual=1, linha_atual=1, nivel, subnivel, linha, coluna, opcao, contl, contc, contadorpontos=0;;
char mov;
//char nome[40];

//Mapas
int mapa[10][10] =
{{1,1,1,1,1,1,1,1,1,1},
{1,2,1,1,0,0,1,0,0,1},
{1,0,1,0,1,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,3},
{1,1,1,1,1,1,1,1,1,1}};

int mapa2[10][10]={
1,1,1,1,1,1,1,1,1,1,
1,1,0,0,0,0,0,0,0,1,
1,1,0,0,0,0,0,0,0,1,
1,0,0,1,1,0,1,1,0,1,
1,1,0,1,1,0,1,1,0,1,
1,0,0,0,1,1,1,0,0,1,
1,1,0,0,0,0,1,1,0,1,
1,0,0,1,0,1,1,0,0,1,
1,1,1,1,0,0,1,1,0,3,
1,1,1,1,1,1,1,1,1,1};

int mapa22[20][20] =
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,
1,1,1,1,0,1,1,0,1,1,0,0,0,0,0,1,1,1,0,1,
1,1,0,1,0,1,0,0,1,0,0,1,1,1,1,1,0,1,1,1,
1,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,1,
1,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,1,
1,0,1,0,0,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,
1,0,1,0,1,1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,
1,0,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1,0,1,1,
1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,
1,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,1,0,1,
1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,1,
1,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,1,1,
1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,
1,0,0,1,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,
1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,0,1,1,0,1,
1,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1};

struct JOGADOR
{
    char nome[40];
    int pontuacao, pontuacum;
} JOGADOR;

//Função que irá efetuar o desenho do mapa
void desenhar_mapa()
{
    switch (nivel)
    {
        case(1):
        {
            if (subnivel==1)
            {
                for (linha=0; linha<10; linha++)
                {
                    for (coluna=0; coluna<10; coluna++)
                    {
                        if (mapa[linha][coluna]==VOCE)
                        {
                            printf ("i");
                            continue;
                        }
                        if (mapa[linha][coluna]==SOLO)
                            printf (" ");
                        if (mapa[linha][coluna]==BARREIRA)
                            printf ("*");
                        if (mapa[linha][coluna]==OBJETIVO)
                            printf ("+");
                    }
                    printf ("\n");
                }
            }
            if (subnivel==2)
            {
                for (linha=0; linha<10; linha++)
                {
                    for (coluna=0; coluna<10; coluna++)
                    {
                        if (mapa2[linha][coluna]==VOCE)
                        {
                            printf ("i");
                            continue;
                        }
                        if (mapa2[linha][coluna]==SOLO)
                            printf (" ");
                        if (mapa2[linha][coluna]==BARREIRA)
                            printf ("*");
                        if (mapa2[linha][coluna]==OBJETIVO)
                            printf ("+");
                    }
                    printf ("\n");
                }
            }
            /*if (subnivel==3)
            {
                for (linha=0; linha<10; linha++)
                {
                    for (coluna=0; coluna<10; coluna++)
                    {
                        if (mapa3[linha][coluna]==VOCE)
                        {
                            printf ("i");
                            continue;
                        }
                        if (mapa2[linha][coluna]==SOLO)
                            printf (" ");
                        if (mapa2[linha][coluna]==BARREIRA)
                            printf ("*");
                        if (mapa2[linha][coluna]==OBJETIVO)
                            printf ("+");
                    }
                    printf ("\n");
                }
            }*/
            break;
        }
        case(2):
        {
            for (linha=0; linha<11; linha++)
            {
                for (coluna=0; coluna<11; coluna++)
                {
                    if ((linha==linha_atual) && (coluna==coluna_atual))
                    {
                        printf ("i");
                        continue;
                    }
                    if (mapa[linha][coluna]==SOLO)
                        printf (" ");
                    if (mapa[linha][coluna]==BARREIRA)
                        printf ("*");
                    if (mapa[linha][coluna]==OBJETIVO)
                        printf ("+");
                }
                printf ("\n");
            }
        }
        case(3):
        {
            for (linha=0; linha<12; linha++)
            {
                for (coluna=0; coluna<12; coluna++)
                {
                    if ((linha==linha_atual) && (coluna==coluna_atual))
                    {
                        printf ("i");
                        continue;
                    }
                    if (mapa[linha][coluna]==SOLO)
                        printf (" ");
                    if (mapa[linha][coluna]==BARREIRA)
                        printf ("*");
                    if (mapa[linha][coluna]==OBJETIVO)
                        printf ("+");
                }
                printf ("\n");
            }
            break;
        }
        case(4):
        {
            for (linha=0; linha<13; linha++)
            {
                for (coluna=0; coluna<13; coluna++)
                {
                    if ((linha==linha_atual) && (coluna==coluna_atual))
                    {
                        printf ("i");
                        continue;
                    }
                    if (mapa[linha][coluna]==SOLO)
                        printf (" ");
                    if (mapa[linha][coluna]==BARREIRA)
                        printf ("*");
                    if (mapa[linha][coluna]==OBJETIVO)
                        printf ("+");
                }
                printf ("\n");
            }
            break;
        }
        case(5):
        {
            for (linha=0; linha<14; linha++)
            {
                for (coluna=0; coluna<14; coluna++)
                {
                    if ((linha==linha_atual) && (coluna==coluna_atual))
                    {
                        printf("i");
                        continue;
                    }
                    if (mapa[linha][coluna]==SOLO)
                        printf (" ");
                    if (mapa[linha][coluna]==BARREIRA)
                        printf ("*");
                    if (mapa[linha][coluna]==OBJETIVO)
                        printf ("+");
                }
                printf ("\n");
            }
            break;
        }
        case(6):
        {
            for (linha=0; linha<15; linha++)
            {
                for (coluna=0; coluna<15; coluna++)
                {
                    if ((linha==linha_atual) && (coluna==coluna_atual))
                    {
                        printf ("i");
                        continue;
                    }
                    if (mapa[linha][coluna]==SOLO)
                        printf (" ");
                    if (mapa[linha][coluna]==BARREIRA)
                        printf ("*");
                    if (mapa[linha][coluna]==OBJETIVO)
                        printf ("+");
                }
                printf ("\n");
            }
            break;
        }
        case(7):
        {
            for (linha=0; linha<16; linha++)
            {
                for (coluna=0; coluna<16; coluna++)
                {
                    if ((linha==linha_atual) && (coluna==coluna_atual))
                    {
                        printf ("i");
                        continue;
                    }
                    if (mapa[linha][coluna]==SOLO)
                        printf (" ");
                    if (mapa[linha][coluna]==BARREIRA)
                        printf ("*");
                    if (mapa[linha][coluna]==OBJETIVO)
                        printf ("+");
                }
                printf ("\n");
            }
            break;
        }
        case(8):
        {
            for (linha=0; linha<17; linha++)
            {
                for (coluna=0; coluna<17; coluna++)
                {
                    if ((linha==linha_atual) && (coluna==coluna_atual))
                    {
                        printf("i");
                        continue;
                    }
                    if (mapa[linha][coluna]==SOLO)
                        printf (" ");
                    if (mapa[linha][coluna]==BARREIRA)
                        printf ("*");
                    if (mapa[linha][coluna]==OBJETIVO)
                        printf ("+");
                }
                printf ("\n");
            }
            break;
        }
        case(9):
        {
            for (linha=0; linha<18; linha++)
            {
                for (coluna=0; coluna<18; coluna++)
                {
                    if ((linha==linha_atual) && (coluna==coluna_atual))
                    {
                        printf("i");
                        continue;
                    }
                    if (mapa[linha][coluna]==SOLO)
                        printf (" ");
                    if (mapa[linha][coluna]==BARREIRA)
                        printf ("*");
                    if (mapa[linha][coluna]==OBJETIVO)
                        printf ("+");
                }
                printf ("\n");
            }
            break;
        }
        case(10):
        {
            for (linha=0; linha<19; linha++)
            {
                for (coluna=0; coluna<19; coluna++)
                {
                    if ((linha==linha_atual) && (coluna==coluna_atual))
                    {
                        printf ("i");
                        continue;
                    }
                    if (mapa[linha][coluna]==SOLO)
                        printf (" ");
                    if (mapa[linha][coluna]==BARREIRA)
                        printf ("*");
                    if (mapa[linha][coluna]==OBJETIVO)
                        printf ("+");
                }
                printf ("\n");
            }
            break;
        }
    }
}
void ranking()
{

}
void creditos()
{

}

void gravarranking()
{
    arq = fopen("ranking.dat", "a");
    if (arq == NULL)
    {
        printf("Ocorreu um problema ao abrir o arquivo");
    }
    else
    {
        fputs(JOGADOR.nome, arq);
        fputs("\t", arq);
        //fputs(JOGADOR.pontuacum, arq);
        fputs("\n", arq);
        if(ferror(arq))
        {
            printf("\nErro ao gravar nome");
        }
    }
    fclose(arq);
}

/*void imprimeranking();
{
    int valor, menor1=99999999, menor2=99999998, menor3=99999997;
    char nmenor1[40], nmenor2[40], nmenor3[40];
    arq = fopen("ranking.dat", "r");
    if (arq == NULL)
    {
        printf("Ocorreu um problema ao abrir o arquivo");
    }
    else
    {
        while (!feof(arq))
        {
            fgets(JOGADOR,10,arq);
            if(ferror(arq))
            {
                printf("\nErro ao ler arquivo");
            }
 	 	 	else
 	 	 	{
 	 	 	 	valor=atoi(JOGADOR.pontuacum);
 	 	 	 	//printf("\n%s", str);
 	 	 	 	//printf("\t%d",valor);
 	 	 	 	if (valor<menor1)
 	 	 	 	{
 	 	 	 	    if (valor<menor2)
                    {
                        if (valor<menor3)
                        {
                            menor3=valor;
                            strcpy(nmenor3[40],JOGADOR.nome);
                        }
                        menor2=valor;
                        strcpy(nmenor2[40],JOGADOR.nome);
                    }
 	 	 	 	    menor1=valor;
 	 	 	 	    strcpy(nmenor1[40],JOGADOR.nome);
 	 	 	 	}
            }
        }
        printf ("\nRanking!");
        printf ("\n%s\t\t5d", nmenor3, menor3);
        printf ("\n%s\t\t5d", nmenor2, menor2);
        printf ("\n%s\t\t5d", nmenor2, menor2);
        system ("pause");
    }
}*/
void selecao()
{
    do
    {
        printf("\n                     ______   _    _    ___         ");
        printf("\n                    /_____/  | |  | |  |  _| ");
        printf("\n                      | |    | |==| |  | =_   ");
        printf("\n                      |_|    |_|  |_|  |___|      ");
        printf("\n                                                                 ");
        printf("\n                        ___     _    ______             ");
        printf("\n                       |  _|   | |  /_____/           ");
        printf("\n                       | =_  X | |    | |            ");
        printf("\n                       |___|   |_|    |_|                ");
        printf("\n                                                                   ");
        printf("\n                                                                   ");
        printf("\t\t\t\t  1 START GAME\n");
        printf("\t\t\t  2 RANKING\n");
        printf("\t\t\t\t  3 CREDITS\n");
        printf("\t\t\t\t\t  4 SAIR\n");
        printf("\nDigite o numero da opcao: ");
        scanf("%d", &opcao);
        switch (opcao)
        {
            case (1):
            {
                printf ("Digite seu nome: ");
                fflush (stdin);
                gets (JOGADOR.nome);
                printf ("\n%s, entre com o Nivel desejado (1-10): ", JOGADOR.nome);
                fflush (stdin);
                scanf ("%d", &nivel);
                if (nivel >=1 && nivel <=10)
                {
                    printf ("\nEntre com o Sub Nivel desejado (1-3): ");
                    fflush (stdin);
                    scanf ("%d", &subnivel);
                    system ("cls");
                }
                else
                {
                    exit (0);
                }
                opcao=4;
                break;
            }
            case (2):
            {
                ranking ();
                break;
            }
            case (3):
            {
                creditos ();
                break;
            }
            case (4):
            {
                break;
            }
        }
    }while (opcao != 4);
}
void movimentacao()
{
    if (opcao==4 && nivel != 1 && nivel != 2 && nivel != 3)
    {
        system("exit");
    }
    else
    {
        contadorpontos=0;
        while ((mov!='x') && (mov!='X'))
        {
            //contadorpontos++;
            system ("cls");
            desenhar_mapa ();
            printf ("\nX para sair!\n");
            printf ("\n\n  (W)\n(A)+(D)\n  (S)\n\n"); //Controle
            fflush (stdin);
            mov=getch();
            if ((mov != 'w') && (mov != 'W') && (mov != 's') && (mov != 'S') && (mov != 'a') && (mov != 'A') && (mov != 'd') && (mov != 'D') && (mov != 'x') && (mov != 'X'))
            {
                printf ("\nPOR FAVOR PRESSIONE UMA DAS TECLAS VALIDAS!\n");
                getchar ();
                getchar ();
            }
            if ((mov == 'w') || (mov == 'W'))
            {
                linha_atual=linha_atual-1;
                //Se não for solo ou objetivos retornará posição anterior
                if ((mapa[linha_atual][coluna_atual] != SOLO) && (mapa[linha_atual][coluna_atual] != OBJETIVO))
                {
                    linha_atual=linha_atual+1;
                    JOGADOR.pontuacao=JOGADOR.pontuacao+1;
                    printf ("\nMovimento Invalido!\n");
                    system ("pause");
                    getchar ();
                    getchar ();
                }
                if (mapa[linha_atual][coluna_atual] == OBJETIVO)
                {
                    JOGADOR.pontuacao=JOGADOR.pontuacao+1;
                    printf ("Voce chegou ao final!\n\n");
                    system ("pause");
                    selecao ();
                    break;
                }
                if (mapa[linha_atual][coluna_atual]==SOLO)
                {
                    JOGADOR.pontuacao=JOGADOR.pontuacao+1;
                    mapa[linha_atual][coluna_atual]=VOCE;
                    mapa[linha_atual+1][coluna_atual]=SOLO;
                }
            }
            if ((mov == 's') || (mov == 'S'))
            {
                linha_atual=linha_atual+1;
                //Se não for solo ou objetivos retornará posição anterior
                if ((mapa[linha_atual][coluna_atual] != SOLO) && (mapa[linha_atual][coluna_atual] != OBJETIVO))
                {
                    linha_atual=linha_atual-1;
                    printf ("\nMovimento Invalido!\n");
                    JOGADOR.pontuacao=JOGADOR.pontuacao+1;
                    system ("pause");
                    getchar ();
                    getchar ();
                }
                if (mapa[linha_atual][coluna_atual] == OBJETIVO)
                {
                    printf ("Voce chegou ao final!\n\n");
                    system ("pause");
                    selecao ();
                    break;
                }
                if (mapa[linha_atual][coluna_atual]==SOLO)
                {
                    JOGADOR.pontuacao=JOGADOR.pontuacao+1;
                    mapa[linha_atual][coluna_atual]=VOCE;
                    mapa[linha_atual-1][coluna_atual]=SOLO;
                }
            }
            if ((mov == 'd') || (mov == 'D'))
            {
                coluna_atual = coluna_atual + 1;
                //Se não for solo ou objetivos retornará posição anterior
                if ((mapa[linha_atual][coluna_atual] != SOLO) && (mapa[linha_atual][coluna_atual] != OBJETIVO))
                {
                    JOGADOR.pontuacao=JOGADOR.pontuacao+1;
                    coluna_atual=coluna_atual-1;
                    printf ("\nMovimento Invalido!\n");
                    system ("pause");
                    getchar ();
                    getchar ();
                }
                if (mapa[linha_atual][coluna_atual] == OBJETIVO)
                {
                    JOGADOR.pontuacao=JOGADOR.pontuacao+1;
                    printf ("Voce chegou ao final!\n\n");
                    system ("pause");
                    selecao ();
                    break;
                }
                if (mapa[linha_atual][coluna_atual]==SOLO)
                {
                    JOGADOR.pontuacao=JOGADOR.pontuacao+1;
                    mapa[linha_atual][coluna_atual]=VOCE;
                    mapa[linha_atual][coluna_atual-1]=SOLO;
                }
            }
            if ((mov == 'a') || (mov == 'A'))
            {
                coluna_atual=coluna_atual-1;
                //Se não for solo ou objetivos retornará posição anterior
                if ((mapa[linha_atual][coluna_atual] != SOLO) && (mapa[linha_atual][coluna_atual] != OBJETIVO))
                {
                    JOGADOR.pontuacao=JOGADOR.pontuacao+1;
                    coluna_atual=coluna_atual+1;
                    printf ("\nMovimento Invalido!\n");
                    system ("pause");
                    getchar ();
                    getchar ();
                }
                if (mapa[linha_atual][coluna_atual] == OBJETIVO)
                {
                    JOGADOR.pontuacao=JOGADOR.pontuacao+1;
                    printf ("Voce chegou ao final!\n\n");
                    system ("pause");
                    selecao ();
                    break;
                }
                if (mapa[linha_atual][coluna_atual]==SOLO)
                {
                    JOGADOR.pontuacao=JOGADOR.pontuacao+1;
                    mapa[linha_atual][coluna_atual]=VOCE;
                    mapa[linha_atual][coluna_atual+1]=SOLO;
                }
            }
        }
    }
    JOGADOR.pontuacum=JOGADOR.pontuacum+JOGADOR.pontuacao;
    gravarranking();
}

main()
{
    fflush (stdin);
    arq = fopen("ranking.dat", "r");
    if (arq == NULL)
    {
        arq = fopen("ranking.dat", "w");
        if (arq == NULL)
        {
            printf("Ocorreu um problema ao criar o arquivo");
        }
        else
        {
            printf ("Arquivo ranking.dat criado com sucesso!\n");
            system ("pause");
        }
    }
    fclose(arq);
    selecao ();
    movimentacao ();
}

Por favor me ajudem!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.