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

Vídeo 9 - Detecção de colisao com muro e fim do mapa

Fiz o código exatamente como no vídeo

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_heroi = "H"
    mapa.each_with_index do |linha_atual, linha|
        coluna_do_heroi = linha_atual.index caractere_heroi
        if coluna_do_heroi
            return [linha, coluna_do_heroi]
        end
    end    
    #nao achei
end

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

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 nova_posicao[0] < 0
            next
        end
        if nova_posicao[1] < 0
            next
        end
        if nova_posicao[0] >= mapa.size
            next
        end
        if nova_posicao[1] >= mapa[0].size
            next
        end

        if mapa[nova_posicao[0]] [nova_posicao[1]] == "X"
            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

Porém agora quando eu passo qualquer comando para o 'H' se mover, não acontece nada... E se eu utilizar o "D" para mover, ele apenas duplica o H e nada mais acontece...

Começaremos o jogo para você, Niko
XXXXX
X H X
X X X
X X X
X   X
  X
 XXX
  X
X F X
XXXXX
Para onde deseja ir?
A
XXXXX
X H X
X X X
X X X
X   X
  X
 XXX
  X
X F X
XXXXX
Para onde deseja ir?
W
XXXXX
X H X
X X X
X X X
X   X
  X
 XXX
  X
X F X
XXXXX
Para onde deseja ir?
D
XXXXX
XHH X
X X X
X X X
X   X
  X
 XXX
  X
X F X
XXXXX
Para onde deseja ir?
S
XXXXX
XHH X
X X X
X X X
X   X
  X
 XXX
  X
X F X
XXXXX
Para onde deseja ir?

Alguém sabe o por que?

4 respostas

Oi Nikolai,

Coloca o seu código do seu método pede_movimento pra eu dar uma olhada?

Abraço!

def pede_movimento
    puts "Para onde deseja ir?"
    movimento = gets.strip
end
solução!

Oi Nikolai,

Acabei de reparar que seu método calcula_posicao está faltando duas linhas:

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

Na linha 1 faltava duplicar o heroi para não perdemos a posição anterior que deveria ser limpada após o movimento. Na linha 2 faltou retornar a posição nova calculada.

Abraço!

Realmente na linha 2 faltou retornar o heroi. porém na linha um não foi mostrado isso no vídeo, por isso não entendi.. rs

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