Temos na explicação tratando que nosso herói será um array de duas posições, mas como ? Nosso herói, é 1x1, certo ? por que referir como duas ?.
No codigo abaixo está destacado em negrito a parte do herói e no fim a saída no console:
require_relative 'ui'
def soma_vetor(vetor1, vetor2)
[vetor1[0]+vetor2[0], vetor1[1]+vetor2[1]]
end
def posicoes_validas_apartir_de(mapa, novo_mapa, posicao)
posicoes = []
movimentos = [[+ 1, 0],[0, + 1],[- 1, 0],[0, - 1]]
movimentos.each do |movimento|
puts "Movimentos"
puts "#{movimentos}"
puts "Movimento"
puts "#{movimento}"
puts "Posicao"
puts "#{posicao}"
# puts
# puts "Posicoes validas = #{posicoes}"
nova_posicao = soma_vetor(movimento, posicao)
puts "SOMA VETOR #{nova_posicao}"
if posicao_valida?(mapa, nova_posicao) && posicao_valida?(novo_mapa, nova_posicao)
posicoes << nova_posicao
puts "Posições validadas ate agora #{posicoes}"
else
puts "Posição invalidada"
end
end
posicoes
end
def move_fantasma(mapa,novo_mapa, linha, coluna)
posicoes = posicoes_validas_apartir_de(mapa, novo_mapa,[linha, coluna])
puts posicoes.size
if posicoes.empty?
return
end
aleatoria = rand(posicoes.size)
posicao = posicoes[aleatoria]
mapa[linha][coluna] = " "
novo_mapa[posicao[0]][posicao[1]] = "F"
end
def copia_mapa(mapa)
novo_mapa = mapa.join("\n").tr("F"," ").split("\n")
end
def move_fantasmas(mapa)
caracter_do_fantasma = "F"
novo_mapa = copia_mapa(mapa)
mapa.each_with_index do |linha_atual, linha|
linha_atual.chars.each_with_index do |caracter_atual, coluna|
eh_fantasma = caracter_atual == caracter_do_fantasma
if eh_fantasma
move_fantasma(mapa, novo_mapa, linha, coluna)
end
end
end
return novo_mapa
end
def posicao_valida?(mapa, posicao)
linhas = mapa.size
colunas = mapa[0].size
estourou_linha = posicao[0] < 0 || posicao[0] >= linhas
estourou_coluna = posicao[1] < 0 || posicao[1] >= colunas
if estourou_linha || estourou_coluna
return false
end
valor_local = mapa[posicao[0]][posicao[1]]
if valor_local == "X" || valor_local == "F"
return false
end
true
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]
puts "HEROi #{heroi}"
heroi ***
###
Aqui acima temos 0 como coluna, e um como linha ?
###
end
def le_mapa(numero)
arquivo = "mapa#{numero}.txt"
texto = File.read(arquivo)
mapa = texto.split("\n")
end
def encontra_jogador(mapa)
caracter_do_heroi = "H"
mapa.each_with_index do |linha_atual, linha|
coluna_do_heroi = linha_atual.index caracter_do_heroi
if coluna_do_heroi
return [linha, coluna_do_heroi]
end
end
nil
end
def jogador_perdeu(mapa)
perdeu = !encontra_jogador(mapa)
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"
mapa = move_fantasmas(mapa)
if jogador_perdeu(mapa)
game_over
break
end
end
end
def inicia_pacman
nome = da_boas_vindas
joga(nome)
end
Comecaremos o jogo para voce, e
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
XXXF F X
XXX XXX X
XXX XXX X
XXX X
Para onde deseja ir?
D
HEROI [1, 3]