Ir ao conteúdo
  • Cadastre-se

Jogo a senha no Visualg


Posts recomendados

Preciso fazer o ranking deste jogo, mas não estou conseguindo, se alguém puder dar uma ajuda!

Algoritmo "trab"

Var

   menu, menu1, menu2, menu3, contador1, jogador_atual, contador2, jogada, erro, identificador, identificar, certos, x, contador3: inteiro
   cores: vetor [0..5] de inteiro  //numero que identifica as cores
   senha: vetor [1..4] de inteiro // senha sorteada pela maquina
   jogadas: vetor[1..10, 1..4] de inteiro // matriz que armazena todas as 10 jogadas
   jogadores: vetor [1..10, 1..1] de inteiro // ranking

Inicio
      cores[0] <- 1
      cores[1] <- 2
      cores[2] <- 3
      cores[3] <- 4
      cores[4] <- 5
      cores[5] <- 6
      Escreval("=================================================================")
      Escreval("===========================JOGO SENHA============================")
      Escreval("=================================================================")
      Escreval("    Autores: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.")
      Escreval("=================================================================")
      Escreval("")
      repita
      Escreval("")
      Escreval("O que você deseja fazer no jogo?")
      Escreval("")
      Escreval("1- Definir jogador")
      Escreval("2- Jogar")
      Escreval("3- Ranking")
      Escreval("4- Sair")
      Leia (menu)
      SE (menu = 1) então //DEFINIR QUEM VAI JOGAR
         Escreval("1 - Jogador 1")
         Escreval("2 - Jogador 2")
         Escreval("3 - Jogador 3")
         Escreval("4 - Jogador 4")
         Escreval("5 - Jogador 5")
         Escreval("6 - Jogador 6")
         Escreval("7 - Jogador 7")
         Escreval("8 - Jogador 8")
         Escreval("9 - Jogador 9")
         Escreval("10 - Jogador 10")
         Escreval("Qual jogador você é ou deseja ser no jogo?")
         Leia(jogador_atual)
         SE (jogador_atual > 10) ou (jogador_atual < 1) então
            Escreval("Você digitou um jogador inválido, interrompendo o programa..")
            Interrompa
         FimSE
      FimSE

      SE (menu = 2) então // JOGO
         //PRONTO
         SE (jogador_atual = 0) então
            Escreval("Você não definiu um jogador ainda, defina antes de jogar!")
         FimSE
         SE (jogador_atual <> 0) então
         Para contador1 de 1 ate 4 faca
              senha[contador1] <- cores[randi(5)]
         FimPara
         Escreval("A senha já foi sorteada, portanto comece suas jogadas")
         Escreval("Para jogar, você digita uma cor que é representada por um numero")
         Escreval("Tabela:")
         Escreval("1- AMARELO == 2- AZUL == 3- MARROM")
         Escreval("4- ROSA == 5- VERMELHO == 6- ROSA")
         Para contador1 de 1 ate 10 faca
              Escreval("Digite os 4 valores da sua",contador1, " jogada.")
              Para contador2 de 1 ate 4 faca
                   Leia(jogadas[contador1, contador2])
                   SE (jogadas[contador1, contador2] < 1) então
                      Escreval("")
                      Escreval("O numero deve ser maior que zero..")
                      Escreval("Jogo encerrando...")
                      erro <- 10
                   FimSE
                   SE (jogadas[contador1, contador2] > 6) então
                      Escreval("")
                      Escreval("O numero deve ser menor que seis..")
                      Escreval("Jogo encerrando...")
                      erro <- 10
                   FimSE
                   SE (erro = 10) então
                      Interrompa
                   FimSE
                   SE (jogadas[contador1, contador2] = senha[contador2]) então
                      Escreval("===============================")
                      Escreval("PRETO NA JOGADA", contador2, "!!!")
                      Escreval("A escolha dessa jogada está certa.")
                      Escreval("Não troque essa jogada.")
                      certos <- certos +1
                   FimSE
                   SE (jogadas[contador1, contador2] <> senha[contador2]) então
                           SE ((jogadas[contador1, contador2] = senha[1]) ou (jogadas[contador1, contador2] = senha[2]) ou (jogadas[contador1, contador2] = senha[3]) ou (jogadas[contador1,contador2] = senha[4])) então
                              Escreval("===============================")
                              Escreval("Branco na jogada", contador2,"!!!")
                           FimSE
                   FimSE
              FimPara
              SE (erro = 10) então
                 Interrompa
              FimSE
              jogada <- jogada +1
                   SE (certos = 4) então
                      Escreval("VOCÊ ACERTOU A SENHA!!!")
                      Escreval("Parabéns, jogador!")
                      Escreval("Seu SCORE será aumentado.")
                      jogadores[jogador_atual, 1] <- jogadores[jogador_atual, 1] + 10
                      Interrompa
                   FimSE
                   SE (certos <> 4) e (jogada = 10) então
                      Escreval("Você não conseguiu descobrir a senha..")
                      Escreval("Seu SCORE será diminuido.")
                      jogadores[jogador_atual, 1] <- jogadores[jogador_atual, 1] - 10
                      Interrompa
                   FimSE
                   certos <- 0
         FimPara
         FimSE
      FimSE
      
      SE (menu = 3) então //RANKING
         Escreval("============== RANKING DE PONTOS ==============")
        
Fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Ola @Johannfer.

 

Como será deveria ser esse hanking?  Então, antes de pensar nele, primeiro deixe as estruturas anteriores funcionando.. Tentei testar o seu código, mas não funcionou. Por exemplo, onde está o ate do repita?

 

Sempre mantenhas as estruturas completas.. ex.: a parte do hanking poderia ficar assim por enquanto:
 

   se (menu = 3) ENTÃO //RANKING
      escreval("============== RANKING DE PONTOS ==============")
      escrevel("")
      escrevel("     --     EM CONSTRUÇÃO     ---     ")
   fimSe

 

 

Por favor, ajuste o seu código, após tentamos verificar essa parte do hanking.

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

O codigo foi modificado, preciso fazer um ranking onde o jogador selecionado apareça com sua respectiva pontuação!

Algoritmo "trab"

Var

   menu, menu1, menu2, menu3, contador1, jogador_atual, contador2, jogada, i, erro, identificador, identificar, certos, x, contador3, j, aux: inteiro
   cores: vetor [0..5] de inteiro  //numero que identifica as cores
   senha: vetor [1..4] de inteiro // senha sorteada pela maquina
   jogadas: vetor[1..10, 1..4] de inteiro // matriz que armazena todas as 10 jogadas
   
   pontos_jogadores: vetor [1..10] de inteiro // ranking
   houveTroca: logico

Inicio
      cores[0] <- 1
      cores[1] <- 2
      cores[2] <- 3
      cores[3] <- 4
      cores[4] <- 5
      cores[5] <- 6
      Procedimento  Menu1
      inicio
            Escreval("")
            Escreval("O que você deseja fazer no jogo?")
            Escreval("")
            Escreval("1- Definir jogador")
            Escreval("2- Jogar")
             Escreval("3- Ranking")
              Escreval("4- Sair")
               Leia (menu)
      FimProcedimento
      
      Escreval("=================================================================")
      Escreval("===========================JOGO SENHA============================")
      Escreval("=================================================================")
      Escreval("    Autores: Laura Johann, Douglas Madruga e Henrique Dahlem.")
      Escreval("=================================================================")
      Escreval("")
      Menu1
      SE (menu = 1) então //DEFINIR QUEM VAI JOGAR
         Escreval("1 - Jogador 1")
         Escreval("2 - Jogador 2")
         Escreval("3 - Jogador 3")
         Escreval("4 - Jogador 4")
         Escreval("5 - Jogador 5")
         Escreval("6 - Jogador 6")
         Escreval("7 - Jogador 7")
         Escreval("8 - Jogador 8")
         Escreval("9 - Jogador 9")
         Escreval("10 - Jogador 10")
         Escreval("Qual jogador você é ou deseja ser no jogo?")
         Leia(jogador_atual)
         SE (jogador_atual > 10) ou (jogador_atual < 1) então
            Escreval("Você digitou um jogador inválido, interrompendo o programa..")
            Interrompa
         FimSE
      FimSE
      Menu1

      SE (menu = 2) então // JOGO
         //PRONTO
         SE (jogador_atual = 0) então
            Escreval("Você não definiu um jogador ainda, defina antes de jogar!")
         FimSE
         SE (jogador_atual <> 0) então
         Para contador1 de 1 ate 4 faca
              senha[contador1] <- cores[randi(5)]
         FimPara
         Escreval("A senha já foi sorteada, portanto comece suas jogadas")
         Escreval("Para jogar, você digita uma cor que é representada por um numero")
         Escreval("Tabela:")
         Escreval("1- AMARELO == 2- AZUL == 3- MARROM")
         Escreval("4- ROSA == 5- VERMELHO == 6- ROSA")
         Para contador1 de 1 ate 10 faca
              Escreval("Digite os 4 valores da sua",contador1, " jogada.")
              Para contador2 de 1 ate 4 faca
                   Leia(jogadas[contador1, contador2])
                   SE (jogadas[contador1, contador2] < 1) então
                      Escreval("")
                      Escreval("O numero deve ser maior que zero..")
                      Escreval("Jogo encerrando...")
                      erro <- 10
                   FimSE
                   SE (jogadas[contador1, contador2] > 6) então
                      Escreval("")
                      Escreval("O numero deve ser menor que seis..")
                      Escreval("Jogo encerrando...")
                      erro <- 10
                   FimSE
                   SE (erro = 10) então
                      Interrompa
                   FimSE
                   SE (jogadas[contador1, contador2] = senha[contador2]) então
                      Escreval("===============================")
                      Escreval("PRETO NA JOGADA", contador2, "!!!")
                      Escreval("A escolha dessa jogada está certa.")
                      Escreval("Não troque essa jogada.")
                      certos <- certos +1
                   FimSE
                   SE (jogadas[contador1, contador2] <> senha[contador2]) então
                           SE ((jogadas[contador1, contador2] = senha[1]) ou (jogadas[contador1, contador2] = senha[2]) ou (jogadas[contador1, contador2] = senha[3]) ou (jogadas[contador1,contador2] = senha[4])) então
                              Escreval("===============================")
                              Escreval("Branco na jogada", contador2,"!!!")
                           FimSE
                   FimSE
              FimPara
              SE (erro = 10) então
                 Interrompa
              FimSE
              jogada <- jogada +1
                   SE (certos = 4) então
                      Escreval("VOCÊ ACERTOU A SENHA!!!")
                      Escreval("Parabéns, jogador!")
                      Escreval("Seu SCORE será aumentado.")
                      pontos_jogadores[jogador_atual] <- pontos_jogadores[jogador_atual] + 10
                      Interrompa
                   FimSE
                   SE (certos <> 4) e (jogada = 10) então
                      Escreval("Você não conseguiu descobrir a senha..")
                      Escreval("Seu SCORE será diminuido.")
                      pontos_jogadores[jogador_atual] <- pontos_jogadores[jogador_atual] - 10
                      Interrompa
                   FimSE
                   certos <- 0
         FimPara
         FimSE
      FimSE
      Menu1
      
      SE (menu = 3) então //RANKING
         Escreval("============== RANKING DE PONTOS ==============")
         houveTroca <- verdadeiro
         ENQUANTO houveTroca FACA
                  houveTroca <- FALSO
                  PARA j de 1 ATE 10-1 FACA
                       SE pontos_jogadores[j] < pontos_jogadores[j+1] então
                              aux <- pontos_jogadores[j+1]
                                  pontos_jogadores[j+1] <- pontos_jogadores[j]
                              pontos_jogadores[j] <- aux
                              houveTroca <- verdadeiro
                         FIMSE
                  FIMPARA
         FimEnquanto


         Para contador1 de 1 ate 10 faca
              Escreval("Pontuação do jogador", contador1,":", pontos_jogadores[contador1])
         FimPara
      FimSE
      Menu1
      SE (menu = 4) então
         Interrompa
      FimSE
Fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Johannfer.

 

Primeiramente creio que precisa ajustar alguns conceitos aplicados no código.

 

1) INDENTAÇÃO DE CÓDIGO

Seu código até que está parcialmente indentado, mas alguns espaçamentos estão fora do compasso... a minha sugestão seria usar 3, e somente 3, espaços para cada "dente". Para facilitar tente configurar a tabulação do VisuAlg.

 

- Vá no Menu "Manutenção/Configurações"
- Na guia "Editor", desmarque a opção "Usar tabulação inteligente", e deixe a "largura de tabulação" em 3.

 

 

 

2) DECLARAÇÃO DE PROCEDIMENTO

Você está declarando o procedimento dentro do corpo do programa principal... o VisuAlg até está aceitando, só não sei se é por bug ou se é um funcionalidade...

 

Enfim... a mais "normal" seria declarar antes do INICIO do programa principal... algo assim:

 

Algoritmo "trab"
Var
   menu, menu1, menu2, menu3, contador1, jogador_atual, contador2, jogada, i, erro, identificador, identificar, certos, x, contador3, j, aux: inteiro
   cores: vetor [0..5] de inteiro  //numero que identifica as cores
   senha: vetor [1..4] de inteiro // senha sorteada pela maquina
   jogadas: vetor[1..10, 1..4] de inteiro // matriz que armazena todas as 10 jogadas

   pontos_jogadores: vetor [1..10] de inteiro // ranking
   houveTroca: logico

Procedimento  Menu1
   inicio
   Escreval("")
   Escreval("O que você deseja fazer no jogo?")
   Escreval("")
   Escreval("1- Definir jogador")
   Escreval("2- Jogar")
   Escreval("3- Ranking")
   Escreval("4- Sair")
   Leia (menu)
FimProcedimento

Inicio
cores[0] <- 1
cores[1] <- 2
...

 

 

 

3) ESTRUTURA DE SELEÇÃO

No seu código, você está lendo a opção do menu antes de cada verificação de condição, mas deveria "entrar no menu" uma vez só... ou seja, verifica qual opção ele escolheu, daí usa os se para "selecionar" a opção ele fez. Mais abaixo complemento quando falar de menus...

 

 

 

4) USO DE MENUS

Menu é um conceito...  é uma abstração de como é utilizado na vida real.. basicamente é constituído de um laço de repetição, lista de opções, variável para obter a opção escolhida e uma estrutura de seleção (se ou caso) para selecionar qual parte do código será executada.

 

Resumidamente, o código poderia ficar algo assim:

Algoritmo "trab"
Var
   menu, menu1, menu2, menu3, contador1, jogador_atual, contador2, jogada, i, erro, identificador, identificar, certos, x, contador3, j, aux: inteiro
   cores: vetor [0..5] de inteiro  //numero que identifica as cores
   senha: vetor [1..4] de inteiro // senha sorteada pela maquina
   jogadas: vetor[1..10, 1..4] de inteiro // matriz que armazena todas as 10 jogadas

   pontos_jogadores: vetor [1..10] de inteiro // ranking
   houveTroca: logico

Procedimento  Menu1
   inicio
   Escreval("")
   Escreval("O que você deseja fazer no jogo?")
   Escreval("")
   Escreval("1- Definir jogador")
   Escreval("2- Jogar")
   Escreval("3- Ranking")
   Escreval("4- Sair")
   Leia (menu)
FimProcedimento

Inicio
cores[0] <- 1
cores[1] <- 2
cores[2] <- 3
cores[3] <- 4
cores[4] <- 5
cores[5] <- 6
repita
   {LimpaTela} //limpa a tela
   Escreval("=================================================================")
   Escreval("===========================JOGO SENHA============================")
   Escreval("=================================================================")
   Escreval("    Autores: Laura Johann, Douglas Madruga e Henrique Dahlem.")
   Escreval("=================================================================")
   Escreval("")
   Menu1
   SE (menu = 1) ENTÃO //DEFINIR QUEM VAI JOGAR

   FimSE
   SE (menu = 2) ENTÃO // JOGO

   FimSE

   SE (menu = 3) ENTÃO //RANKING

   FimSE
   SE (menu = 4) ENTÃO

   FimSE
ate menu=4
FimAlgoritmo

obs.: pelo que eu vi as variáveis menu1, menu2  e menu3 não estão sendo usadas, logo não devem ser declaradas.

 

 

 

***

 

Tente corrigir esses pontos, daí partimos para questão do ranking. Faça o jogo completar normalmente algumas vezes numa mesma execução... Tente imaginar (sem implementar ainda) que ao fim de cada jogo o programa irá armazenar os dados da partida..  no momento oportuno irá tratar esses dados para exibir como um ranking.

 

RESUMINDO: faça o programa rodar como se não existisse ranking! o que importa antes é o jogo.

 

No aguardo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olá @Simon Viegas!

O ranking está feito, porém não funciona! heheh  

O que acontece é :

A pontuação não soma e nem subtrai, caso o jogador acerte ou erre, sempre vai dar o mesmo valor!

Caso um jogador jogue mais de uma vez, o programa cria mais um jogador com a pontuação que o mesmo fez na jogada referente, ou seja, pode ter duas Marias com pontuações diferentes, sendo uma unica jogadora!!

trab.docx

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Johannfer

 

Para tentarmos alinhar os raciocínios, por favor, tente seguir (ou não) cada um dos item abaixo, daí responde cada um dizendo se vai seguir ou não, contra-argumentando ou onde está com dúvidas, ok?

 

 

1) USO DE MENUS (Urgente!)

No seu código, você está usando o procedimento Menu1 para chamar o procedimento jogar, e dentro de jogar está chamado novamente Menu1. Você NÃO PODE FAZER ISSO. O correto é deixar o jogar terminar para voltar para o Menu1. Veja, os procedimentos no VisuAlg são como sub-programas... Cada vez que um procedimento ou função é chamada, ele é empilhado na "pilha de processos", algo assim:

 

*** Ao iniciar, o "processo principal" é aberto no Windows. Ai, ao chamar o Menu1, é aberto um sub-processo que fica em cima do programa anterior... Ao chamar Jogar, ele ficará em cima de Menu1... Daí, o "correto" seria deixar o Jogar terminar para voltar para o Menu1, e aí poder selecionar outro opção de menu para abrir um novo sub-processo ou finalizar (tem que ser "uso, fecho e volto, uso fecho e volto)... do jeito que está sendo feito, o jogar está iniciando um novo Menu1, entende? Ficando algo assim:

 

Pilha de processos

MENU1
JOGAR
MENU1
PROGRAMA_PRINCIPAL

Ao continuar, o Menu1 lá de cima (onde estará rodando no momento) iria chamado um novo Jogar, aumentado a pilha de processos... tá dando para entender?  Isso está conceitualmente errado!!! Não pode!

 

Para corrigir isso, veja o item 4) da minha postagem anterior.  De lá, você pode adaptar ao seu novo código... ou seja, deixando o repita/ate dentro do menu. Entenda que ao finalizar um sub-programa, a execução do programa volta para a próximo linha após onde ele foi chamado!!!

 

 

 

2) INDENTAÇÃO

Seu código lá no docx para mim ainda está bagunçado, por favor, verifique o item 1 da minha postagem anterior. Para melhor entendimento do algoritmo é necessário que o código esteja indentado corretamente. Organize o seu código e poste ele diretamente na postagem (sem anexo)... basta clicar no botão <>, cola o código texto e inserir.

 

Resumindo: indente seu código e poste ela usando a tag CODE  (botão <>).

 

 

 

3) GERAÇÃO DE NÚMEROS ALEATÓRIOS

No seu código você está usando:

1 hora atrás, Johannfer disse:

senha[contador1] <- cores[randi(5)]

 

 

Mas veja, o vetor cores vai de 0 a 5, ou seja, são 6 posições!! Dessa forma só está sorteando 5 números: 0 a 4. E o 5?

 

Se tiver dúvidas, pouco sobre o Randi() aqui:

http://www.apoioinformatica.inf.br/produtos/item/30-as-funcoes-do-visualg-versao-2-0

 

Qualquer coisa dá um Google.

 

 

 

4) VARIÁVEIS "MENU"

Para que servem essa variáveis menu1, menu2, menu3? Onde estão ou deveriam está  sendo usadas.. na minha postagem anterior cheguei a comentar sobre elas:

 

Em 20/06/2017 às 11:58, Simon Viegas disse:

obs.: pelo que eu vi as variáveis menu1, menu2  e menu3 não estão sendo usadas, logo não devem ser declaradas.

 

 

 

 

5) VARIÁVEL CONT

Pelo que eu vi, a variável cont é desnecessária, apenas use:

  jogador_atual<-jogador_atual+1

 

 

 

6) GERAÇÃO DA SENHA

 

Em 19/06/2017 às 20:55, Johannfer disse:

      para contador1 de 1 ate 4 faca
         senha[contador1] <- cores[randi(5)]
      fimPara
      para i de 1 ate 4 faca
         escreva(senha[i])
      fimPara

 

Dá para juntar e deixar um para só... após sortear, exibe o número.

 

 

 

 

****

 

Lembrando: todos os pontos são importantes!!! Não dá para pular etapas, senão embola tudo!! Quanto maior o programa, mais difícil fica identificar os erros e tentar corrigir... o algoritmo já deve ir iniciando com os conceitos "certos".. 

 

Antes de qualquer coisa coisa... corrija o item 1 desta postagem! Aproveita já fazendo com item 2.

 

Só após isso, tente corrigir os outros aos poucos!

 

No aguardo.

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

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