Ir ao conteúdo
  • Cadastre-se

Berilo

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

0
  1. @CiroboyBR Nossa, muito obrigado Ciroboy, devo ter colocado esses \n por reflexo depois de mexer com os printf, nem tinha me tocado nisso hahaha Tentarei melhorar o código um pouco, muito obrigado.
  2. Fala galera, estou trabalhando nesse projeto de Campo Minado, bem simples. A ideia aqui é pra ficar pedindo coordenadas do usuário a cada rodada, atualizando a matriz do campo minado na tela e assim vai até o fim. Percebi que ao pedir a coordenada de "linha" na primeira chamada, tenho que informar 2 números, mas não sei porque isso ocorre. Mesmo assim, a primeira chamada funciona normalmente e então a partir da segunda chamada, os valores para "linha" e "coluna" estão sendo invertidos. Tentei mudar algumas coisas mas não tive muita sorte, então resolvi buscar ajuda aqui, o código está assim no momento: #include <cstdio> #include <cstdlib> #include <ctime> #include <stdlib.h> #define M 100 #define N 100 void gera_campoMinado(int a[M][N], int linha, int coluna, int bomba ){ //recebe uma matriz, dimensões da matriz e a quantidade de bombas, as bombas então são geradas em posiçoes aleatórias. 1 = bomba int x = 0; int cont = 0; while( cont < bomba ){ int i = rand() % linha ; int j = rand() % coluna; if (a[i][j] == 0){ a[i][j] = 1; cont++;} } } void imprimir_campoMinado(int a[M][N], int linha, int coluna){ // imprime o campo minado, X = bomba int soma = 0; for(int i = 0; i < linha; i++){ for(int j = 0; j < coluna; j++){ if (a[i][j] == 1){ printf(" | X | "); soma = soma +1;} else printf(" | O | "); } printf("\n"); } printf("\n\n total de bombas = %d\n", soma); } void imprimir_campoVizinhas(int a[M][N], int linha, int coluna){ // imprime a quantidade de bombas ao redor de cada posiçao. for (int i = 0; i < linha; i++){ for(int j = 0; j < coluna; j++){ printf ("| %d | ", a[i][j]); } printf("\n"); } } void checa_vizinhas(int a[M][N], int b[M][N], int linha, int coluna){// verifica quantas bombas existem ao redor de cada posição. int soma = 0; for( int i = 0; i < linha; i++) for (int j = 0; j < coluna; j++){ if ( j > 0 && a[i][j-1] == 1) soma++; if ( j < coluna && a[i][j+1] == 1)soma++; if ( i < linha && a[i+1][j] == 1) soma++; if ( i > 0 && a[i-1][j] == 1) soma++; if ( i < linha && j>0 && a[i+1][j-1] == 1) soma++; if ( i < linha && j < coluna && a[i+1][j+1] == 1 )soma++; if ( i > 0 && j > 0 && a[i-1][j-1] == 1) soma++; if ( i > 0 && j < linha && a[i-1][j+1] == 1) soma++; b[i][j] = soma; soma = 0; } } // não está funcionando como queria, então deixei pra mexer depois, a ideia era chamar essa função recursivamente caso uma posição tenha 0 bombas ao redor. /*void imprimir_vizinhas( int Vizinhas[M][N], int linha, int coluna ,int CordA, int CordB){ if(Vizinhas[CordA][CordB] != 0) printf ("| %d |", Vizinhas[CordA][CordB]); else { printf(" 0 "); if(CordB -1 > 0 ) imprimir_vizinhas(Vizinhas, linha, coluna, CordA, CordB-1); if(CordB +1 < coluna) imprimir_vizinhas(Vizinhas, linha, coluna, CordA, CordB+1); if(CordA +1 < linha) imprimir_vizinhas(Vizinhas,linha, coluna, CordA+1, CordB); if(CordA -1 > 0)imprimir_vizinhas(Vizinhas,linha, coluna, CordA-1, CordB); if(CordA +1 <linha && CordB - 1 > 0)imprimir_vizinhas(Vizinhas,linha,coluna,CordA+1,CordB-1); if(CordA +1 <linha && CordB +1 < coluna)imprimir_vizinhas(Vizinhas,linha,coluna,CordA+1,CordB+1); if(CordA -1> 0 && CordB-1 > 0)imprimir_vizinhas(Vizinhas, linha, coluna, CordA-1,CordB-1); if(CordA -1>0 && CordB+1< coluna)imprimir_vizinhas(Vizinhas,linha, coluna, CordA-1, CordB+1); } } */ void imprimir_jogo(int CampoMinado[M][N],int Vizinhas[M][N], int linha, int coluna, int CordA, int CordB ){// imprime o estado atual do jogo int i,j; for(i=0; i<linha;i++){ for(j=0; j< coluna; j++){ if(CampoMinado[i][j] <= (linha*coluna) ) printf("| ? |"); else if (CampoMinado[i][j] == ((linha*coluna) +1)){ printf("| X |"); } else if (CampoMinado[i][j] == ((linha*coluna)+2)){ printf("| %d |",Vizinhas[i][j]); } } printf("\n"); } } void jogo(int CampoMinado[M][N], int Vizinhas[M][N], int linha, int coluna){// inicia o jogo, recebendo as coordenadas e imprimindo o estado do jogo em cada passo int CordA; int CordB; int gameover= 0; printf("inicio de jogo!"); printf("\n\n"); imprimir_jogo(CampoMinado, Vizinhas, linha, coluna,CordA, CordB); printf("\n"); while(gameover != 1){ printf("informe uma coordenada:\n "); printf("linha(menor que %d): ", linha); scanf(" %d\n", &CordA); while(CordA < 0 || CordA >= linha){ printf("linha(menor que %d): ", linha); scanf(" %d\n", &CordA); } printf("coluna(menor que %d): ",coluna); scanf(" %d\n", &CordB); while(CordB < 0 && CordB >= coluna){ printf("coluna(menor que %d): ",coluna); scanf(" %d\n", &CordB); } if(CampoMinado[CordA][CordB] == 1){ CampoMinado[CordA][CordB] = (linha*coluna) +1; printf("Bomba! Gameover!\n"); imprimir_jogo(CampoMinado,Vizinhas, linha, coluna, CordA, CordB); gameover=1; } else if (CampoMinado[CordA][CordB] == 0){ CampoMinado[CordA][CordB] = (linha*coluna) +2; imprimir_jogo(CampoMinado,Vizinhas,linha,coluna, CordA, CordB); } } } int main() { int campoMinado[M][N],campoVizinhas[M][N], linha, coluna, bomba; printf("informe a quantidade de linhas: "); scanf("%d", &linha); printf("informe a quantidade de colunas: "); scanf("%d", &coluna); printf("informe a quantidade maxima de bombas: "); scanf("%d",&bomba); for(int i = 0; i < linha; i++){ for( int j = 0; j< coluna; j++){ campoMinado[i][j] = 0;} } for(int i = 0; i < linha; i++){ for( int j = 0; j< coluna; j++){ campoVizinhas[i][j] = 0;} } printf("\n\n Campo Minado completo:\n"); srand( (unsigned)time(NULL) ); gera_campoMinado(campoMinado,linha, coluna, bomba); imprimir_campoMinado(campoMinado, linha, coluna); checa_vizinhas(campoMinado, campoVizinhas, linha, coluna); printf("\n\n\n"); imprimir_campoVizinhas(campoVizinhas, linha, coluna); printf("\n\n\n\n\n\n\n"); jogo(campoMinado,campoVizinhas,linha,coluna); system ("pause"); return 0; } Alguém consegue enxergar o que estou fazendo de errado? Alguma dica de como poderia melhorar esse código? Obrigado amigos
  3. Olá galera, sou novo aqui no fórum. Estava fazendo um exercício pra faculdade e não entendi muito bem o que estou fazendo errado. Basicamente, a primeira função era pra gerar 0 ou 1 aleatoriamente dentro da matriz informada, sem pegar as "bordas" e então na segunda função eu somaria a quantidade de 1 que cada posição tem ao redor, meio que simulando um campo minado(1 = bomba). Quando fiz com char ao invés de int o printf funcionava normal, então eu sei que não é problema do gerador de numero aleatório, não estou entendo porque são impressos esses números bizarros ao invés de só imprimir a soma dos "1". Não liguem muito pra formatação feia ou o código iniciante, não manjo muito de C =( O código está desse jeito: void gera_campo1(int a[M][N]){ int x =0; for( int i=1; i < M-1; i++){ for(int j=1; j < N-1; j++){ x= rand() % 2 ; if ( x == 0) a[i][j] = 0; else a[i][j] = 1; } } } void gera_campo2(int a[][N]){ for (int i=1; i < M-1; i++){ for(int j=1; j< N-1; j++){ a[i][j]= a[i-1][j] + a[i-1][j-1] + a[i-1][j+1] + a[i][j+1] + a[i][j-1] + a[i+1][j] + a[i+1][j+1] + a[i+1][j-1]; } } } int main(){ int campo1[M][N]; srand(time(0)); gera_campo1(campo1); for (int i=0; i<M; i++){ for (int j=0; j<N; j++){ printf(", %d",campo1[i][j]);} printf("\n"); } gera_campo2(campo1); printf("numero de bombas na vizinhanca\n"); for (int i=0; i<M; i++){ for (int j=0; j<N; j++){ printf(", %d",campo1[i][j]);} printf("\n"); } system("Pause"); } Obrigado desde já =]

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!