Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

O heroi (H) parou de andar - Ruby III, Aula 1, Vídeo 12

Boa tarde. Tudo bem?

Finalizei a aula 1 do curso mas meu herói (H) parou de "andar" (ele estava andando normalmente antes)... Ao compilar o programa não apresenta erro... Já tentei usar os comandos com as letras W, A, S e D (maiúsculas e minúsculas). Não consegui encontrar a falha no meu código. Por favor, alguém poderia me auxiliar? Obrigado, W.

Seguem os meus códigos:

fogefoge.rb

require_relative "ui"

def le_mapa(numero)
    arquivo = "mapa#{numero}.txt"
    texto = File.read arquivo
    mapa = texto.split "\n"
end

def encontra_jogador(mapa)
    caractere_do_heroi = "H"
    mapa.each_with_index do |linha_atual, linha|
        coluna_do_heroi = linha_atual.index caractere_do_heroi
        if coluna_do_heroi
            return [linha, coluna_do_heroi]
        end
    end
    #não achei!
end

def calcula_nova_posicao(heroi, direcao)
    heroi = heroi.dup 
    case direcao
            when "W"
                heroi[0] -= 1
            when "S"
                heroi[0] += 1
            when "A"
                heroi[1] -= 1
            when "D"
                heroi[1] += 1
    end            
    heroi
end

def posicao_valida?(mapa, posicao)
    linhas = mapa.size
    colunas = mapa[0].size
    estourou_linhas = posicao[0] < 0 || posicao[0] >= linhas 
    estourou_colunas = posicao[1] < 0 || posicao[1] <= colunas

    if estourou_linhas || estourou_colunas
        return false
    end

    if mapa[posicao[0]][posicao[1]] == "x"
        return false
    end
    true
end

def joga(nome)
    mapa = le_mapa(1)
    while true
        desenha mapa
        direcao = pede_movimento
        heroi = encontra_jogador mapa
        nova_posicao = calcula_nova_posicao heroi, direcao
        if !posicao_valida? mapa, nova_posicao
            next        
        end
        mapa[heroi[0]][heroi[1]] = " "
        mapa[nova_posicao[0]][nova_posicao[1]] = "H"
    end
end

def inicia_fogefoge
    nome = da_boas_vindas
    joga nome
end

ui.rb

def da_boas_vindas
    puts "Bem-vindo ao Foge-foge!"
    puts "Qual é o seu nome?"
    nome = gets.strip
    puts "\n\n\n\n\n\n"
    puts "Começaremos o jogo para você, #{nome}"
    nome    
end

def desenha(mapa)
    puts mapa
end

def pede_movimento
    puts "Para onde deseja ir?"
    movimento = gets.strip
end

main.rb

require_relative 'fogefoge'

inicia_fogefoge

mapa1.txt

xxxxx
x H x
x x x
x x x
x   x
  x  
 xxx 
  x  
x F x
xxxxx
1 resposta
solução!

Consegui encontrar a "falha". Estava no arquivo fogefoge.rb. Bastou inverter o sinal <= por >= e o herói voltou a "caminhar"... :)

De qualquer forma, agradeço pela atenção!

Saudações, W.

def posicao_valida?(mapa, posicao)
[...]
    estourou_colunas = posicao[1] < 0 || posicao[1] >= colunas
[...] 
end

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software