Visualizando 6 respostas da discussão
  • Autor
    Posts
    • #98144

      Consegui prosseguir com o jogo de boa, mas tive problema com o preenchimentos das bombas. Ocorre que quando eu coloco para sortear o comando executa o sorteio mas, se os números forem repetidos eu fico com bombas faltando. Como eu posso estar corrigindo isso?

      OBS: É a primeira estrutura de repetição!

      
      programa
      {
      	
      inclua biblioteca Util --> u
      	funcao inicio()
      	{
      		cadeia campoMinado[5][5], campoExibicao[5][5]
      		inteiro linha, coluna, totBombas, comeco, fim = 5, x, y, pontuacao = 0
      		
      		escreva("{ EXERCÍCIO 068 - Jogo do campo minado }\n")
      
      		//Preenchimento das bombas.
      		para(totBombas = 5; totBombas > 0; totBombas--) {
      			para(totBombas = 5; totBombas > 0; totBombas--) {
      				linha  = sorteia(0, 4)
      				coluna = sorteia(0, 4)
      				campoMinado[linha][coluna] = "O"
      			}
      			escreva("\n")
      		}
      
      		//Preenchendo espaços vazios. 
      		para(linha = 0; linha < u.numero_linhas(campoMinado); linha++) {
      			para(coluna = 0; coluna < u.numero_linhas(campoMinado); coluna++) {
      				se(campoMinado[linha][coluna] != "O") {
      					campoMinado[linha][coluna] = "-"
      				}
      			}
      		}
      
      		//Campo de exibição da primeira tela!
      		para(linha = 0; linha < u.numero_linhas(campoExibicao); linha++) {
      			para(coluna = 0; coluna < u.numero_colunas(campoExibicao); coluna++) {
      				campoExibicao[linha][coluna] = "?"
      				escreva(campoExibicao[linha][coluna], " ")
      			}
      			escreva("\n")
      		}
      		
      		//Entrada das coordenadas.
      		para(comeco = 1; comeco <= fim; comeco++) {
      			escreva("----------------------------------------\n")
      			escreva("Faça sua jogada: TENTATIVA ", comeco, " de ", fim, "\n")
      			escreva("Linha: ")
      			leia(x)
      			escreva("Coluna: ")
      			leia(y)
      
      			//Teste para verificação de acertos
      			se(campoMinado[x][y] != "O") {
      				campoExibicao[x][y] = "V"
      				campoMinado[x][y]   = "V"
      				pontuacao += 2
      				escreva("----------------------------------------\n")
      				escreva("--> VOCÊ ACERTOU! Não acertou nenhuma bomba.\n")
      				para(linha = 0; linha < u.numero_linhas(campoExibicao); linha++) {
      					para(coluna = 0; coluna < u.numero_colunas(campoExibicao); coluna++) {
      						escreva(campoExibicao[linha][coluna], " ")
      					}
      					escreva("\n")
      				}
      				se(pontuacao == 10) {
      					escreva("PARABÉNS! Você ganhou e marcou um total de ", pontuacao, " pontos.\n")
      				}
      			  //Teste de bombas disparadas
      			} senao se(campoMinado[x][y] == "O") {
      				escreva("----------------------------------------\n")
      				escreva("--> VOCÊ ERROU! Uma bomba foi disparada.\n")
      				para(linha = 0; linha < u.numero_linhas(campoMinado); linha++) {
      					para(coluna = 0; coluna < u.numero_colunas(campoMinado); coluna++) {
      						escreva(campoMinado[linha][coluna], " ")
      					}
      					escreva("\n")
      				}
      				escreva("Fim de jogo! Você perdeu e marcou um total de ", pontuacao, " pontos. \n")
      				pare
      			}
      		}
      		
      	}
      }
      
      
    • #98213
      Tutora Jessica
      Moderador

      Olá Rafael,
      Para esse tipo de situação o enquanto se encaixa melhor, pois com o para ele pode sortear duas vezes na mesma posição.
      Então no preenchimento das bombas, use a função enquanto e veja se vai funcionar.
      Depois nos dê o feedback se funcionou 🖖

    • #98263
      Tutora Jessica
      Moderador

      Parabéns Rafael 🖖

    • #98287
      Felipe Barbour
      Participante

      Bom dia, rsrs….
      Entaooo, eu consegui chegar ao resultado esperado, porém minha lógica está com um pequeno problema, as vezes ele sorteia 3 bombas ou 4 bombas, ao verificar a lógica do professor creio que eu fiz pelo caminho mais difícil, gostaria de um auxilio referente a minha lógica, segue abaixo:

      programa
      {
      inclua biblioteca Util –> u
      funcao inicio()
      {
      inteiro totcerto = 0, tot=1
      cadeia jogo[4][4]

      escreva(“{ EXERCÍCIO – 068 Jogo Campo Minado }\n”)
      escreva (“BOMBA = O”)
      escreva (“\nSua jogada = V\n”)
      para (inteiro sort = 0; sort < u.numero_colunas(jogo); sort++){
      inteiro l = u.sorteia(0, u.numero_linhas(jogo)-1)
      inteiro c = u.sorteia(0, u.numero_colunas(jogo)-1)
      jogo[l][c] = ” O ”
      }
      para (inteiro l = 0; l < u.numero_linhas(jogo); l++){
      para (inteiro c = 0; c < u.numero_colunas(jogo); c++){
      se (jogo[l][c] != ” O “){
      jogo[l][c] = “-”
      }
      }
      }
      para (inteiro l = 0; l < u.numero_linhas(jogo); l++){
      para (inteiro c = 0; c < u.numero_colunas(jogo); c++){
      se (jogo[l][c] != ” V “){
      escreva (” ? “)
      }
      }
      escreva (“\n”)
      }
      escreva (“———————————————–“)
      para (inteiro sort = 0; sort < u.numero_colunas(jogo); sort++){
      inteiro l
      inteiro c
      escreva (“\nFaça sua jogada! (Tentativa: “, tot, “)\n”)
      escreva (“LINHA = “)
      leia (l)
      escreva (“\nColuna = “)
      leia (c)
      escreva (“———————————————–“)
      se (jogo[l][c] != ” O “){
      escreva (“\n–> ATIROU CERTO! Não acertou nenhuma bomba!!\n”)
      jogo[l][c] = ” V ”
      totcerto+=2
      tot++

      para ( l = 0; l < u.numero_linhas(jogo); l++){
      para ( c = 0; c < u.numero_colunas(jogo); c++){
      se (jogo[l][c] != ” V “){
      escreva (” ? “)
      } senao {
      escreva (jogo[l][c])
      }
      }
      escreva (“\n”)
      }

      } senao {
      se (jogo[l][c] == ” O “){
      escreva (“\n–> TIRO ERRADO! Acertou uma BOMBA!!”)
      escreva (“\n\n\n”)
      escreva (“———————————————–“)
      escreva (“\nFIM DO JOGO!\n”)
      para (l = 0; l < u.numero_linhas(jogo); l++){
      para (c = 0; c < u.numero_colunas(jogo); c++){
      se (jogo[l][c] != ” O ” e jogo [l][c] != ” V “){
      jogo[l][c] = ” – ”
      }
      escreva (jogo[l][c])
      }
      escreva (“\n”)
      }
      escreva (“\nVocê fez “, totcerto, ” pontos, em “, tot, ” tentativas!!\n”)
      escreva (“———————————————–“)
      pare
      }
      }
      }
      }
      }

    • #98294
      Tutora Jessica
      Moderador

      Olá Felipe, tudo bem?
      Então, dê uma olhadinha no código acima do Rafael e te indico também a usar o enquanto no sorteio das bombas.
      Peço também para que quando for enviar o seu código, selecione a parte inteira do código e clique em CODE na caixinha aqui do fórum, que ai ele já vem formatado direitinho.
      Tente dessa forma, usando o enquanto, caso tenha alguma dificuldade, só retornar ao fórum.
      Bons estudos 🖖

    • #101243
      Robson Lopes da Silva
      Participante

      Olá pessoal!
      Com a ajuda dos comentários acima, conseguir chegar a essa conclusão.
      Vibrei muito! Mas se houver algo a melhor ou corrigir, ficarei feliz em saber.
      Boas práticas.

      programa
      {

      inclua biblioteca Util –> u
      funcao inicio()
      {
      // DECRAÇÃO DE VARIÁVEIS E MATRIZES
      logico bomba = falso
      inteiro tentativa = 1
      inteiro pontos = 0
      caracter matriz[5][5]
      caracter jogo_velha[5][5]
      // PREENCHIMENTO MATRIZ JOGO DA VELHA
      para(inteiro l = 0; l < u.numero_linhas(jogo_velha); l++){
      para(inteiro c = 0; c < u.numero_colunas(jogo_velha); c++){
      inteiro sorteio = sorteia(0,1)
      se(sorteio == 1){
      jogo_velha[l][c] = ‘O’
      }senao{
      jogo_velha[l][c] = ‘-‘
      }
      }
      }
      // MOSTRANDO MATRIZ PARA COMPARAÇÃO
      para(inteiro l = 0; l < u.numero_linhas(matriz); l++){
      para(inteiro c = 0; c < u.numero_colunas(matriz); c++){
      matriz[l][c] = ‘?’
      escreva(matriz[l][c] + ” “)
      }
      escreva(“\n”)
      }
      enquanto(bomba == falso){
      inteiro linha
      inteiro coluna
      escreva(“——————————–\n”)
      escreva(“Faça sua jogada! (Tentativa: ” + tentativa + “)\n”)
      escreva(“LINHA = “)
      leia(linha)
      escreva(“COLUNA = “)
      leia(coluna)
      matriz[linha][coluna] = ‘O’
      escreva(“——————————–\n”)
      se(matriz[linha][coluna] == jogo_velha[linha][coluna]){
      escreva(“–> TIRO ERRADO! Acertou uma bomba!\n”)
      jogo_velha[linha][coluna] = ‘*’
      bomba = verdadeiro
      }senao{
      escreva(“–> ATIROU CERTO! Não acertou nenhuma bomba!\n”)
      jogo_velha[linha][coluna] = ‘V’
      pontos+= 2
      para(inteiro l = 0; l < u.numero_linhas(matriz); l++){
      para(inteiro c = 0; c < u.numero_colunas(matriz); c++){
      escreva(matriz[l][c] + ” “)
      }
      escreva(“\n”)
      }
      }
      tentativa++
      se(tentativa == 6){
      bomba = verdadeiro
      }
      } // FIM ENQUANTO
      escreva(“——————————–\n”)
      escreva(“FIM DE JOGO!\n”)
      para(inteiro l = 0; l < u.numero_linhas(jogo_velha); l++){
      para(inteiro c = 0; c < u.numero_colunas(jogo_velha); c++){
      escreva(jogo_velha[l][c] + ” “)
      }
      escreva(“\n”)
      }
      escreva(“Você fez ” + pontos + ” pontos em ” + (tentativa – 1) + ” tentativas.\n”)
      escreva(“——————————–\n”)
      }
      }

    • #101244
      Tutora Jessica
      Moderador

      Ola Robson,
      Parabéns pelo seu empenho, continue assim!!
      Cada pessoa tem sua forma de programar, e todas as formas estão corretas, o mais importante é você entender o passo a passo e a lógica do exercício .
      Bons estudos 🖖

Visualizando 6 respostas da discussão
  • Você deve fazer login para responder a este tópico.