Pages

segunda-feira, 11 de julho de 2016

Jogo de acertar o numero sorteado usando manipulação de arquivo em c

faça um programa que sorteie 1 numero entre 0 e 150. peça para o usuário tentar adivinhar o numero sorteado. 
O sistema deverá dar dicas para o usuário, dizendo se o numero sorteado é maior ou menor que o informado pelo usuário.
o programa só irá parar de repetir quando o usuário acertar o numero. no final, mostrar quantas chances o usuário precisou para 
acertar o numero e exiba uma das seguintes mensagens:
  1 a 5 "QUE SORTE! VOCÊ ACERTOU RÁPIDO."
  6 a 10" PARABÉNS VOCÊ FOI BEM, ACERTOU EM X TENTATIVAS."
  ACEIMA DE 10 "VOCÊ PODERIA TER IDO MELHOR"

  MAX PONTUAÇÃO -> 100
  A CADA JOGADA PERDE 1 PONTO
  SE ZERAR, ACABA O JOGO

  MENU 1 NOVO JOGO
  2 - RANKING ->20 MELHORES
  3 - SAIR


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

struct Jogador{
char nome[30];
int pontuacao;
};

typedef struct Jogador Jog;

struct Arvore{
Jog j;
struct Arvore *left, *right;
};

typedef struct Arvore Arv;

int menu();
Jog jogar();
Arv *criaArvore();
Arv *criaNoh(Arv *arvore, Jog j);
int vazia(Arv *a);
void imprimir(Arv *a);
void ordem(Arv *a, FILE *arq);
Arv *carregar();


int menu(){
int opc;

do{
system("cls");
printf("\tMENU\n\n1-NOVO JOGO\n2-RANKING\n0-SAIR");
scanf("%d",&opc);
getchar();
if(opc<0 || opc>2){
printf("\n\n\tERRO");
getchar();
}
}while(opc<0 || opc>2);

return opc;
}

Jog jogar(){
Jog j;
int num, chute;
system("cls");
printf("NOME DO JOGADOR: ");
gets(j.nome);

j.pontuacao = 100;
srand(time(NULL));
num = rand()%151;

do{
system("cls");
printf("QUAL FOI O NUMERO SORTEADO ?[%d]->",num);
scanf("%d",&chute);
getchar();

if(chute != num){
printf("\n\n\tERROUUUUUUUUUUU!!");
j.pontuacao--;
}else{
printf("\n\n\n\tARCERTOU !!!!\n");
}
getchar();
}while(num !=chute && j.pontuacao >0);

if(j.pontuacao == 0){
printf("\n\n\nVOCE PERDEU");
}

printf("\n\n\tSua pontuacao foi :%d ponto(s)",j.pontuacao);
getchar();

return j;
}

Arv *criaArvore(){
return NULL;
}

Arv *criaNoh(Arv *arvore, Jog j){
Arv *aTemp;

if(arvore == NULL){
aTemp = (Arv *)malloc(sizeof(Arv));
aTemp->j = j;
aTemp->left = criaArvore();
aTemp->right = criaArvore();
return aTemp;
}else{
int dir = 0;
aTemp = arvore;
Arv *pai, *raiz = arvore;

while(!vazia(aTemp)){
if(j.pontuacao<= aTemp->j.pontuacao){
pai = aTemp;
aTemp = aTemp->left;
dir = 0;
}else{
pai = aTemp;
aTemp = aTemp->right;
dir = 1;
}
}

aTemp = (Arv *)malloc(sizeof(Arv));
aTemp->j = j;

aTemp->left = criaArvore();
aTemp->right = criaArvore();

if(dir)
pai->right = aTemp;
else
pai->left = aTemp;

return raiz;
}
}

int vazia(Arv *a){
return a == NULL;
}

void imprimir(Arv *a){
if(a->right != NULL)
imprimir(a->right);

printf("Nome: %s | Pontuacao: %d", a->j.nome,a->j.pontuacao);

if(a->left != NULL)
printf("\n\t ESQ ->Nome: %s | Pontuacao: %d", a->left->j.nome,a->left->j.pontuacao);
else
printf("\n\nESQ: NULL");

if(a->right != NULL)
printf("\n\tDIR ->Nome: %s | Pontuacao: %d\n\n",a->right->j.nome,a->right->j.pontuacao);
else
printf("\n\tDIR: NULL\n\n");

if(a->left != NULL)
imprimir(a->left);
}

void ordem(Arv *a, FILE *arq){
fwrite(&a->j, sizeof(Jog), 1, arq);

if(a->left != NULL)
ordem(a->left, arq);
}

Arv *carregar(){
Arv *a = criaArvore();
FILE *arq = fopen("ranking.bin", "rb");

if(arq){
Jog j;

while(!feof(arq)){
if(fread(&j, sizeof(Jog), 1, arq)){
a = criaNoh(a, j);
}
}
fclose(arq);
return a;
}else{
return NULL;
}
}

int main(){
Arv *a = criaArvore();
int opc;
Jog jogador;

a = carregar();

do{
opc = menu();

switch(opc){
case 1:{
jogador = jogar();

a = criaNoh(a, jogador);
break;
}
case 2:{
if(!vazia(a))
imprimir(a);
else
printf("\n\tARVORE VAZIA");
printf("\n\n");
getchar();
break;
}
case 0:{
if(a != NULL){
FILE *arq = fopen("ranking.bin", "wb");

ordem(a, arq);
fclose(arq);
}
break;
}
default:{
printf("ERRO!!!\n\n");
break;
}
}

}while(opc !=0);

return 0;
}

Duvidas ou Trabalhos para fazer entre em Contato: marcofernando71@gmail.com

0 comentários:

Postar um comentário