Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida Funções

Caso eu queira pegar o nome digitado na função boas_vindas e mostrar ele também/ou ao invês de dentro da função como que eu faço para mostra-lo? Por exemplo o cont,tentativas eu tive que passar como parametro para mostrar, porem são variaveis globais fora de funções, caso eu queira botar o nome dentro da função numero_chutado o que eu devo fazer?

def boas_vindas
    puts "Digite o seu nome: "
    nome_d = gets
    puts "\nVamos começar o Jogo " + nome_d + "\n"
end

def sorteio_numero_secreto
    puts "Escolhendo um número entre 0 a 200"
    n_sorteado = 175
    puts "Número escolhido..\n\n"
    n_sorteado.to_i
end

def numero_chutado(cont, tentativas)
    puts  "\nDigte um número de 0 a 200"
    n_chute = gets
    puts "Tentativa " + cont.to_s + " de " + tentativas.to_s
    n_chute.to_i
end

def verificar_acerto(numero_secreto, chute)
    acertou = numero_secreto == chute
    if acertou
        puts "Você Acertou"
        return true
        end
        if
        puts "Você Errou"
    end
    false
end

boas_vindas
numero_secreto = sorteio_numero_secreto

tentativas = 3
for cont in 1..tentativas
    chute = numero_chutado(cont, tentativas)
    break if verificar_acerto(numero_secreto, chute)
    end
end
4 respostas

Oi Thiago,

Como nome_d é uma variável local, você não consegue imprimi-lo em outros lugares. Para imprimir você tem duas alternativas:

1) Retornar o valor da variável nome_dno método boas_vindas:

def boas_vindas
    puts "Digite o seu nome: "
    nome_d = gets
    puts "\nVamos começar o Jogo " + nome_d + "\n"
    nome_d
end

e na hora de chamar o método boas_vindas guardar o retorno em uma variável para passar para o método numero_chutado:

nome = boas_vindas

2) Colocar todo o código dentro de uma classe e guardar o nome difitado dentro de um atributo:

class Jogo

    def boas_vindas
        puts "Digite o seu nome: "
        @nome_d = gets
        puts "\nVamos começar o Jogo " + nome_d + "\n"
    end

    def numero_chutado(cont, tentativas)
        puts  "\nDigte um número de 0 a 200"
        n_chute = gets
        puts "Tentativa " + cont.to_s + " de " + tentativas.to_s
        n_chute.to_i
        puts @nome_d
    end

    #  Outros métodos

end

Na hora de usar é só fazer:

jogo = Jogo.new
jogo.boas_vindas
numero_secreto = jogo.sorteio_numero_secreto

tentativas = 3
for cont in 1..tentativas
    chute = jogo.numero_chutado(cont, tentativas)
    break if jogo.verificar_acerto(numero_secreto, chute)
    end
end

Atributos de um objeto são acessados dentro de todos os métodos daquele objeto.

Abraço!

Na 3 parte você avançou muito para Orientado a Objeto, estou fazendo o Nivel 1 de lógica de programação com Ruby ainda. Mais na segunda parte seria o certo? achei mais simples o "difitado", no caso se eu fizer a primeira parte que você falou ele retorna sempre a função toda e nunca o nome.

solução!

Oi Thiago,

A segunda parte é o mais correto e você deve ver isto mais pra frente mesmo.

No primeiro caso você só precisa chamar o método boas_vindas uma única vez que ele já retornará o valor do nome.

Ex:


nome = boas_vindas
numero_secreto = sorteio_numero_secreto

tentativas = 3
for cont in 1..tentativas
    chute = numero_chutado(cont, tentativas, nome)
    break if verificar_acerto(numero_secreto, chute)
    end
end

Abraço!

Oi Jo, eu fiz como você falou, agora estou com problema no IF, ele não faz a comparação correta, sabe o que pode ser?

def boas_vindas
    puts "#### SEJA BEM-VINDO AO JOGO DE ADIVINHAÇÕES ####"
    puts "Para jogar é bem simples, advinhe os números gerados"
    puts "##################################################\n\n"
end

def jogador
    puts "Digite o seu nome: "
    @nome = gets.strip
    @nome
    system "clear"
end

def gerador
    puts "#{@nome.upcase} " + "Aguarde[..]\n\n"
    puts "Escolha um número: \n\n"
        @numero = gets.strip
        system "clear"
    puts "Gerando número de 0 até #{@numero}..."
        @gerador_numero = rand(@numero.to_i)
    puts "Quantas tentativas você gostaria de ter?\n\n"
        @tentativas = gets.strip
    puts "Gerando #{@tentativas}" + " tentativas..\n\n"
    puts "Iniciando o Jogo..."
    puts "Jogador: #{@nome.upcase} | Números Gerados: 0 até #{@numero} | Tentativas: #{@tentativas}\n\n"
end

def adivinhacao
    puts "Adivinhe o número: #{@gerador_numero} "
        @chute = gets.strip
        if @chute == @gerador_numero
            puts "Párabens, você ganhou !!"
            true
        else
            puts "Número errado, tente novamente !!\n\n"
            false
            end
end

boas_vindas
jogador
gerador

        for cont in 1..@tentativas.to_i
        puts "Tentativa: #{cont}"
        adivinhacao
        break if @chute == @gerador_numero
        end