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

O fantasma não anda.

Olá fiz o que o vídeo manda, o jogo funciona, mas o Fantasma não anda. NOTE que no código os fantasmas estão propositalmente com a letra P de Phanton.

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

end

def calcula_nova_posicao (heroi, direcao)
    heroi = heroi.dup
    movimentos = {
        "W" => [-1,0],
        "S" => [+1,0],
        "A" => [0,-1],
        "D" => [0,+1]
    }
        movimento = movimentos[direcao]
        heroi[0] += movimento[0]
        heroi[1] += movimento[1]
        heroi

end
def posicao_valida?(mapa, posicao)
    linhas = mapa.size
    colunas = mapa[0].size
    estoutou_linhas = posicao[0].to_i < 0 || posicao[0].to_i >= linhas
    estouro_colunas = posicao[1].to_i < 0 || posicao[1].to_i >= colunas
    if estoutou_linhas || estouro_colunas
            return false
        end


        if mapa[posicao[0]][posicao[1]] == "X"
            return false
        end
        true
end
def move_fantasma(mapa, linha, coluna)
    mapa[linha][coluna]  = " "
    linha += 0
    coluna += 1
    mapa[linha][coluna] = "P"

end

def move_fantasmas(mapa)
    caractere_do_fantasma = "P"
    mapa.each_with_index do |linha_atual, linha|
        linha_atual.chars.each_with_index do |caractere_atual, coluna|
        eh_fantasma = caractere_atual == caractere_do_fantasma
            if eh_fantasma
                move_fantasma mapa, linha, coluna
            end
        end
    end

end
def joga(nome)
    mapa = le_mapa 2

    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
4 respostas

Adriano,

Você lembrou de colocar o "P" no mapa2.txt?

XXXXXXXXX
X H     X
X X XXX X
X X X   X
X   X X X
  X     X
 XXX XX X
  X     X
X   X X X
XXXP  P X
XXX XXX X
XXX XXX X
XXX     X
solução!

Adriano,

No método joga, faltou você chamar o move_fantasmas:

def joga(nome)
    mapa = le_mapa 2
    while true
    #código omitido...
        move_fantasmas mapa
    end
end

Valeu.

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