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