Advertisement
MasterCheats

Mini game Archero 4

Feb 3rd, 2025 (edited)
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 20.79 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
  7. local cenario_atual = 1
  8. --local inimigos = {}
  9. local inimigos = {"😈", "🤡", "👹", "👻", "👺"}
  10. local obstaculos = {}  -- Obstáculos serão definidos com um padrão fixo
  11. local dificuldade = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100}  -- Número de inimigos para cada cenário
  12. local monster = 0
  13. local pontuacao = 0
  14. local vida = 3  -- Internamente, usamos um número; na exibição, mostraremos corações.
  15. local level = 1
  16. local mortes = {}  -- Registra as posições dos inimigos derrotados
  17.  
  18. ----------------------------------------------------------
  19. -- Padrão fixo para obstáculos (células interiores: linhas 1 a 14, colunas 1 a 14)
  20. -- Cada string tem 14 caracteres: "O" representa obstáculo, "." representa célula aberta.
  21. ----------------------------------------------------------
  22. local fixedPattern = {
  23.   "..............",   -- Linha 1
  24.   "..O..O..O..O..",   -- Linha 2
  25.   "..............",   -- Linha 3
  26.   "..O..O..O..O..",   -- Linha 4
  27.   "..............",   -- Linha 5
  28.   "..O..O..O..O..",   -- Linha 6
  29.   "..............",   -- Linha 7
  30.   "..............",   -- Linha 8
  31.   "..O..O..O..O..",   -- Linha 9
  32.   "..............",   -- Linha 10
  33.   "..O..O..O..O..",   -- Linha 11
  34.   "..............",   -- Linha 12
  35.   "..O..O..O..O..",   -- Linha 13
  36.   ".............."    -- Linha 14
  37. }
  38.  
  39. ----------------------------------------------------------
  40. -- Preenche a tabela "obstaculos" usando o padrão fixo
  41. ----------------------------------------------------------
  42. function gerar_obstaculos()
  43.     obstaculos = {}
  44.     for i = 1, 14 do
  45.         local row = fixedPattern[i]
  46.         for j = 1, 14 do
  47.             local ch = row:sub(j, j)
  48.             if ch == "O" then
  49.                 table.insert(obstaculos, {x = i, y = j})
  50.             end
  51.         end
  52.     end
  53. end
  54. ----------------------------------------------------------
  55. -- Função para verificar se há um obstáculo em uma dada posição
  56. ----------------------------------------------------------
  57. function is_obstaculo_at(x, y)
  58.     for _, o in ipairs(obstaculos) do
  59.         if o.x == x and o.y == y then
  60.             return true
  61.         end
  62.     end
  63.     return false
  64. end
  65. ----------------------------------------------------------
  66. -- Função para verificar se há um inimigo em uma dada posição (opcionalmente excluindo um índice)
  67. ----------------------------------------------------------
  68. function is_inimigo_at(x, y, excluir_index)
  69.     for idx, inimigo in ipairs(inimigos) do
  70.         if idx ~= excluir_index and inimigo.x == x and inimigo.y == y then
  71.             return true
  72.         end
  73.     end
  74.     return false
  75. end
  76. ----------------------------------------------------------
  77. -- Função para verificar se existe algum obstáculo entre duas posições (linha ou coluna)
  78. ----------------------------------------------------------
  79. function obstaculo_no_caminho(x1, y1, x2, y2)
  80.     for _, o in ipairs(obstaculos) do
  81.         if x1 == x2 and o.x == x1 and o.y > math.min(y1, y2) and o.y < math.max(y1, y2) then
  82.             return true
  83.         elseif y1 == y2 and o.y == y1 and o.x > math.min(x1, x2) and o.x < math.max(x1, x2) then
  84.             return true
  85.         end
  86.     end
  87.     return false
  88. end
  89. ----------------------------------------------------------
  90. -- Função para gerar inimigos aleatórios
  91. ----------------------------------------------------------
  92. function gerar_inimigos()
  93.     inimigos = {}
  94.     local quantidade = dificuldade[cenario_atual] or 50
  95.     local tipos_inimigos = {"😈", "🤡", "👹", "👻", "👺"}  -- Lista de tipos de inimigos
  96.     for i = 1, quantidade do
  97.         local inimigo_x, inimigo_y
  98.         repeat
  99.             inimigo_x = math.random(1, 12)  -- posições válidas de 1 a 12
  100.             inimigo_y = math.random(1, 12)
  101.         until not (inimigo_x == jogador_posicao_x and inimigo_y == jogador_posicao_y)
  102.               and not is_obstaculo_at(inimigo_x, inimigo_y)
  103.               and not is_inimigo_at(inimigo_x, inimigo_y)
  104.        
  105.         -- Escolhendo aleatoriamente um tipo de inimigo
  106.         local tipo_inimigo = tipos_inimigos[math.random(#tipos_inimigos)]
  107.        
  108.         table.insert(inimigos, {x = inimigo_x, y = inimigo_y, tipo = tipo_inimigo})
  109.     end
  110.     porta_x, porta_y = nil, nil  -- Esconde a porta até eliminar os inimigos
  111. end
  112. ----------------------------------------------------------
  113. -- Função para atualizar a porta (aparece quando todos os inimigos forem derrotados)
  114. ----------------------------------------------------------
  115. function atualizar_porta()
  116.     if #inimigos == 0 and not porta_x then
  117.         porta_x, porta_y = 8, 7  -- A porta é exibida na borda esquerda, coluna 7
  118.     end
  119. end
  120. ----------------------------------------------------------
  121. -- Função para mover os inimigos
  122. -- Os inimigos se movem somente se estiverem alinhados com o jogador, sem obstáculos no caminho,
  123. -- e sem colisão com outro inimigo (exceto se for a primeira a ocupar a célula do jogador).
  124. ----------------------------------------------------------
  125. function mover_inimigos()
  126.     for idx, inimigo in ipairs(inimigos) do
  127.         if inimigo.x == jogador_posicao_x and not obstaculo_no_caminho(inimigo.x, inimigo.y, jogador_posicao_x, jogador_posicao_y) then
  128.             local nova_y = inimigo.y
  129.             if inimigo.y < jogador_posicao_y then
  130.                 nova_y = inimigo.y + 1
  131.             elseif inimigo.y > jogador_posicao_y then
  132.                 nova_y = inimigo.y - 1
  133.             end
  134.             if nova_y == jogador_posicao_y then
  135.                 if not is_inimigo_at(inimigo.x, nova_y, idx) then
  136.                     inimigo.y = nova_y
  137.                 end
  138.             else
  139.                 if not is_obstaculo_at(inimigo.x, nova_y) and not is_inimigo_at(inimigo.x, nova_y, idx) then
  140.                     inimigo.y = nova_y
  141.                 end
  142.             end
  143.         elseif inimigo.y == jogador_posicao_y and not obstaculo_no_caminho(inimigo.x, inimigo.y, jogador_posicao_x, jogador_posicao_y) then
  144.             local nova_x = inimigo.x
  145.             if inimigo.x < jogador_posicao_x then
  146.                 nova_x = inimigo.x + 1
  147.             elseif inimigo.x > jogador_posicao_x then
  148.                 nova_x = inimigo.x - 1
  149.             end
  150.             if nova_x == jogador_posicao_x then
  151.                 if not is_inimigo_at(nova_x, inimigo.y, idx) then
  152.                     inimigo.x = nova_x
  153.                 end
  154.             else
  155.                 if not is_obstaculo_at(nova_x, inimigo.y) and not is_inimigo_at(nova_x, inimigo.y, idx) then
  156.                     inimigo.x = nova_x
  157.                 end
  158.             end
  159.         end
  160.     end
  161. end
  162. ----------------------------------------------------------
  163. -- Função para desenhar o tabuleiro
  164. ----------------------------------------------------------
  165. function desenhar_tabuleiro()
  166.     tabuleiro = ""
  167.     local cor = cenarios[cenario_atual]
  168.     local shooting_trail = {}
  169.    
  170.     -- Define a trilha de disparo (5) se houver um inimigo alinhado com o jogador, a distância for <= 5,
  171.     -- e sem obstáculos no caminho
  172.     for _, inimigo in ipairs(inimigos) do
  173.         if inimigo.x == jogador_posicao_x then
  174.             local distancia = math.abs(inimigo.y - jogador_posicao_y)
  175.             if distancia <= 5 and not obstaculo_no_caminho(jogador_posicao_x, jogador_posicao_y, inimigo.x, inimigo.y) then
  176.                 local dir = (inimigo.y > jogador_posicao_y) and 1 or -1
  177.                 for i = 1, 5 do
  178.                     table.insert(shooting_trail, {x = jogador_posicao_x, y = jogador_posicao_y + i * dir})
  179.                 end
  180.                 break  -- Usa o primeiro inimigo alinhado encontrado
  181.             end
  182.         elseif inimigo.y == jogador_posicao_y then
  183.             local distancia = math.abs(inimigo.x - jogador_posicao_x)
  184.             if distancia <= 5 and not obstaculo_no_caminho(jogador_posicao_x, jogador_posicao_y, inimigo.x, inimigo.y) then
  185.                 local dir = (inimigo.x > jogador_posicao_x) and 1 or -1
  186.                 for i = 1, 5 do
  187.                     table.insert(shooting_trail, {x = jogador_posicao_x + i * dir, y = jogador_posicao_y})
  188.                 end
  189.                 break
  190.             end
  191.         end
  192.     end
  193.     for i = 0, 15 do
  194.         for j = 0, 15 do
  195.             -- 1. Bordas
  196.             if i == 0 or i == 15 or j == 0 or j == 15 then
  197.                 tabuleiro = tabuleiro .. cor
  198.             -- 2. Posição do jogador
  199.             elseif i == jogador_posicao_x and j == jogador_posicao_y then
  200.                 tabuleiro = tabuleiro .. "🧕"
  201.             -- 3. Porta
  202.             elseif porta_x and i == porta_x and j == porta_y then
  203.                 tabuleiro = tabuleiro .. "️🚩"
  204.             else
  205.                 local especial = false
  206.                 -- 4. Se houver um inimigo na célula, exibe o inimigo
  207.                 for _, inimigo in ipairs(inimigos) do
  208.     if i == inimigo.x and j == inimigo.y then
  209.         tabuleiro = tabuleiro .. inimigo.tipo  -- Usa o tipo do inimigo
  210.         especial = true
  211.         break
  212.     end
  213. end
  214.                 if not especial then
  215.                     -- 5. Se houver um inimigo morto na célula, exibe o símbolo de morte (caveira)
  216.                     local morto = false
  217.                     for _, morte in ipairs(mortes) do
  218.                         if i == morte.x and j == morte.y then
  219.                             tabuleiro = tabuleiro .. "☠️"
  220.                             morto = true
  221.                             break
  222.                         end
  223.                     end
  224.                     if not morto then
  225.                         -- 6. Se a célula for um obstáculo fixo (do padrão), exibe 🗿
  226.                         if i >= 1 and i <= 14 and j >= 1 and j <= 14 then
  227.                             local row = fixedPattern[i]
  228.                             local ch = row:sub(j, j)
  229.                             if ch == "O" then
  230.                                 tabuleiro = tabuleiro .. "🗿"
  231.                             else
  232.                                 -- 7. Se a célula fizer parte da trilha de disparo, exibe ⚡
  233.                                 if (function()
  234.                                         for _, pos in ipairs(shooting_trail) do
  235.                                             if pos.x == i and pos.y == j then
  236.                                                 return true
  237.                                             end
  238.                                         end
  239.                                         return false
  240.                                      end)() then
  241.                                     tabuleiro = tabuleiro .. "⚡"
  242.                                 else
  243.                                     -- 8. Caso contrário, exibe o marcador padrão
  244.                                     tabuleiro = tabuleiro .. "▪️"
  245.                                 end
  246.                             end
  247.                         else
  248.                             tabuleiro = tabuleiro .. "✔"
  249.                         end
  250.                     end
  251.                 end
  252.             end
  253.         end
  254.         tabuleiro = tabuleiro .. "\n"
  255.     end
  256.     return "🏆Pontuação: " .. pontuacao .. "                    📶Level: " .. level ..
  257.            "\n☠️Derrotados: " .. monster .. "                  🧕Vidas: " .. string.rep("❤️", vida) .. "\n" .. tabuleiro
  258. end  
  259. ----------------------------------------------------------
  260. -- Função para atacar inimigos
  261. -- O ataque atinge o inimigo em linha reta (mesma linha ou coluna) que esteja mais próximo do jogador,
  262. -- desde que esteja a no máximo 5 espaços e sem obstáculos no caminho.
  263. ----------------------------------------------------------
  264. function atacar()
  265.     local inimigo_alvo = nil
  266.     local distancia_min = math.huge  -- Inicializa com um número muito grande
  267.    
  268.     for _, inimigo in ipairs(inimigos) do
  269.         if inimigo.x == jogador_posicao_x or inimigo.y == jogador_posicao_y then
  270.             local distancia = math.abs(inimigo.x - jogador_posicao_x) + math.abs(inimigo.y - jogador_posicao_y)
  271.             if distancia <= 5 then  -- Verifica se o inimigo está no alcance (5 células)
  272.                 local bloqueado = false
  273.                 if jogador_posicao_x == inimigo.x then
  274.                     for _, obstaculo in ipairs(obstaculos) do
  275.                         if obstaculo.x == jogador_posicao_x and obstaculo.y > math.min(jogador_posicao_y, inimigo.y) and obstaculo.y < math.max(jogador_posicao_y, inimigo.y) then
  276.                             bloqueado = true
  277.                             break
  278.                         end
  279.                     end
  280.                 elseif jogador_posicao_y == inimigo.y then
  281.                     for _, obstaculo in ipairs(obstaculos) do
  282.                         if obstaculo.y == jogador_posicao_y and obstaculo.x > math.min(jogador_posicao_x, inimigo.x) and obstaculo.x < math.max(jogador_posicao_x, inimigo.x) then
  283.                             bloqueado = true
  284.                             break
  285.                         end
  286.                     end
  287.                 end
  288.                 if not bloqueado and distancia < distancia_min then
  289.                     distancia_min = distancia
  290.                     inimigo_alvo = inimigo
  291.                 end
  292.             end
  293.         end
  294.     end
  295.     if inimigo_alvo then
  296.         table.insert(mortes, {x = inimigo_alvo.x, y = inimigo_alvo.y})
  297.         for i = #inimigos, 1, -1 do
  298.             if inimigos[i] == inimigo_alvo then
  299.                 table.remove(inimigos, i)
  300.                 break
  301.             end
  302.         end
  303.         pontuacao = pontuacao + 150
  304.         monster = monster + 1
  305.         atualizar_porta()
  306.     end
  307. end
  308. ----------------------------------------------------------
  309. -- Função para reiniciar o jogo
  310. ----------------------------------------------------------
  311. function resetar_jogo()
  312.     local escolha = gg.choice({"🔄 Reiniciar Jogo", "❌ Sair"}, nil, "O jogo terminou! Deseja reiniciar?")
  313.     if escolha == 1 then
  314.         -- Reseta todas as variáveis do jogo
  315.         jogador_posicao_x, jogador_posicao_y = 14, 7
  316.         porta_x, porta_y = nil, nil
  317.         cenario_atual = 1
  318.         inimigos = {}
  319.         obstaculos = {}  -- Será refeito via fixedPattern
  320.         dificuldade = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100}  -- Número de inimigos para cada cenário
  321.         monster = 0
  322.         pontuacao = 0
  323.         vida = 3
  324.         mortes = {}
  325.         level = 15
  326.         gg.toast("Jogo reiniciado!")
  327.         jogar()  -- Inicia um novo jogo
  328.     else
  329.         gg.toast("Jogo encerrado.")
  330.     end
  331. end
  332. ----------------------------------------------------------
  333. -- Função principal do jogo
  334. ----------------------------------------------------------
  335. function jogar()
  336.     gerar_obstaculos()  -- Preenche os obstáculos com o padrão fixo
  337.     gerar_inimigos()
  338.     while true do
  339.         local tabuleiro_atual = desenhar_tabuleiro()
  340.        
  341.         local escolha = gg.choice({
  342.                 "                         ⬆️ Cima\n",
  343.                 "\n⬅️ Esquerda\n",
  344.                 "\n                                                  ➡️ Direita\n",
  345.                 "\n                         ⬇️ Baixo\n",
  346.                 "\n                                                ⚡ Atacar\n",
  347.                 "📖Sobre o Jogo e Dicas💡",
  348.                 "🌐Contete Me📧",
  349.                 "❌ Sair👋"
  350.             }, nil, tabuleiro_atual.. "🕹️Mini Game Archero - Made for Master YT🎬")
  351.        
  352.         -- Movimentação do jogador (não pode atravessar obstáculos fixos)
  353.         if escolha == 1 and jogador_posicao_x > 1 and not is_obstaculo_at(jogador_posicao_x - 1, jogador_posicao_y) then
  354.             jogador_posicao_x = jogador_posicao_x - 1  -- Cima
  355.         elseif escolha == 2 and jogador_posicao_y > 1 and not is_obstaculo_at(jogador_posicao_x, jogador_posicao_y - 1) then
  356.             jogador_posicao_y = jogador_posicao_y - 1  -- Esquerda
  357.         elseif escolha == 3 and jogador_posicao_y < 14 and not is_obstaculo_at(jogador_posicao_x, jogador_posicao_y + 1) then
  358.             jogador_posicao_y = jogador_posicao_y + 1  -- Direita
  359.         elseif escolha == 4 and jogador_posicao_x < 14 and not is_obstaculo_at(jogador_posicao_x + 1, jogador_posicao_y) then
  360.             jogador_posicao_x = jogador_posicao_x + 1  -- Baixo
  361.         elseif escolha == 5 then
  362.             atacar()
  363.         elseif escolha == 6 then
  364.             exibir_dicas()
  365.         elseif escolha == 7 then
  366.             cnt()
  367.         elseif escolha == 8 or escolha == nil then
  368.             sairJogo()
  369.         end
  370.         mover_inimigos()
  371.        
  372.         -- Verifica se algum inimigo atingiu o jogador (se estiver na mesma célula)
  373.         for _, inimigo in ipairs(inimigos) do
  374.             if inimigo.x == jogador_posicao_x and inimigo.y == jogador_posicao_y then
  375.                 vida = vida - 1
  376.                 gg.toast("Você foi atingido! Vidas restantes: " .. string.rep("❤️", vida))
  377.                 if vida == 0 then
  378.                     gg.toast("Você foi derrotado pelos inimigos!")
  379.                     resetar_jogo()
  380.                     return
  381.                 end
  382.             end
  383.         end
  384.         -- Verifica se o jogador entrou na porta para avançar de cenário
  385.         if porta_x and jogador_posicao_x == porta_x and jogador_posicao_y == porta_y then
  386.             if cenario_atual < #cenarios then
  387.                 cenario_atual = cenario_atual + 1
  388.                 level = cenario_atual
  389.                 jogador_posicao_x, jogador_posicao_y = 14, 7
  390.                 mortes = {}
  391.                 gerar_obstaculos()
  392.                 gerar_inimigos()
  393.                 gg.toast("Novo cenário!")
  394.             else
  395.                 gg.alert([[
  396. 🌟 **Parabéns, você acaba de conquistar a vitória!** 🌟
  397.  
  398. Você não apenas venceu... você DOMINOU o jogo! 😎🔥  
  399. A sua habilidade e estratégia foram simplesmente incríveis!  
  400. Agora, com seu nome gravado nas estrelas do universo dos games, é hora de respirar fundo e se preparar para o que vem a seguir… ou, quem sabe, aproveitar o momento e comemorar sua conquista épica! 🏆🎉
  401.    
  402. **Você fez história!**  
  403. Clique em OK para reiniciar ou aceite o desafio e vá ainda mais longe! 🚀  
  404. Parabéns, campeão! 👑✨
  405.  
  406. ***Jogo resetado... Agora, o próximo capítulo te espera!***  
  407. ]])
  408.  
  409. resetar_jogo()
  410. return
  411.  
  412.             end
  413.         end
  414.     end
  415. end
  416.  
  417. function cnt()
  418.     gg.alert([[
  419. 🔔 **Script made for the Channel**
  420.     📽 **Master Cheats⚜** - Created by: **Edrwuan👑**
  421.    
  422.     ➡️ **Subscribe to the Channel** for more Cheats and Game News 🎮
  423.    
  424.     🔗 **Telegram Contact**: [Click here to join](https://t.me/joinchat/IarWN9hjkgcunWEN)
  425.     📧 **Email**: edrwuan@live.com
  426.    
  427.     📱 **Official Telegram**: @MastercheatsAnonymous
  428.  
  429.  
  430.  
  431.     🔔 **Script produzido para o Canal**
  432.     📽 **Master Cheats⚜** - Criado por: **Edrwuan👑**
  433.    
  434.     ➡️ **Inscreva-se no Canal** para mais Cheats e Novidades sobre Jogos 🎮
  435.    
  436.     🔗 **Contato Telegram**: [Clique aqui para entrar](https://t.me/joinchat/IarWN9hjkgcunWEN)
  437.     📧 **E-mail**: edrwuan@live.com
  438.    
  439.     📱 **Telegram Oficial**: @MastercheatsAnonymous
  440.     ]])
  441.    
  442.     return
  443. end
  444.  
  445. function exibir_dicas()
  446.     local mensagem = [[
  447. 📜 *Mini Game Archero🧕 - Game Guardian* 📜
  448.  
  449. 🎮 *Objetivo do Jogo:*
  450. - Sobreviva aos inimigos e chegue até a bandeira 🚩.
  451. - Derrote todos os inimigos para abrir a porta da saída.
  452.  
  453. 💡 *Dicas e Estratégias:*
  454. 1️⃣ Use obstáculos 🗿 a seu favor para bloquear inimigos.
  455. 2️⃣ Se posicione corretamente para atacar inimigos alinhados ⚡.
  456. 3️⃣ Fique atento ao número de inimigos no cenário e à sua posição.
  457. 4️⃣ Utilize bem suas 3 vidas ❤️, evitando cercos.
  458. 5️⃣ Cuidado! Os inimigos se movem quando você se move.
  459.  
  460. 🔥 Boa sorte e divirta-se!
  461. ]]
  462.  
  463.     gg.alert(mensagem)
  464. end
  465.  
  466. -- Função para exibir a mensagem de saída com um tom mais emocional
  467. function sairJogo()
  468.     local resposta = gg.choice({"✅Sim, quero sair", "❌Não, quero continuar"}, nil, "Você tem certeza? 😔 Quer mesmo deixar o jogo?")
  469.    
  470.     if resposta == 1 then
  471.         -- Mensagem de despedida mais emotiva
  472.         gg.alert("Oh não! 😢 O jogo terminou. Volte logo para se divertir mais! Até a próxima! 👋")
  473.         os.exit()  -- Isso encerra o script
  474.     else
  475.         -- Mensagem de ânimo caso o jogador escolha continuar
  476.         gg.alert("Ufa! Que bom que você decidiu continuar! 😎 Vamos nessa, boa sorte! 🍀")
  477.         return
  478.     end
  479. end
  480. -- Iniciar o jogo
  481. jogar()
  482.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement