5
respostas

Problema com verificação da letra na palavra

Quando eu rodo o meu código e digito a palavra correta ele retorna que eu acertei , mas quando antés disso eu digito uma letra ( que está nessa palavra ) ele retorns dizendo que achou a letra 11 vezes na palavra (sendo que ela só aparece 1 vez na palavra ) e apartir dai nem a palavra secreta e reconhecida com a respsota correta . O que faço para corrigir isto ?

Segue o código abaixo :

def daBoasVindas()

    puts ("\n")
    puts ("===========================")
    puts ("Bem Vindo Ao Jogo da Forca ")
    puts ("===========================")
    puts ("\n")
    puts ("Qual é o seu nome ? ")
    nome = gets.strip
    puts ("\n\n")
    puts ("Olá , #{nome} , começaremos o jogo para você ...")
    return nome


end

def escolhePalavraSecreta()

    puts ("\n\n")
    puts ("escolhendo a palavra secreta....")
    palavraSecreta = "programador"
    puts ("\n")
    puts("a palavra secreta possui #{palavraSecreta.size} letras ")
    return palavraSecreta


end

def pedeChute(erros , chutes , nomeJogador)

    puts ("\n\n\n\n")
    puts ("Erros até agora : #{erros}")
    puts ("Chutes até agora : #{chutes}")
    puts ("\n")
    puts ("Digite uma letra ou uma palavra :")
    chuteUsuario = gets.strip
    puts ("\n\n")
    puts ("Será que você acertou #{nomeJogador} ? Você chutou : #{chuteUsuario}")
    return chuteUsuario

end

def joga(nomeJogador)

    resposta = escolhePalavraSecreta()

    erros = 0

    chutes = []

    pontosAtéAgora = 0

    while erros < 5

        chute = pedeChute(erros , chutes , nomeJogador)

        chutes << chute

        if (chute.size == 1)


            letraProcurada = chutes[0]

            numeroDeLetrasEncontradas = 0

            for i in 0..(resposta.size - 1 )

                if  (resposta[i] = letraProcurada)

                    numeroDeLetrasEncontradas += 1


                end

            end

            if numeroDeLetrasEncontradas != 0

                puts ("\n")
                puts ("encontrei a  letra #{chute} #{numeroDeLetrasEncontradas} vezes na palavra secreta ")

            else

                puts ("\n")
                puts ("letra #{chute} não encontrada na palavra secreta")
                erros += 1

            end


        else

             chute == resposta

            if (chute == resposta)

                puts ("\n\n")
                puts ("========================================")
                puts ("Parabéns #{nomeJogador} você acertou !!!")
                puts ("========================================")
                pontosAtéAgora += 100
                break

            else

                puts ("\n\n")
                puts ("Que pena #{nomeJogador} você errou .....")
                puts ("\n")
                pontosAtéAgora -= 30
                puts ("Você tem #{pontosAtéAgora} pontos.")
                puts ("\n")
                erros += 1

            end

        end


    end

    puts ("Você  ganhou #{pontosAtéAgora} pontos.")

end

def nãoQuerJogar?()

    puts ("\n")
    puts ("=========================")
    puts ("Deseja jogar novamente ?")
    puts ("S = Sim")
    puts ("N = Não")
    puts ("=========================")
    queroJogar = gets.strip
    nãoQueroJogar = queroJogar.upcase == "N" 

end


nomeJogador = daBoasVindas()

loop do 


    joga(nomeJogador)

    if(nãoQuerJogar?)

        break

    end



end
5 respostas

Oi Mateus, tudo bem? Olha esse trecho de código:

if (resposta[i] = letraProcurada)
    numeroDeLetrasEncontradas += 1
end

Neste caso, você não está comparando, e sim, atribuindo, substituindo todas as letras da palavra pelo chute. Para corrigir, basta colocar mais um igual, assim a operação deixa de ser de atribuição e passa a ser de comparação.

if (resposta[i] == letraProcurada)
    numeroDeLetrasEncontradas += 1
end

agora que eu já corrigi isto ele apenas me retorna que encontrou a letra apenas uma vez (mesmo ela aparecendo duas vezes na palara , como a letra "o").....

def daBoasVindas()

    puts ("\n")
    puts ("===========================")
    puts ("Bem Vindo Ao Jogo da Forca ")
    puts ("===========================")
    puts ("\n")
    puts ("Qual é o seu nome ? ")
    nome = gets.strip
    puts ("\n\n")
    puts ("Olá , #{nome} , começaremos o jogo para você ...")
    return nome


end

def escolhePalavraSecreta()

    puts ("\n\n")
    puts ("escolhendo a palavra secreta....")
    palavraSecreta = "programador"
    puts ("\n")
    puts("a palavra secreta possui #{palavraSecreta.size} letras ")
    return palavraSecreta


end

def pedeChute(erros , chutes , nomeJogador)

    puts ("\n\n\n\n")
    puts ("Erros até agora : #{erros}")
    puts ("Chutes até agora : #{chutes}")
    puts ("\n")
    puts ("Digite uma letra ou uma palavra :")
    chuteUsuario = gets.strip
    puts ("\n\n")
    puts ("Será que você acertou #{nomeJogador} ? Você chutou : #{chuteUsuario}")
    return chuteUsuario

end

def joga(nomeJogador)

    resposta = escolhePalavraSecreta()

    erros = 0

    chutes = []

    pontosAtéAgora = 0

    while erros < 5

        chute = pedeChute(erros , chutes , nomeJogador)

        chutes << chute

        if (chute.size == 1)


            letraProcurada = chutes[0]


            numeroDeLetrasEncontradas = resposta.count(letraProcurada)

            if numeroDeLetrasEncontradas == 0

                puts ("\n")
                puts ("A letra #{chute} não foi encontrada na palavra secreta")
                erros += 1

            else

                puts ("\n")
                puts ("letra #{chute} foi encontrada na palavra secreta #{numeroDeLetrasEncontradas} vezes")


            end


        else

             chute == resposta

            if (chute == resposta)

                puts ("\n\n")
                puts ("========================================")
                puts ("Parabéns #{nomeJogador} você acertou !!!")
                puts ("========================================")
                pontosAtéAgora += 100
                break

            else

                puts ("\n\n")
                puts ("Que pena #{nomeJogador} você errou .....")
                puts ("\n")
                pontosAtéAgora -= 30
                puts ("Você tem #{pontosAtéAgora} pontos.")
                puts ("\n")
                erros += 1

            end

        end


    end

    puts ("Você  ganhou #{pontosAtéAgora} pontos.")

end

def nãoQuerJogar?()

    puts ("\n")
    puts ("=========================")
    puts ("Deseja jogar novamente ?")
    puts ("S = Sim")
    puts ("N = Não")
    puts ("=========================")
    queroJogar = gets.strip
    nãoQueroJogar = queroJogar.upcase == "N" 

end


nomeJogador = daBoasVindas()

loop do 


    joga(nomeJogador)

    if(nãoQuerJogar?)

        break

    end



end

Mateus, testei seu código e o problema é que ao selecionar o chute, você sempre pega o primeiro chute dado por quem está jogando. Isso acontece nesta linha:

letraProcurada = chutes[0]

Dessa forma, não importa quantos chutes você dê, ele sempre vai testar com o primeiro chute. Para pegar sempre o último chute, podemos fazer:

letraProcurada = chutes[chutes.size - 1]

Assim, o jogo passa a funcionar da forma esperada! Entendeu?

Espero ter ajudado, bons estudos!

No trecho:

letraProcurada = chutes[0]

você está pegando a posição 0 do array chutes.

Acho que você queria pegar a posição 0 da variável chute

Tente assim:

letraProcurada = chute[0]

Deu certo agora?

Por que usar assim do que simplesmente

letraProcurada = chute

?