Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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 .

Editado por Wxys

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.

Editado por ciroboy38

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");	}
Editado por Wxys

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






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

×