Ir ao conteúdo
  • Cadastre-se

joel bafumba liseli

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. #include <stdio.h> #include <stdlib.h> #include <time.h> /*O programa cria duas tabelas uma com as minas (TAB) e outra com '*'(TAB_user) conforme o jogador abrir as casas da TAB_user o programa confere no TABe executa a ação resultante da opção escolhida abrir, marcar mina ou duvida. */ void imprimirTAB(char **TAB_user,int l, int c); void minas(char **TAB, int l,int c, int M);// colocar minas no TAB sem repetição + contagem de minas ao redor void terminar (char **TAB, int l);// liberar a mémoria ocupada int numMinas(char **TAB, int jl, int jc, int l, int c);// contar minas ao redor void inicializarTAB(char **TAB,int l, int c, int tipo);// tipo = 0 (para usuario) e tipo = 1(tabuleiro escondido) void jogoValido(char **TAB, char **TAB_user,int jl, int jc, int l, int c); int conferir(char **TAB_user, int l, int c, int M, int minaCerta);// conferir se mina aberta depois da cada jogada void jogoDuvida (char **TAB_user, int jl,int jc); // marcar duvida int jogoMinas (char **TAB, char **TAB_user, int jl,int jc);// marcar mina int conferirLocalMinas(int **v,int linha, int coluna, int n);// conferir se casa escolhida para minha já possui uma mina int main() { srand(time(0)); int saida;// confere marcagem certa de mina int numValido = 0, numMina = 0;// numero de casa aberta certa e casa de minas marcada corretamente int i,j,l,c,jl,jc,M, dado, resultado = 0; // dado armazena o numero de inteiro guardado no buffer char tipo, legenda = 219; do { printf ("Numero de linhas : ");dado = scanf ("%d",&l); while (getchar() !='\n'); // getchar() limpa o buffer }while(l<=0 || dado !=1); do { printf ("Numero de colunas : ");dado = scanf ("%d",&c); while (getchar() !='\n'); }while(c<=0 || dado !=1); do { printf ("Numero de Minas : ");dado = scanf ("%d",&M);while (getchar() !='\n'); }while((M >(l*c)) || M<=0 || dado !=1); // TAB escondido char **TAB; TAB =(char **)malloc(l*sizeof(char *)); for (i=0;i<l;++i) TAB = (char *)malloc(c*sizeof(char)); inicializarTAB(TAB,l,c,1); minas(TAB,l,c,M); // TAB revelado para uso do usuario char **TAB_user; TAB_user =(char **)malloc(l*sizeof(char *)); for (i=0;i<l;++i) TAB_user = (char *)malloc(c*sizeof(char)); inicializarTAB(TAB_user,l,c,0); // coração do jogo do { system ("cls"); imprimirTAB(TAB,l,c);// ver a localização das minas imprimirTAB(TAB_user,l,c);// Tabela do usuario que vai abrindo aos poucos printf ("\n\n\t Sua jogada \n\n"); printf (" linha, coluna, acao (v, d, m) : "); scanf ("%d %d %c",&jl, &jc, &tipo); if (tipo == 'v') jogoValido(TAB,TAB_user,jl,jc,l,c); else if (tipo == 'd') jogoDuvida(TAB_user,jl,jc); else if (tipo == 'm') { saida = jogoMinas(TAB,TAB_user,jl,jc); if (saida == 1) {numMina++;} }// incrementar quando marcar a mina certo else printf (" Jogada impossivel. tente v, d ou m !!!! "); resultado = conferir(TAB_user,l,c,M, numMina); }while(numMina != M && resultado !=0 && resultado !=2 );/* marcar todas as minas || abrir uma mina || abrir todas as casas e algumas minas */ if (resultado == 0) { system ("cls"); printf ("\n\n\t\t ->GAME OVER, Pisou em uma mina !!\n\n "); printf ("\t LEGENDA \n\n\t %c : Mina pisada \n", legenda); printf ("\t M: Minas nao descobertas \n", legenda); printf ("\t X : Minas mal marcada \n\n\n"); for(i=0;i<l;++i) { for (j=0;j<c;j++) {if(TAB[j]== 'M' && TAB_user[j] =='*') TAB_user[j] = 'M';} } for(i=0;i<l;++i) { for (j=0;j<c;j++) {if(TAB[j] != 'M' && TAB_user[j] =='m') TAB_user[j] = 'X';}// minas mal marcadas } imprimirTAB(TAB_user,l,c);// mostrar localização de todas as minas + casas já abertas printf ("\n\n"); } else { system ("cls"); printf ("\n\n\t\t voce Ganhou !!\n\n"); imprimirTAB(TAB_user,l,c); } terminar(TAB,l); terminar(TAB_user,l); system ("PAUSE"); return 0; } void imprimirTAB(char **TAB_user,int l, int c) { //imprime o tabuleiro int i, j; printf(" "); for(j=0;j<c;j++) printf(" %d ",j); printf("\n"); for(i=0;i<l;i++){ printf(" +"); for(j=0;j<c;j++) printf("---+"); printf("\n%d |",i); for(j=0;j<c;j++) { printf(" %c |",TAB_user[j]); } printf(" %d\n",i); } printf(" +"); for(j=0;j<c;j++) printf("---+"); printf("\n "); for(j=0;j<c;j++) printf(" %d ",j); printf("\n"); } void minas(char **TAB, int l , int c, int M) // gerar os locais da minhas sem repetição {int i,j, linha, coluna,n=1; int **v; v=(int **)malloc(2*sizeof(int *)); for (i=0;i<2;++i) v =(int *)malloc(M*sizeof(int));/* tabela 2XM para armazenar as casas das minas e garantir que nenhum seja repetido*/ v[0][0]= rand()%l;// a primeira casa v[1][0]= rand()%c; for (i=1;i<M;++i) { do { linha =rand()%l; coluna = rand()%c; }while(conferirLocalMinas(v,linha,coluna, n)!=0); v[0]= linha; v[1]= coluna; n++; // incrementar o numero de coluna } for (i=0;i<M;++i) TAB[v[0]][v[1]]='M'; terminar(v,2); //contar minhas ao redor for (i=0;i<l;++i) {for (j=0;j<c;++j) {if (TAB[j] == 'M') TAB[j] = 'M'; else TAB[j] = (char)(((int)'0')+numMinas(TAB,i,j,l,c)); } } return ; } void terminar (char **TAB, int l) { int i; for (i=0;i<l;++i) free (TAB); free (TAB); return ; } int numMinas(char **TAB, int jl, int jc, int l, int c) { int i,j, count = 0; for (i = (jl-1);i<=(jl+1);++i) { for (j = (jc-1);j<=(jc+1);++j) { if ((i>=0) && (j>=0) && (i<l) && (j<c)) { if (TAB[j] == 'M') {count ++;} } } } return count; } void inicializarTAB(char **TAB,int l, int c, int tipo) {int i,j; for (i=0;i<l;++i) {for (j=0;j<c;++j) {if (tipo == 0) TAB[j]= '*'; else TAB[j]= '0'; } } } void jogoValido(char **TAB, char **TAB_user,int jl, int jc, int l, int c) { int i,j; if (TAB_user[jl][jc] == '*') { if (TAB[jl][jc]=='0') { TAB_user[jl][jc]= ' '; for (i = (jl-1);i<=(jl+1);++i) { for (j = (jc-1);j<=(jc+1);++j) { if ((i>=0) && (j>=0) && (i<l) && (j<c)) { if (TAB_user[j] == '*' || TAB_user[j] == '?') jogoValido(TAB, TAB_user,i,j,l,c); } } } } else { TAB_user[jl][jc] = TAB[jl][jc]; } } else { printf (" Casa ja aberta, tenta outra casa (x,y). "); } } void jogoDuvida (char **TAB_user, int jl,int jc) { if (TAB_user[jl][jc] == '*') TAB_user[jl][jc] = '?'; else printf (" Casa ja aberta, tenta outra casa (x,y). "); } int jogoMinas (char **TAB, char **TAB_user, int jl,int jc) { if (TAB_user[jl][jc] == '*') { TAB_user[jl][jc] = 'm'; if ( TAB[jl][jc] == 'M' ) return 1;// Marcou mina no lugar certo else return 0; } else {printf (" Casa ja aberta, tenta outra casa (x,y). "); return 0;} } int conferir(char **TAB_user, int l, int c, int M, int minaCerta) { int i,j, count=0, countFechado = 0; for (i=0;i<l;i++) {for (j=0;j<c;++j) { if(TAB_user[j] == 'M') { TAB_user[j] = 219; return 0;// Pisou na mina } } } for (i=0;i<l;i++) {for (j=0;j<c;++j) { if(TAB_user[j] == '*') countFechado++; // Conferir numero de casas ainda fechadas!! } } if (countFechado == (M - minaCerta) ) return 2;// casas fechadas = minas escondidas return 1; //nenhum dos casos anterior } int conferirLocalMinas(int **v,int linha, int coluna, int n)// conferir se local já ocupado { int i, count=0 ; for (i=1;i<n;i++) {if (v[0] ==linha && v[1] ==coluna) count++; } if(count >0) return 1; else return 0; }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!