Guest User

fogefoge.rb

a guest
Mar 6th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. require_relative 'ui'
  2.  
  3. def posicao_valida? (mapa, nova_posicao)
  4. linhas = mapa.size
  5. colunas = mapa[0].size
  6. return false if estoura_linhas = (nova_posicao[0]< 0 )||(nova_posicao[0]>= linhas)
  7. return false if estoura_colunas = (nova_posicao[1]<0 )|| (nova_posicao[1]>= colunas)
  8. colide_parede = mapa[nova_posicao[0]][nova_posicao[1]]=="X"
  9. colide_fantasma = mapa[nova_posicao[0]][nova_posicao[1]]=="F"
  10. if colide_parede||colide_fantasma
  11. return false
  12. end
  13.  
  14. true
  15. end
  16.  
  17.  
  18.  
  19. def calcula_nova_posicao heroi, direcao
  20. heroi=heroi.dup
  21. #dicionario via array associativo, substituindo case when para as posições
  22. movimentos = {"W"=>[-1,0],
  23. "S"=>[+1,0],
  24. "A"=>[0,-1],
  25. "D"=>[0,+1]
  26. }
  27. movimento = movimentos[direcao]
  28. if movimento!=nil&&movimento!=[]
  29. heroi[0]+=movimento[0]
  30. heroi[1]+=movimento[1]
  31. end
  32. heroi
  33. end
  34.  
  35.  
  36. def soma_vetor (movimento, posicao)
  37. [posicao[0]+movimento[0],posicao[1]+movimento[1]]
  38. end
  39.  
  40. def posicoes_validas_a_partir_de (mapa,novo_mapa, posicao)
  41. posicoes=[]
  42. if !posicao.empty?
  43. #versão 2
  44. movimentos = [[+1,0],[0,+1],[-1,0],[0,-1]]
  45. movimentos.each do |movimento|
  46. nova_posicao = soma_vetor(movimento,posicao)
  47. if posicao_valida?(mapa, nova_posicao) && posicao_valida?(novo_mapa, nova_posicao)
  48. posicoes<<nova_posicao
  49. end
  50. end
  51.  
  52. #versão 1
  53. #baixo = [ posicao[0] + 1, posicao[1]]
  54. #cima = [ posicao[0] - 1, posicao[1]]
  55. #direita = [posicao[0], posicao[1] + 1]
  56. #esquerda = [posicao[0], posicao[1] -1 ]
  57.  
  58. #if posicao_valida?(mapa, baixo) && posicao_valida?(novo_mapa, baixo)
  59. # posicoes<<baixo
  60. #end
  61.  
  62. #if posicao_valida?(mapa, cima) && posicao_valida?(novo_mapa, cima)
  63. # posicoes<<cima
  64. #end
  65.  
  66. #if posicao_valida?(mapa, direita) && posicao_valida?(novo_mapa, direita)
  67. # posicoes<<direita
  68. #end
  69. #if posicao_valida?(mapa, esquerda) && posicao_valida?(novo_mapa, esquerda)
  70. # posicoes<<esquerda
  71. #end
  72. end
  73. posicoes
  74. end
  75.  
  76. def copia_mapa (mapa)
  77. #novo_mapa = []
  78. #versão 1
  79. # mapa.each do |linha|
  80. # nova_linha = ""
  81. # linha.each do |caractere|
  82. # if caractere =="F"
  83. # nova_linha << ""
  84. # else
  85. # nova_linha << "F"
  86. # end
  87. # end
  88. # novo_mapa<<nova_linha
  89. #end
  90. #return novo_mapa
  91.  
  92. #versão 2
  93. #novo_mapa = []
  94. # mapa.each do |linha|
  95. # nova_linha = linha.dup.tr "F", " "
  96. # novo_mapa<<nova_linha
  97. #end
  98. #return novo_mapa
  99.  
  100. #versão 3
  101. novo_mapa = mapa.join("\n").tr("F"," ").split "\n"
  102.  
  103.  
  104.  
  105.  
  106. end
  107.  
  108.  
  109. def move_fantasma mapa,novo_mapa, linha, coluna
  110. posicoes = posicoes_validas_a_partir_de mapa,novo_mapa, [linha, coluna]
  111. if posicoes.empty?
  112. return
  113. end
  114.  
  115. posicao = posicoes[rand(posicoes.size)]
  116. mapa[linha][coluna]=" "
  117. novo_mapa[posicao[0]][posicao[1]]="F"
  118. end
  119.  
  120. def move_fantasmas mapa
  121. caracter_do_fantasma = "F"
  122. novo_mapa = copia_mapa mapa
  123. mapa.each_with_index do |linha_atual,linha|
  124. linha_atual.chars.each_with_index do |caractere_atual,coluna|
  125. eh_fantasma = caractere_atual==caracter_do_fantasma
  126. if eh_fantasma
  127. move_fantasma mapa, novo_mapa, linha, coluna
  128.  
  129. end
  130. end
  131. end
  132. novo_mapa
  133. end
  134.  
  135. def encontra_jogador mapa
  136.  
  137. caracter_do_heroi = "H"
  138. mapa.each_with_index do |linha_atual,linha|
  139. coluna_do_heroi = linha_atual.index caracter_do_heroi
  140. if coluna_do_heroi
  141. return [linha,coluna_do_heroi]
  142. end
  143.  
  144. end
  145. nil
  146. end
  147.  
  148.  
  149. def le_mapa numero
  150. arquivo = "mapa#{numero}.txt"
  151. texto = File.read arquivo
  152. mapa = texto.split "\n"
  153. end
  154.  
  155. def jogador_perdeu? mapa
  156.  
  157. perdeu = !encontra_jogador(mapa)
  158.  
  159. end
  160.  
  161.  
  162. def joga nome
  163. mapa = le_mapa 2
  164. while true
  165. desenha_mapa mapa
  166. direcao = pede_movimento
  167. heroi = encontra_jogador mapa
  168. nova_posicao = calcula_nova_posicao heroi, direcao
  169. if !posicao_valida?(mapa, nova_posicao)
  170. next
  171. end
  172. mapa[heroi[0]][heroi[1]] = " "
  173. mapa[nova_posicao[0]][nova_posicao[1]] = "H"
  174. mapa = move_fantasmas mapa
  175. if jogador_perdeu? mapa
  176. game_over
  177. break;
  178. end
  179. end
  180. end
  181.  
  182. def inicia_fogefoge
  183. nome = da_boas_vindas
  184. joga nome
  185. end
Advertisement
Add Comment
Please, Sign In to add comment