Ir ao conteúdo
  • Cadastre-se
Wxys

Campo Minado em C, por onde devo começar?

Recommended Posts

Fala aí!

Bom, eu tenho que fazer um campo Minado(8x8) em C como projeto final do semestre, só que é tanta coisa que eu não faço ideia de como começar, poderiam me dar uma luz? Não quero um código, mas se me dessem uma ideia geral de como fazer cada parte e por onde começar me ajudaria muito !!

As funções que eu tenho que fazer:

-Opção de bombas aleatórias e programadas(O usuário carregaria um arquivo de texto com a posição das bombas)

-Opção pra escolher níveis (Fácil/Médio/Difícil - 5/10/15 Bombas) e também opção pra escolher número de bombas(1 a 63)

-Opção de marcar bandeira(Se tiver com uma bandeira ele não pode virar até retirar ela)

-O funcionamento tem que ser igual ao campo minado clássico, se não virar uma bomba tem que mostrar as bombas ao redor(aqueles números que aparecem)

É isso e também não posso usar variáveis globais .

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode começar pelo campo, você pode usar uma matriz 8x8 para abstrair o campo , ai você faz algo como:

se mat[1][1] == 0  // bloco livre
se mat[1][1] == 1 // bloco com mina

se mat[1][1] == 2 //bloco com bandeira
etc......
.
Se você for fazer o jogo com gráficos, vai ter que utilizar uma biblioteca 2D, existem várias, a mais conhecida é a SDL, já utilizei muito a Allegro.


 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, ele quer que faça no prompt/console(nem sei como se chama) mesmo..

 

Minha ideia até agora é fazer duas matrizes, uma de comandos e outra que vai ficar sendo printada, ai na e comando a ideia era usa 0 pra livre, 1 pra bomba, 2 pra bandeira e 3 pra bloco virado.

Mas ai tem umas paradas que não tenho ideia de como fazer, a disposição das bombas aleatoriamente, a verificação de bombas ao redor, quando não há bomba ao redor e ele vai abrindo até um bloco que tenha bomba ao redor..

Essas paradas tão me travando..

Compartilhar este post


Link para o post
Compartilhar em outros sites

A inserção das bombas aleatórias você usa a função rand para sortear 2 números aleatórios, depois usa os 2 números para inserir na matriz, exemplo:

Sorteou 2
sorteou 3

verifica se a matriz[2][3] já tem mina
..Se tem mina
....refaz o sorteio
..senão tem mina
....insere uma mina em matriz[2][3]



Comece logo fazendo a matriz e a função que insere mina, depois você faz a função que desenha a matriz, com o desenho você vai saber melhor o que ta acontecendo no seu programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui, comecei a fazer desenvolvi um pouco e travei aqui, to fazendo as funções e testando, nessa agora eu tava fazendo a que ia virar a casa mas antes dele abrir o menu para pedir a coordenada ele abri uma casa qualquer e o console para e ao dar enter fecha..

 

Esse é o código até agora:

#include <math.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#define L 10#define C 10int menu() {	int dificuldade;	printf("Bem vindo ao campo minado !\n\n As regras sao simples:\n-Se voce revalar uma bomba o jogo acaba !\n-Se colocar uma bandeira so poderar revelar a casa apos retira-la !\n-Ao revelar um espaco vazio os numeros irao indicar se ha bombas ao redor !\n-Se voce revelar todas as casas sem encontrar uma bomba voce ganha !\n\n");	system("pause");	system("cls");	printf("Escolha um nivel de dificuldade:\n 1 - fácil (5 Bombas)\n 2 - Medio (10 Bombas)\n 3 - difícil (20 Bombas)\n\n ");	scanf("%d",&dificuldade);	while(dificuldade>3 || dificuldade<1){		printf("Opcao invalida, digite novamente !\n\n");		scanf("%d",&dificuldade);		}    return dificuldade;}void preencher_aleatoriamente(char matriz[L][C]){	int i,j,x,y,cont=0,bombas;	srand( (unsigned)time(NULL) );		//Criando a Matriz	for(i=0;i<9;i++){		for(j=0;j<9;j++){			if(i==0 && j==0)				matriz[i][j]=' ';			else			    matriz[i][j]='0';		}	}	matriz[1][0]='A';	matriz[2][0]='B';	matriz[3][0]='C';	matriz[4][0]='D';	matriz[5][0]='E';	matriz[6][0]='F';	matriz[7][0]='G';	matriz[8][0]='H';    matriz[0][1]='1';	matriz[0][2]='2';	matriz[0][3]='3';	matriz[0][4]='4';	matriz[0][5]='5';	matriz[0][6]='6';	matriz[0][7]='7';	matriz[0][8]='8';	bombas=menu();    if(bombas==1)    bombas=5;    else if(bombas==2)    bombas=10;    else    bombas=20;	//Colocando as bombas	do{		x=(rand()%9);		y=(rand()%9);		if(matriz[x][y]=='0'){			matriz[x][y]='*';			cont=cont+1;		}}while(cont<bombas);	}void exibir_matriz(char matriz[L][C]){		   	int i,j;		    system("cls");			for(i=0;i<9;i++){		    for(j=0;j<9;j++){		    	printf("%c ",matriz[i][j]);		    }		    printf("\n");		}}void matriz_visual(char matriz[L][C]){		int i,j;				for(i=0;i<9;i++){		    for(j=0;j<9;j++){				if(i==0 && j==0)				 matriz[i][j]=' ';				else				 matriz[i][j]='#';		}	}	matriz[1][0]='A';	matriz[2][0]='B';	matriz[3][0]='C';	matriz[4][0]='D';	matriz[5][0]='E';	matriz[6][0]='F';	matriz[7][0]='G';	matriz[8][0]='H';    matriz[0][1]='1';	matriz[0][2]='2';	matriz[0][3]='3';	matriz[0][4]='4';	matriz[0][5]='5';	matriz[0][6]='6';	matriz[0][7]='7';	matriz[0][8]='8';}int menu_jogo(){            int comando;			printf("Digite uma opcao:\n 1 Virar casa\n2 Marcar bandeira\n3 Retirar bandeira\n4 Sair\n ");            scanf("%d",&comando);            return comando;} int coordenada(){    char casa[3];    int i,j,x;    printf("Digite a coordenada: ");    fgets(casa,3,stdin);		if(casa[0]=='A'||casa[0]=='a')     i=1;    else if(casa[0]=='B'||casa[0]=='b')     i=2;    else if(casa[0]=='C'||casa[0]=='c')     i=3;	else if(casa[0]=='D'||casa[0]=='d')     i=4;	else if(casa[0]=='E'||casa[0]=='e')     i=5;	else if(casa[0]=='F'||casa[0]=='f')     i=6;	else if(casa[0]=='G'||casa[0]=='g')     i=7;	else if(casa[0]=='H'||casa[0]=='h')     i=8;		if(casa[1]=='1')	 j=1;	else if(casa[1]=='2')	 j=2; 	else if(casa[1]=='3')	 j=3;	else if(casa[1]=='4')	 j=4;    else if(casa[1]=='5')	 j=5;	else if(casa[1]=='6')	 j=6;	else if(casa[1]=='7')	 j=7;	else if(casa[1]=='8')	 j=8;    	x=(i*10)+j;	return x;  }void virando_casa(char matriz1[L][C], char matriz2[L][C]){	int casa,i,j;		casa=coordenada();	i=casa/10;	j=casa%10;		if(matriz1[i][j]=='0')	 matriz2[i][j]=' ';	else if(matriz1[i][j]=='*')	 matriz2[i][j]='*';}	void comando(char matriz[L][C]){	}int main(){	char campo_comando[L][C], campo_visual[L][C];	preencher_aleatoriamente(campo_comando);	matriz_visual(campo_visual);    exibir_matriz(campo_visual);    virando_casa(campo_comando,campo_visual);	exibir_matriz(campo_visual);	system("pause");	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O programa tá pegando uma sujeira deixada pela entrada na seleção da dificuldade, põe um getchar() antes do fgets pra ele receber a sujeira, ai tu vai conseguir digitar as coordenadas. Porém, isso não é uma solução definitiva.

 

printf("Digite a coordenada: ");    getchar();fgets(&casa, 3, stdin);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×