Ir ao conteúdo
  • Cadastre-se
Danizinha CM

C Problema Linguagem C - Vetores e Matrizes

Posts recomendados

Olá à todos! Tenho esse trabalho de linguagem C para entregar na faculdade e estou com bastante dificuldade. Eu sei que devo utilizar operações básicas de vetores e matrizes, mas não sei como encaixar e qual a ordem correta do fluxo. Se alguém puder me dar uma mão, me orientando sobre o fluxo do programa - uma espécie de receita de bolo (como acredito que seja todo programa em C), ficarei bastante agradecida. No pdf existem inclusive algumas saídas esperadas e dicas de comandos a serem utilizados. Eu sou estupidamente burra sobre lógica de programação e me enrolo toda sobre a ordem das funções, quais ferramentas utilizar para matar o problema e etc. Aprecio qualquer luz.

Obrigada.

trabalho.pdf

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Daniela Calfat Maldaun Qual o compilador você vai usar?

A coisa mais difícil no trabalho e a parte de implementar a matriz, porque a parte da logica já está bem explicada.

Pra começar seria alguma coisa mais ou menos assim

 int matriz[T_MAX][T_MAX];

ou assim

#include <stdio.h>
#include <stdlib.h>


int main()
{
	int **matriz,h_tamanho,v_tamanho,i;
	printf("\nDigite o tamanho do tabuleiro na horizontal:\t");
	scanf("%i",&h_tamanho);
	printf("\nDigite o tamanho do tabuleiro na vertical:\t");
	scanf("%i",&v_tamanho);
	matriz=malloc(sizeof(int*)*v_tamanho);
	if(!matriz)
		return(1);
	for(i=0; i<v_tamanho; i++)
    {
    	matriz[i]=malloc(sizeof(int)*h_tamanho);
      	if(!matriz[i])
        	return(1);
    }
  	printf("\nOk....");
  	for(i=0; i<h_tamanho; i++)
      free(matriz[i]);
  	free(matriz);
  	getchar();
  	return(0);
}
  	

dinamicamente adiciona um pouco de praticidade, mas por outro lado deixa o código complicado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@KXSY Eu uso o Codeblocks. "Malloc" não posso utilizar, infelizmente. 😥 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Daniela Calfat Maldaun disse:

Eu uso o Codeblocks.

Então provavelmente você usa GCC, IDE != compilador.

 

1 hora atrás, Daniela Calfat Maldaun disse:

"Malloc" não posso utilizar, infelizmente. 😥 

não é preciso usar, seria mais ou menos assim o código

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


/* Constantes */
#define VAZIO 0
#define BOMBA 1

#define T_MAX 20

/* Tipos */
struct local
{
    int tem_bomba;
    int valor;
};


int main()
{
    struct local l[T_MAX][T_MAX];
    int x,y,v_tamanho,h_tamanho,b_quantidade;
    printf("\nDigite o tamanho vertical do tabuleiro:\t");
    scanf("%i",&v_tamanho);
    getchar();
    printf("\nDigite o tamanho horizontal do tabuleiro:\t");
    scanf("%i",&v_tamanho);
    getchar();
    printf("\nDigite a quantidade de bombas:\t");
    scanf("%i",&b_quantidade);
    getchar();
    printf("%i,%i",v_tamanho,h_tamanho);
    /* Zera o tabuleiro */
    for(x=0; x<T_MAX; x++)
    {
        for(y=0; y<T_MAX; y++)
        {
            l[x][y].tem_bomba=0;
            l[x][y].valor=0;
        }
    }
    /* Coloca as bombas no tabuleiro */
    srand(1234);
    do
    {
        x=rand()%v_tamanho;
        y=rand()&h_tamanho;
        if(x&&y)
            if(l[x][y].tem_bomba==VAZIO)
            {
                l[x][y].tem_bomba=BOMBA;
                b_quantidade--;
            }
    }while(b_quantidade);       /* Enquanto for maior que zero. */
    /* Mostra as bombas */
    for(x=0; x<v_tamanho; x++)
    {
        for(y=0; y<h_tamanho; y++)
            if(l[x][y].tem_bomba)
                printf("B");
            else
                printf("V");
        puts("");
    }
    getchar();
    return(0);
}

não leve o meu código como o santo graal, porque eu fiz de cabe e tenho quase certeza que ele não funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@KXSY Haha, eu te avisei que eu sou uma completa iniciante em C. Me perdoe, mas não entendi nada do seu código. Vou respirar aqui e tentar entender novamente. Agradeço imensamente seu esforço em me ajudar. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Daniela Calfat Maldaun a única coisa que eu tenho pra falar para você é, se você não sabe trabalhar com blocos de código, decisões, repetições, operadores lógicos e ponteiros isso ai vai passar de um desafio simples para um inferno na terra.

Aqui tem o código de um feito em C++ não tem muitas diferenças

https://www.geeksforgeeks.org/cpp-implementation-minesweeper-game/

mas quando você ver o código se não souber o mínimo disso ai que eu escrevi ai em cima, tudo vai parece grego.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@KXSY Eu tirei 0.3 na P1 e 1.8 na P2 da faculdade. Acredite, nesse fim de semestre já está sendo um inferno na terra. Mal consigo sequer dormir direito. Vou dar uma olhada querido, muito obrigada pela sua força. Infelizmente, pra quem não sabia absolutamente nada de C, já chegar em vetores e matrizes em pouquíssimo tempo, com mil outras matérias pesadíssimas pra estudar,  tem sido muito desgastante. Eu tento conciliar o básico que sei, meio que traduzindo o possível para o "português" - se assim posso dizer, para tentar pegar o fluxo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz um campo minado um tempo atrás, até postei aqui no fórum na resposta em um tópico que o autor também postou outro código de campo minado:

 

 

Mas usei uma lógica diferente da proposta no enunciado do seu trabalho, não marca os campos como possíveis minas por exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@isrnick Oi isrnick! Obrigada pela mensagem, vou dar uma olhadinha e ver se consigo extrair algo que me ajude. Obrigada!!!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém mais poderia dar uma luz? 

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, Daniela Calfat Maldaun disse:

Alguém mais poderia dar uma luz? 

 

Olá!

 

Meu palpite, com umas perguntas.

 

Acho que esse não deve ser seu primeiro ou segundo programa em C, ou em qualquer outra linguagem. Em geral os caras guardam esses problemas para entregar em período, depois de fazer outros programas menores. É esse o caso? Já escreveu um certo número de pequenos programas para se acostumar com o fluxo dessas coisas? Não o do programa em si, mas compilar, separar as coisas, testar, ler valores do teclado ou de arquivos, escrever na tela ou em arquivos?
Ajudaria saber o que você já sabe, para não ficar escrevendo coisas chatas ou redundantes e nem ficar, por outro lado, escrevendo o que você não entende ainda.

 

Li seu "requerimento", o arquivo. Está bem escrito.

 

A minha primeira sugestão: se você não conhece o jogo, jogue um pouco até ter a mecânica dele clara. Não se preocupe em programar p$%%@ nenhuma, apenas no jogo. Ganhar, perder, a rotina.

 

Depois: pense só no jogo também, mas nesse sentido: você e mais um jogador. Você tem umas folhas com um tabuleiro, tipo 3x3 só pra pensar. e você vai ter um pra você com as minas, tipo 2 minas só em 9 posições. E na mesa na sua frente seu amigo vai jogar: então você marca as minas num tabuleiro que você guarda. E dá um formulário tabuleiro pra  ele. Ele vai jogando  começa marcando as posições falando pra você que diz pra ele se acertou em algo e vai atualizando o tabuleiro.

 

Aí você está mais em condições de programar o serviço, depois de ter jogados umas vezes e de ter pensado nessa simulação com um amigo que pode ser você mesma...

 

Em 12/06/2019 às 17:45, Daniela Calfat Maldaun disse:

fluxo do programa - uma espécie de receita de bolo (como acredito que seja todo programa em C)

 

Receitas de bolo podem ser bem complexas...

 

E a partir daí você pensa em escrever pequenas partes do serviço, partes que possa testar em separado e ir se acostumando com o problema e com os métodos de solução. Ex:

 

- uma função de desenha um tabuleiro de um certo tamanho

- uma função que faz o sorteio da posição das minas

- uma função que atualiza o tabuleiro

 

Coisas assim que possa testar em separado e possa por exemplo postar aqui e perguntar algo.

 

Assim vai se aproximando da solução. Esse é um programa relativamente grande para você começar pensando nele todo sem experiência..

 

Bom trabalho

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@arfneto Olá! Obrigada por sua mensagem! Sim, eu já fiz dois outros programas: o primeiro era bem simples - com menos de 20 linhas - sobre laços de repetição; o segundo sobre funções e como chamá-las. Para esse terceiro programa, o salto de dificuldade foi enorme, e em um período letivo de cerca de 22 dias. Essa dinâmica do jogo a qual você se refere, como ele funciona e etc, é exatamente o que eu venho tentando fazer nos últimos dias. 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Daniela Calfat Maldaun disse:

@arfneto Olá! Obrigada por sua mensagem! Sim, eu já fiz dois outros programas: o primeiro era bem simples - com menos de 20 linhas - sobre laços de repetição; o segundo sobre funções e como chamá-las. Para esse terceiro programa, o salto de dificuldade foi enorme, e em um período letivo de cerca de 22 dias. Essa dinâmica do jogo a qual você se refere, como ele funciona e etc, é exatamente o que eu venho tentando fazer nos últimos dias. 

Entendo. 

 

Acho sacanagem esperar que um aluno se vire pra fazer um terceiro programa assim. Espero que tenha um bom prazo, mas não quero que desanime. O primeiro programa deve ter te dado essa noção de "receita de bolo", imagino ;) 

 

 

2 horas atrás, Daniela Calfat Maldaun disse:

exatamente o que eu venho tentando fazer nos últimos dias

 

Perfeito. Mas conhece campo minado? tem em seu computador? Jogou mesmo? Ganhou, perdeu e tal? É muito importante isso. E aquela parada de que falei de preparar o jogo para alguém é importante. Se ficar sem graça de fazer com alguém pode fazer com você mesma, no papel. Podia mandar pra mim mas ia levar dias :D pra jogar. 

 

Sério, preparar o mapa, mesmo que 3x3, acompanhar os resultados de cada palpite, atualizar o mapa, preparar o tabuleiro. Fazendo isso umas vezes vai ajudar muito a entender a dinâmica disso.

 

Acho que a parte mais delicada é quando o sujeito seleciona uma célula vazia e aí você, como a controladora do jogo ou o seu programa, tem que ir abrindo as células em volta da célula vazia que o cara escolheu, e a área vazia vai se espalhando. Sabe mesmo como é isso? Não? Jogue! É de graça. Até entender claramente. Tem na loja do Windows 10 por exemplo. Vi agora. 

 

Nunca pensei em programar isso, mas pode ser um exercício interessante. Mas repito: não tente fazer tudo ao mesmo tempo, ver o programa como uma coisa só. Não é e você vai perder um tempo enorme se fizer isso.

 

Pense no seu segundo programa, o das funções. Vai ser essencial. Pense na parte do "sorteio" das minas, veja se está claro como faz pra selecionar os campos, faça um pequeno programa de teste.

 

Pense na entrada, como seria a chamada do programa.  Codifique uma função main() pra pegar os valores e mostrar na tela, só isso.

 

E irá progredindo rápido. C é uma linguagem bem legal, eu acho. Quando se sentir criativa, escolhendo maneiras de fazer ao invés de lutar pra achar uma, talvez goste mais de programar, ou odeie menos.... E pode nem demorar

 

Bom trabalho

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@arfneto Obrigada por sua mensagem, e pelas dicas. Infelizmente meu prazo está curtíssimo, tenho 2 dias para entregar o trabalho. O jogo campo minado em si é muito bacana e de fácil entendimento, mas há peculiaridades no enunciado pedido que acredito que faça com que seja uma variação não-usual do programa que estamos acostumados a ver no windows e afins. E converter isso em código realmente tem sido difícil pra mim. Mas não vou desistir, estou aqui tentando desenvolver o que posso, vendo aulas no youtube e etc. Estou longe de terminar, mas estou tentando ao menos. Agradeço pelo incentivo @arfneto, muito obrigada!!

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 minutos atrás, Daniela Calfat Maldaun disse:

@arfneto Obrigada por sua mensagem, e pelas dicas. Infelizmente meu prazo está curtíssimo, tenho 2 dias para entregar o trabalho. O jogo campo minado em si é muito bacana e de fácil entendimento, mas há peculiaridades no enunciado pedido que acredito que faça com que seja uma variação não-usual do programa que estamos acostumados a ver no windows e afins. E converter isso em código realmente tem sido difícil pra mim. Mas não vou desistir, estou aqui tentando desenvolver o que posso, vendo aulas no youtube e etc. Estou longe de terminar, mas estou tentando ao menos. Agradeço pelo incentivo @arfneto, muito obrigada!!

 

Li o enunciado. A única variação do usual --- ok, não jogo isso há eras --- acho que é a possibilidade de marcas as células suspeitas, ou desmarcar. Ou já tinha e eu nem sabia e marcava num papel :( . Mas isso não é nada complexo, basta acrescentar um estado a mais para as células e controlar o total de células marcadas para não estourar o limite.

 

Programe a entrada em separado, a parte do programa que pega os valores e faz a validação. E teste. E guarde. Você já fez bolo de festa? É algo assim :D tem o recheio, a cobertura a massa, a decoração... Espero que não fique brava com as analogia bestas... Mas abstração é importante na programação... 

Vai ter trabalho para terminar isso em dois dias, em especial se não puder dispor de muito tempo só pra esse programa.
Para não perder tempo, já que o jogo aparentemente é familiar para você, escreva um programa que lê os valores do usuário, linhas, colunas, semente e tal. E valida e mostra na tela. Guarde.
Pense numa estrutura de dados para gravar isso, pode ser mesmo o simples m*n células, z minas e cada célula tem um estado, como no enunciado: marcado, desmarcado, aberto. Talvez marcado com mina  e marcado sem mina, que tal? assim não precisa marcar as minas em outro lugar... ;)

Se a sua estrutura se chamar Grade pode escrever algo assim
 

 struct Grade * define_grade(short m, short n, short z);

que cria uma grade e devolve pro seu programa.  Entende isso? Já devolve a grade populada com as minas e com os estados das células ok.

Pense em uma definição para Grade que descreva bem o problema. Nem mais nem menos. Um dia isso foi um jogo de tabuleiro, onde você recebia continhas coloridas pra marcar as minas e pinos coloridos para marcas os resultaos, e jogava um contra o outro. Tinha a versão da batalha naval e mais mil variantes...

Saberia escrever esses dois?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@arfneto 

Estava tentando ao menos imprimir a primeira tabela, com uma matriz, igual existe no enunciado, mas não tive sucesso ainda, a saída me mostra números aleatórios sem sentido. 😥 Basicamente estou tentando seguir o enunciado e desbravando as coisas aos poucos, por mais complicado que seja.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 minutos atrás, Daniela Calfat Maldaun disse:

mas há peculiaridades no enunciado pedido que acredito que faça com que seja uma variação não-usual do programa que estamos acostumados a ver no windows e afins.

 

A funcionalidade do jogo no Windows me parece ser a mesma da proposta no enunciado. No campo minado do Windows você deve clicar com o botão direito do mouse para marcar uma posição com a bandeira onde acha que tem uma mina, aí não tem risco de clicar por engano e detonar a mina marcada, porque não dá pra clicar na casa marcada, e também vai subtraindo do número de minas ainda não descobertas.

 

 

15 minutos atrás, arfneto disse:

A única variação do usual --- ok, não jogo isso há eras --- acho que é a possibilidade de marcas as células suspeitas, ou desmarcar. Ou já tinha e eu nem sabia e marcava num papel :( 

 

Sempre funcionou assim mas é normal não saber, a muita gente que já jogou não sabe.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
36 minutos atrás, Daniela Calfat Maldaun disse:

int tabuleiro[m][n];

 

Declare o tabuleiro com o tamanho maximo mesmo. No seu código você controla o que o sujeito digitou. 90x90 nem é grande assim. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@arfneto E como eu controlo para aparecer o tabuleiro apenas com os dados inseridos pelo usuário?

adicionado 1 minuto depois

@arfneto você viu o enunciado? Aparece um tabuleiro com tamanho definido pelo usuário. 

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 minutos atrás, Daniela Calfat Maldaun disse:

@arfneto E como eu controlo para aparecer o tabuleiro apenas com os dados inseridos pelo usuário?

adicionado 1 minuto depois

@arfneto você viu o enunciado? Aparece um tabuleiro com tamanho definido pelo usuário. 

 

A ideia do @arfneto  seria ter uma matriz de tamanho 90x90 na memória mas só usar uma parte dela, ou seja usar a parte que interessa para as dimensões escolhidas pelo usuário.

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, Daniela Calfat Maldaun disse:

@arfneto E como eu controlo para aparecer o tabuleiro apenas com os dados inseridos pelo usuário?

adicionado 1 minuto depois

@arfneto você viu o enunciado? Aparece um tabuleiro com tamanho definido pelo usuário. 

 

Sim. 

 

No seu teste, coloque um valor fixo para as celulas do tabuleiro, para saber ideia se vai imprimir ok depois, algo como

10 * linha + coluna. E use um espaço depois onde imprime tabuleiro[m][n] para não ficar tudo grudado.

E esta salvando m e n para depois usar como indice no for. Porque nao escrever direto usando os indices i e j por exemplo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Só como uma observação sobre o enunciado do trabalho:

 

O problema do enunciado é como ele propõe marcar as minas usando apenas rand(), mas não diz o que fazer se sortear uma posição onde já havia colocado uma mina anteriormente, nesse caso teria que sortear novamente até achar uma posição sem mina, mas aí tem o outro problema de ficar em loop infinito quando tiver um número grande de minas e o programa ficar sorteando milhares de vezes sem nunca achar uma casa vazia até travar.

 

Desse jeito, na situação que tiver um campo minado de 90 por 90 e 8099 minas (=90*90-1), por exemplo, é certeza que o programa vai travar, mas vamos assumir que o usuário sempre escolhe um número baixo de minas em relação ao tamanho do campo minado...

 

(Se quiser ver um método melhor depois veja como implementei no meu campo minado. Usei um algoritmo que pega um vetor com os números das posições do campo em sequencia (de 1 até m*n) e embaralhar os números aleatoriamente no vetor, e então as posições do campo que recebem as minas serão as posições dos z primeiros números do vetor embaralhado.)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@arfneto Eu nao entendi muito bem como fazer. Olhando o enunciado, me parece que os indices i, j serão utilizados posteriormente para os “chutes” do usuario. 

adicionado 4 minutos depois

Obrigada @isrnick @arfneto , vou reler as dicas e ver o que consigo fazer no código. Obrigada pela gentileza de vocês!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

leia  esse com atencao. E quase igual

	//
	// em uso estão mxn celulas apenas
	//
	for (i = 0; i < m; i++)
	{
		// m linhas
		for (j = 0; j < n; j++)
		{
			// colunas
			tabuleiro[i][j] = j + 10 * i; // pra saber o que esperar
		}
	}	// gravou um tabuleiro de teste

	// agora mostra
	for (i = 0; i < m; i++)
	{
		// m linhas
		for ( j = 0; j < n; j++)
		{
			// imprime [m][n]
			printf("%4i ", tabuleiro[i][j]);
		}
		printf("\n)");
	}

Vai imprimir assim:

190614-teste.png.06f9324d819e630c5030d10f215abfc6.png

 

Entende o que quero dizer como preencher com algo conhecido pra ver se está indo ok?

adicionado 28 minutos depois
14 minutos atrás, isrnick disse:

O problema do enunciado é como ele propõe marcar as minas usando apenas rand(), mas não diz o que fazer se sortear uma posição onde já havia colocado uma mina anteriormente, nesse caso teria que sortear novamente até achar uma posição sem mina, mas aí tem o outro problema de ficar em loop infinito quando tiver um número grande de minas e o programa ficar sorteando milhares de vezes sem nunca achar uma casa vazia até travar.

 

Desse jeito, na situação que tiver um campo minado de 90 por 90 e 8099 minas (=90*90-1), por exemplo, é certeza que o programa vai travar, mas vamos assumir que o usuário sempre escolhe um número baixo de minas em relação ao tamanho do campo minado

@isrnick

Essa é uma pegadinha clássica. Acho que o que se procura nesse exercício é ver se o aluno resiste à tentação de implementar sem pensar. Com esse número máximo de minas e os computadores de hoje em dia, vai ser zero eficiente mas vai levar uns segundos a mais talvez. Mas você tem razão: não é esperto fazer assim.


Essa situação é comum nos jogos de cartas para embaralhar antes de dar cartas de novo.

 

Um procedimento eficiente e seguro: imagine que você tem que colocar as 8099 minas em um tabuleiro de 8100 como falou: quando for colocar a ultima terá duas posições vazias e terá que escolher uma delas para colocar a última mina. 

Mas no início terá 8100 casinhas livres para colocar sua próxima mina... Então como preencher o tabuleiro com exatas 8099 chamadas a rand()? Simples: veja o tabuleiro como uma longa fila de 8100 casinhas: no fundo é isso mesmo, certo?

Use rand() e sorteie a posicao da primeira mina. Agora voce tem 8099 possibilidades para colocar a proxima das 8098 minas restantes, certo? entao usa rand() e escolhe uma posicao nova, mas dessa vez entre 1 e 8099, ja que uma mina já está lá.

E assim por diante, até restar uma mina e duas casinhas livres.

 

Como colocar a mina no tabuleiro? Simples: pegue a posicao sorteada e conte de um em um a partir da primeira, mas obviamente pulando as posições onde ja tem mina,  que nesse caso valem -1, pelo que vi.

 

Acho que entendeu já, mas na prática:

 

você usa um loop variando o total de minas a colocar. No inicio tem as z minas do enunciado. a cada passo no loop voce escolhe 1 mina entre as posições restantes, que serao o tamanho do tabuleiro menos o total de minas que ja estão la.

E aí cola ela na posicao sorteada, pulando as celulas que ja tem minas. Assim garante matematicamente o total de chamadas a rand() e evita a degradação dos tempos de execução conforme o tabuleiro vai ficando cheio... O total de "sorteios" fica constante: igual ao numero de minas, z

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisa de 2 matrizes para o tabuleiro, uma para guardar valores de -1 até 8 (-1 se tiver mina e 0 a 8 nas demais posições dependendo do número de minas ao redor), e outra matriz para guardar o estado da casa fechado, aberto ou marcado (pode ser com números correspondentes 0, 1 e 2 respectivamente por exemplo).

 

Um passo a passo básico da lógica do programa:

 

0- Entrada de dados pelo usuário

1- Preencher as 2 matrizes com valores 0 para inicializá-las.

2- Na matriz de valores sortear z posições e colocar -1 indicando as posições que possuem uma mina.

3- Percorrer a matriz de valores colocando um número de 0 a 8 nas casas sem minas dependendo da quantidade de minas ao redor de cada uma delas.

4- Fazer o loop que fica imprimindo o tabuleiro e pedindo para o usuário digitar a próxima jogada até uma das condições de fim de jogo aconteça, o que é impresso no campo depende do que está aberto (imprime valor da casa ou minas estouradas), fechado (imprime . ) ou marcado (imprime * ) na matriz de estados.

5- Fazer a lógica de abertura ou marcação e desmarcação de casas mudando a matriz de estados adequadamente.

 

(Precisa fazer uma função recursiva para fazer a abertura automática das casas ao redor de casas abertas com valor 0, essa talvez seja a parte mais complicada, então primeiro faça normal abrindo só 1 casa mesmo nesse caso para pelo menos ter um jogo funcional salva em um arquivo separado, antes de tentar fazer isso.)

 

adicionado 12 minutos depois

 

@arfneto Sim, isso é o que o algoritmo de embaralhamento (Fisher-Yates ou Knuth shuffle) que mencionei faz, dei a explicação embaralhando o vetor de posições inteiro para facilitar a compreensão e implementação da lógica, mas poderia realizar apenas z operações de embaralhamento para obter z posições.

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

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!