Advertisement
MasterCheats

Mini Game Archero

Feb 3rd, 2025
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 10.25 KB | Gaming | 0 0
  1. -- Configurações iniciais
  2. local tabuleiro = ""
  3. local jogador_posicao_x = 14  -- Linha do jogador (válido de 1 a 14, pois 0 e 15 são as bordas)
  4. local jogador_posicao_y = 7   -- Coluna do jogador (válido de 1 a 14)
  5. local porta_x, porta_y = nil, nil  -- A porta só aparece após derrotar os inimigos
  6. local cenarios = {"🧱","🏕️", "🏖️", "🏜️", "🏝️", "🏟️", "🏛️", "🌃", "🕌", "️🕋"}  -- Símbolos das bordas (indicam os cenários)
  7. local cenario_atual = 1
  8. local inimigos = {}
  9. local dificuldade = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50}  -- Número de inimigos para cada cenário
  10. local monster = 0
  11. local pontuacao = 0
  12. local vida = 3
  13. local level = 1
  14. local mortes = {}  -- Registra as posições dos inimigos derrotados
  15.  
  16. ----------------------------------------------------------
  17. -- Função para gerar inimigos aleatórios
  18. ----------------------------------------------------------
  19. function gerar_inimigos()
  20.     inimigos = {}
  21.     local quantidade = dificuldade[cenario_atual] or 50
  22.     for i = 1, quantidade do
  23.         local inimigo_x, inimigo_y
  24.         repeat
  25.             inimigo_x = math.random(1, 12)  -- posições válidas de 1 a 14 (bordas em 0 e 15)
  26.             inimigo_y = math.random(1, 12)
  27.         until not (inimigo_x == jogador_posicao_x and inimigo_y == jogador_posicao_y)
  28.         table.insert(inimigos, {x = inimigo_x, y = inimigo_y})
  29.     end
  30.     porta_x, porta_y = nil, nil  -- Esconde a porta até eliminar os inimigos
  31. end
  32.  
  33. ----------------------------------------------------------
  34. -- Função para atualizar a porta (aparece quando todos os inimigos forem derrotados)
  35. ----------------------------------------------------------
  36. function atualizar_porta()
  37.     if #inimigos == 0 and not porta_x then
  38.         porta_x, porta_y = 8, 7  -- A porta é exibida na borda esquerda, coluna 7
  39.     end
  40. end
  41.  
  42. ----------------------------------------------------------
  43. -- Função para mover os inimigos
  44. -- Os inimigos se movem somente se estiverem alinhados com o jogador.
  45. ----------------------------------------------------------
  46. function mover_inimigos()
  47.     for _, inimigo in ipairs(inimigos) do
  48.         if inimigo.x == jogador_posicao_x then
  49.             if inimigo.y < jogador_posicao_y then
  50.                 inimigo.y = inimigo.y + 1
  51.             elseif inimigo.y > jogador_posicao_y then
  52.                 inimigo.y = inimigo.y - 1
  53.             end
  54.         elseif inimigo.y == jogador_posicao_y then
  55.             if inimigo.x < jogador_posicao_x then
  56.                 inimigo.x = inimigo.x + 1
  57.             elseif inimigo.x > jogador_posicao_x then
  58.                 inimigo.x = inimigo.x - 1
  59.             end
  60.         end
  61.     end
  62. end
  63.  
  64. ----------------------------------------------------------
  65. -- Função para desenhar o tabuleiro
  66. ----------------------------------------------------------
  67. function desenhar_tabuleiro()
  68.     tabuleiro = ""
  69.     local cor = cenarios[cenario_atual]
  70.     local arma_x, arma_y = nil, nil
  71.  
  72.     -- Define a posição da arma: se existir algum inimigo em linha reta com o jogador,
  73.     -- a arma é exibida na célula imediatamente adjacente ao jogador, na direção do inimigo.
  74.     for _, inimigo in ipairs(inimigos) do
  75.         if inimigo.x == jogador_posicao_x then
  76.             if inimigo.y > jogador_posicao_y then
  77.                 arma_x, arma_y = jogador_posicao_x, jogador_posicao_y + 1
  78.             else
  79.                 arma_x, arma_y = jogador_posicao_x, jogador_posicao_y - 1
  80.             end
  81.             break
  82.         elseif inimigo.y == jogador_posicao_y then
  83.             if inimigo.x > jogador_posicao_x then
  84.                 arma_x, arma_y = jogador_posicao_x + 1, jogador_posicao_y
  85.             else
  86.                 arma_x, arma_y = jogador_posicao_x - 1, jogador_posicao_y
  87.             end
  88.             break
  89.         end
  90.     end
  91.  
  92.     for i = 0, 15 do
  93.         for j = 0, 15 do
  94.             -- Desenha as bordas com o símbolo do cenário atual
  95.             if i == 0 or i == 15 or j == 0 or j == 15 then
  96.                 tabuleiro = tabuleiro .. cor
  97.             -- Verifica a posição do jogador
  98.             elseif i == jogador_posicao_x and j == jogador_posicao_y then
  99.                 tabuleiro = tabuleiro .. "🧕"
  100.             -- Verifica a posição da porta
  101.             elseif porta_x and i == porta_x and j == porta_y then
  102.                 tabuleiro = tabuleiro .. "️🚩"
  103.             -- Verifica a posição da arma
  104.             elseif arma_x and i == arma_x and j == arma_y then
  105.                 tabuleiro = tabuleiro .. "⚡"
  106.             else
  107.                 local desenhado = false
  108.                 -- Verifica se há um inimigo nesta posição
  109.                 for _, inimigo in ipairs(inimigos) do
  110.                     if i == inimigo.x and j == inimigo.y then
  111.                         tabuleiro = tabuleiro .. "👹"
  112.                         desenhado = true
  113.                         break
  114.                     end
  115.                 end
  116.                 if not desenhado then
  117.                     local is_dead = false
  118.                     for _, morte in ipairs(mortes) do
  119.                         if i == morte.x and j == morte.y then
  120.                             tabuleiro = tabuleiro .. "☠️"
  121.                             is_dead = true
  122.                             break
  123.                         end
  124.                     end
  125.                     if not is_dead then
  126.                         tabuleiro = tabuleiro .. "✔"
  127.                     end
  128.                 end
  129.             end
  130.         end
  131.         tabuleiro = tabuleiro .. "\n"
  132.     end
  133.     return "Pontuação: " .. pontuacao .. "                          Nível: " ..level .. "\nInimigos Mortos: " .. monster .. "               Vidas: " .. vida .. "\n" .. tabuleiro
  134. end
  135.  
  136. ----------------------------------------------------------
  137. -- Função para atacar inimigos
  138. -- O ataque atinge o inimigo em linha reta (mesma linha ou coluna) que esteja mais próximo do jogador.
  139. ----------------------------------------------------------
  140. function atacar()
  141.     local inimigo_alvo = nil
  142.     local distancia_min = math.huge  -- Inicializa com um número muito grande
  143.  
  144.     for _, inimigo in ipairs(inimigos) do
  145.         if inimigo.x == jogador_posicao_x or inimigo.y == jogador_posicao_y then
  146.             local distancia = math.abs(inimigo.x - jogador_posicao_x) + math.abs(inimigo.y - jogador_posicao_y)
  147.             if distancia < distancia_min then
  148.                 distancia_min = distancia
  149.                 inimigo_alvo = inimigo
  150.             end
  151.         end
  152.     end
  153.  
  154.     if inimigo_alvo then
  155.         -- Registra a morte e remove o inimigo da lista
  156.         table.insert(mortes, {x = inimigo_alvo.x, y = inimigo_alvo.y})
  157.         for i = #inimigos, 1, -1 do
  158.             if inimigos[i] == inimigo_alvo then
  159.                 table.remove(inimigos, i)
  160.                 break
  161.             end
  162.         end
  163.         pontuacao = pontuacao + 150
  164.         monster = monster + 1
  165.         atualizar_porta()
  166.     end
  167. end
  168.  
  169. function resetar_jogo()
  170.     local escolha = gg.choice({"🔄 Reiniciar Jogo", "❌ Sair"}, nil, "O jogo terminou! Deseja reiniciar?")
  171.    
  172.     if escolha == 1 then
  173.         -- Reseta todas as variáveis do jogo
  174.         jogador_posicao_x, jogador_posicao_y = 14, 7
  175.         porta_x, porta_y = nil, nil
  176.         cenario_atual = 1
  177.         inimigos = {}
  178.         dificuldade = {5, 10, 15, 20, 25, 30, 35, 50}
  179.         monster = 0
  180.         pontuacao = 0
  181.         vida = 3
  182.         mortes = {}
  183.         level = 1
  184.        
  185.         gg.toast("Jogo reiniciado!")
  186.         jogar()  -- Inicia um novo jogo
  187.     else
  188.         gg.toast("Jogo encerrado.")
  189.     end
  190. end
  191.  
  192. ----------------------------------------------------------
  193. -- Função principal do jogo
  194. ----------------------------------------------------------
  195. function jogar()
  196.     gerar_inimigos()
  197.     while true do
  198.         local tabuleiro_atual = desenhar_tabuleiro()
  199.  
  200.         local escolha = gg.choice(
  201.             {
  202.                 "                    ⬆️ Cima\n",
  203.                 "\n⬅️ Esquerda\n",
  204.                 "\n                                        ➡️ Direita\n",
  205.                 "\n                    ⬇️ Baixo\n",
  206.                 "\n                                         🏹 Atacar\n",
  207.                 "❌ Sair"
  208.             },
  209.             nil, tabuleiro_atual)
  210.  
  211.         if escolha == 1 and jogador_posicao_x > 1 then
  212.             jogador_posicao_x = jogador_posicao_x - 1  -- Cima: diminui a linha
  213.         elseif escolha == 2 and jogador_posicao_y > 1 then
  214.             jogador_posicao_y = jogador_posicao_y - 1  -- Esquerda: diminui a coluna
  215.         elseif escolha == 3 and jogador_posicao_y < 14 then
  216.             jogador_posicao_y = jogador_posicao_y + 1  -- Direita: aumenta a coluna
  217.         elseif escolha == 4 and jogador_posicao_x < 14 then
  218.             jogador_posicao_x = jogador_posicao_x + 1  -- Baixo: aumenta a linha
  219.         elseif escolha == 5 then
  220.             atacar()
  221.         elseif escolha == 6 or escolha == nil then
  222.             gg.toast("Jogo encerrado.")
  223.             break
  224.         end
  225.  
  226.         mover_inimigos()
  227.  
  228.         -- Verifica se algum inimigo atingiu o jogador
  229.         for _, inimigo in ipairs(inimigos) do
  230.             if inimigo.x == jogador_posicao_x and inimigo.y == jogador_posicao_y then
  231.                 vida = vida - 1  -- Reduz a vida corretamente
  232.                 gg.toast("Você foi atingido! Vidas restantes: " .. vida)
  233.  
  234.                 if vida == 0 then
  235.                     gg.toast("Você foi derrotado pelos inimigos!")
  236.                     resetar_jogo()  -- reinicia o jogo
  237.                     return
  238.                 end
  239.             end
  240.         end
  241.  
  242.         -- Verifica se o jogador entrou na porta para avançar de cenário
  243.         if porta_x and jogador_posicao_x == porta_x and jogador_posicao_y == porta_y then
  244.             if cenario_atual < #cenarios then
  245.                 cenario_atual = cenario_atual + 1
  246.                 level = cenario_atual
  247.                 jogador_posicao_x, jogador_posicao_y = 14, 7  -- Reset da posição do jogador
  248.                 mortes = {}
  249.                 gerar_inimigos()
  250.                 gg.toast("Novo cenário!")
  251.             else
  252.                 gg.toast("Você venceu o jogo!")
  253.                 resetar_jogo()
  254.                 return
  255.             end
  256.         end
  257.     end
  258. end
  259.  
  260. -- Iniciar o jogo
  261. jogar()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement