Manipulação Arquivo e Registro
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!
Discussão (1)
Carregando comentários...