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

o "H" anterior nao some de mapa

Bem, ao tentar mudar a posição do herói o "H" anterior não some do mapa, tinha uma questão no forum de uma pessoa com esse mesmo problema, porem a solução que ele conseguiu não funcionou no meu código.

segue pacman.rb

require_relative 'ui'

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

def encontre_o_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 calcular_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
    heroi
end

def joga (nome)
   mapa = le_mapa 1

   while true
      desenha_mapa mapa
      direcao = pede_movimento
      heroi = encontre_o_jogador mapa
      nova_posicao = calcular_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_pacman 
   nome = dar_boas_vindas
   joga nome
end

e segue o ui.rb

def dar_boas_vindas
   puts "Bem vindo!"
   puts "Qual seu nome?"
   nome = gets.strip
   puts "\n\n"
   puts "Ok #{nome}, vamos começar a jogar!"
   nome
end

def desenha_mapa (mapa)
   puts mapa
end

def pede_movimento
   puts "Que direção você quer ir?"
   movimento = gets.strip
end
2 respostas
solução!

Bom dia Herbert,

no método joga você usa um operador lógico:

mapa[heroi[0]][heroi[1]] == " "

quando deveria utilizar o operador de atribuição

mapa[heroi[0]][heroi[1]] = " "

Espero ter ajudado.

Herbert, com esse código o seu jogo funcionou? Pois o meu está descrito desta forma e "H" moveu para o lado, mas não some. Ainda não consegui testar a solução do colega, pois estou fora de casa.