Olá pessoal, eu tenho q construir em C, um jogo de campo minado e já fiz o esboço inicial e segue os códigos que já fiz (não está acabado, por enquanto só deveria estar sorteando as minas e lendo a matri e associando os valores às minas. O exercício está no link [url=http://www.ime.usp.br/~yw/2008/mac115/eps/ep3/ep3.pdf], por ser meio grande não precisem necessariamente ler, acho q basta saber jogar o campo minado, mas se alguém disponibilizar de mais tempo, serei grato!
O código já feito é o seguinte:
#include <stdio.h>
#include <stdlib.h>
#define MINA -1 /*indica que a posição analisada está com mina*/
#define VAZIA 0 /*indica que a posição analisada está sem mina*/
#define MAX 10
/*inicialização da matriz sem as bombas, a princípio*/
void le_matriz (int a[][MAX], int p, int q){
int l,c;
for(l=1; l<=p; l++){
for(c=1; c<=q; c++)
a[l][c]=VAZIA;
}
}
/*inserção de borda para observação de casas vizinhas*/
void borda(int a[][MAX], int b, int d){
int l, c;
for (l=0; l<=b+1; l++){
a[l][0]=a[l][d+1]=VAZIA;
}
for (c=0; c<=d+1; c++){
a[0][c]=a[b+1][c]=VAZIA;
}
}
/*impressão da matriz com o uso de marcadores*/
void imprime_matriz (int a[][MAX], int p, int q){
int l, c;
for(c=0; c<=q; c++)
if(c!=0)printf("%d ", c); /*inseri-se números nas bordas horizontalmente para a observação das colunas*/
else printf(" ");
printf("\n");
for(l=1; l<=p; l++){
for(c=1; c<=q; c++){
if(c==1) printf("%2d * ", l); /*inseri-se números nas bordas verticalmente para a observação das linhas*/
else printf("* ");
}
printf("\n");
}
}
/*leitura do número k de vizinhos com minas para cada posição da matriz*/
void k_minas (int a[][MAX], int p, int q){
int l, c, k;
for(l=1; l<=p; l++){
for(c=1; c<=q; c++){
k=0;
if(a[l-1][c]==MINA) k++;
if(a[l+1][c]==MINA) k++;
if(a[l][c-1]==MINA) k++;
if(a[l][c+1]==MINA) k++;
if(a[l-1][c-1]==MINA) k++;
if(a[l-1][c+1]==MINA) k++;
if(a[l+1][c-1]==MINA) k++;
if(a[l+1][c+1]==MINA) k++;
a[l][c]=k;
}
}
}
int main(){
int m, n, z, i, a, b, aux1, aux2, v1[MAX], v2[MAX], A[MAX][MAX];
/* inicializações por parte do usuário*/
printf("\t\t\tCampo Minado\n");
printf("\nEntre com o numero de linhas da matriz do jogo (maximo 10):");
scanf("%d", &m);
printf("Entre com o numero e colunas da matriz do jogo (maximo 10):");
scanf("%d", &n);
printf("Entre com o numero de minas (maximo %d):", m*n);
scanf("%d", &z);
/*auxiliares no sorteio da mina definidas pelo usuário, para garantir maior aleatorieadade*/
printf("\nEntre com um valor auxiliar para o sorteio das linhas das minas:");
scanf("%d", &a);
printf("Entre com um valor auxiliar para o sorteio das colunas das minas:");
scanf("%d", &b);
/*sorteio da linha da mina*/
srand(a);
for(i=0; i<z; i++)
v1[i] = rand()%m;
le_matriz(A, m, n);
/*sorteio da coluna da mina e determinação de coordenadas não-repetidas*/
for(i=0; i<z; i++){
v2[i] = rand()%n;
if (A[v1[i]][v2[i]]==VAZIA) A[v1[i]][v2[i]]=MINA;
}
/*impressões do jogo e chamada das funções que garantem jogabilidade*/
printf("\n\t\tJogo inicialiado!\n");
printf("\nSituacao inicial da matriz (existem %d posicoes livres de minas):\n\n", (m*n)-z);
imprime_matriz(A, m, n);
k_minas(A, m, n);
printf("\n");
system("pause");
return 0;
}
Porém, os métodos que utilizei para o sorteio da matriz estão dando erro na medida que duas bombas acabam caindo na mesma posição e algo de errado ocorre que o programa quando executado, pára e não finaliza com o enter. É um exercício um pouquinho longo, mas quem se disponibilizar a me ajudar, obrigado! Ah, e caso possam avaliar o que eu já fiz do programa também, além do sorteio, seria um auxílio para não ocorrerem erros na continuação do mesmo.
Pergunta
ovatsug
Olá pessoal, eu tenho q construir em C, um jogo de campo minado e já fiz o esboço inicial e segue os códigos que já fiz (não está acabado, por enquanto só deveria estar sorteando as minas e lendo a matri e associando os valores às minas. O exercício está no link [url=http://www.ime.usp.br/~yw/2008/mac115/eps/ep3/ep3.pdf], por ser meio grande não precisem necessariamente ler, acho q basta saber jogar o campo minado, mas se alguém disponibilizar de mais tempo, serei grato!
O código já feito é o seguinte:
#include <stdio.h> #include <stdlib.h> #define MINA -1 /*indica que a posição analisada está com mina*/ #define VAZIA 0 /*indica que a posição analisada está sem mina*/ #define MAX 10 /*inicialização da matriz sem as bombas, a princípio*/ void le_matriz (int a[][MAX], int p, int q){ int l,c; for(l=1; l<=p; l++){ for(c=1; c<=q; c++) a[l][c]=VAZIA; } } /*inserção de borda para observação de casas vizinhas*/ void borda(int a[][MAX], int b, int d){ int l, c; for (l=0; l<=b+1; l++){ a[l][0]=a[l][d+1]=VAZIA; } for (c=0; c<=d+1; c++){ a[0][c]=a[b+1][c]=VAZIA; } } /*impressão da matriz com o uso de marcadores*/ void imprime_matriz (int a[][MAX], int p, int q){ int l, c; for(c=0; c<=q; c++) if(c!=0)printf("%d ", c); /*inseri-se números nas bordas horizontalmente para a observação das colunas*/ else printf(" "); printf("\n"); for(l=1; l<=p; l++){ for(c=1; c<=q; c++){ if(c==1) printf("%2d * ", l); /*inseri-se números nas bordas verticalmente para a observação das linhas*/ else printf("* "); } printf("\n"); } } /*leitura do número k de vizinhos com minas para cada posição da matriz*/ void k_minas (int a[][MAX], int p, int q){ int l, c, k; for(l=1; l<=p; l++){ for(c=1; c<=q; c++){ k=0; if(a[l-1][c]==MINA) k++; if(a[l+1][c]==MINA) k++; if(a[l][c-1]==MINA) k++; if(a[l][c+1]==MINA) k++; if(a[l-1][c-1]==MINA) k++; if(a[l-1][c+1]==MINA) k++; if(a[l+1][c-1]==MINA) k++; if(a[l+1][c+1]==MINA) k++; a[l][c]=k; } } } int main(){ int m, n, z, i, a, b, aux1, aux2, v1[MAX], v2[MAX], A[MAX][MAX]; /* inicializações por parte do usuário*/ printf("\t\t\tCampo Minado\n"); printf("\nEntre com o numero de linhas da matriz do jogo (maximo 10):"); scanf("%d", &m); printf("Entre com o numero e colunas da matriz do jogo (maximo 10):"); scanf("%d", &n); printf("Entre com o numero de minas (maximo %d):", m*n); scanf("%d", &z); /*auxiliares no sorteio da mina definidas pelo usuário, para garantir maior aleatorieadade*/ printf("\nEntre com um valor auxiliar para o sorteio das linhas das minas:"); scanf("%d", &a); printf("Entre com um valor auxiliar para o sorteio das colunas das minas:"); scanf("%d", &b); /*sorteio da linha da mina*/ srand(a); for(i=0; i<z; i++) v1[i] = rand()%m; le_matriz(A, m, n); /*sorteio da coluna da mina e determinação de coordenadas não-repetidas*/ for(i=0; i<z; i++){ v2[i] = rand()%n; if (A[v1[i]][v2[i]]==VAZIA) A[v1[i]][v2[i]]=MINA; } /*impressões do jogo e chamada das funções que garantem jogabilidade*/ printf("\n\t\tJogo inicialiado!\n"); printf("\nSituacao inicial da matriz (existem %d posicoes livres de minas):\n\n", (m*n)-z); imprime_matriz(A, m, n); k_minas(A, m, n); printf("\n"); system("pause"); return 0; }Porém, os métodos que utilizei para o sorteio da matriz estão dando erro na medida que duas bombas acabam caindo na mesma posição e algo de errado ocorre que o programa quando executado, pára e não finaliza com o enter. É um exercício um pouquinho longo, mas quem se disponibilizar a me ajudar, obrigado! Ah, e caso possam avaliar o que eu já fiz do programa também, além do sorteio, seria um auxílio para não ocorrerem erros na continuação do mesmo.
Agradeço!
Editado por ovatsugLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.