Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Configurações iniciais
- local tabuleiro = ""
- local jogador_posicao_x = 14 -- Linha do jogador (válido de 1 a 14, pois 0 e 15 são as bordas)
- local jogador_posicao_y = 7 -- Coluna do jogador (válido de 1 a 14)
- local porta_x, porta_y = nil, nil -- A porta só aparece após derrotar os inimigos
- local cenarios = {"🧱", "🏕️", "🏖️", "🏜️", "🏝️", "🏟️", "🏛️", "🌃", "🕌", "️🕋"} -- Símbolos das bordas
- local cenario_atual = 1
- -- A lista abaixo dos inimigos padrão não é usada diretamente, pois os inimigos serão gerados aleatoriamente.
- local inimigos = {}
- local obstaculos = {} -- Obstáculos serão definidos com um padrão fixo
- local dificuldade = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100} -- Número de inimigos para cada cenário
- local monster = 0
- local pontuacao = 0
- local vida = 3 -- Internamente, usamos um número; na exibição, mostraremos corações.
- local level = 1
- local mortes = {} -- Registra as posições dos inimigos derrotados
- -- Variáveis globais para o herói e arma escolhidos
- local heroIcon = "🧑🚒" -- Valor padrão para o herói
- local weaponIcon = "🔥" -- Valor padrão para a arma
- ----------------------------------------------------------
- -- Padrão fixo para obstáculos (células interiores: linhas 1 a 14, colunas 1 a 14)
- -- Cada string tem 14 caracteres: "O" representa obstáculo, "." representa célula aberta.
- ----------------------------------------------------------
- local fixedPattern = {
- "..............", -- Linha 1
- "..O..O..O..O..", -- Linha 2
- "..............", -- Linha 3
- "..O..O..O..O..", -- Linha 4
- "..............", -- Linha 5
- "..O..O..O..O..", -- Linha 6
- "..............", -- Linha 7
- "..............", -- Linha 8
- "..O..O..O..O..", -- Linha 9
- "..............", -- Linha 10
- "..O..O..O..O..", -- Linha 11
- "..............", -- Linha 12
- "..O..O..O..O..", -- Linha 13
- ".............." -- Linha 14
- }
- ----------------------------------------------------------
- -- Preenche a tabela "obstaculos" usando o padrão fixo
- ----------------------------------------------------------
- function gerar_obstaculos()
- obstaculos = {}
- for i = 1, 14 do
- local row = fixedPattern[i]
- for j = 1, 14 do
- local ch = row:sub(j, j)
- if ch == "O" then
- table.insert(obstaculos, {x = i, y = j})
- end
- end
- end
- end
- ----------------------------------------------------------
- -- Função para verificar se há um obstáculo em uma dada posição
- ----------------------------------------------------------
- function is_obstaculo_at(x, y)
- for _, o in ipairs(obstaculos) do
- if o.x == x and o.y == y then
- return true
- end
- end
- return false
- end
- ----------------------------------------------------------
- -- Função para verificar se há um inimigo em uma dada posição (opcionalmente excluindo um índice)
- ----------------------------------------------------------
- function is_inimigo_at(x, y, excluir_index)
- for idx, inimigo in ipairs(inimigos) do
- if idx ~= excluir_index and inimigo.x == x and inimigo.y == y then
- return true
- end
- end
- return false
- end
- ----------------------------------------------------------
- -- Função para verificar se existe algum obstáculo entre duas posições (linha ou coluna)
- ----------------------------------------------------------
- function obstaculo_no_caminho(x1, y1, x2, y2)
- for _, o in ipairs(obstaculos) do
- if x1 == x2 and o.x == x1 and o.y > math.min(y1, y2) and o.y < math.max(y1, y2) then
- return true
- elseif y1 == y2 and o.y == y1 and o.x > math.min(x1, x2) and o.x < math.max(x1, x2) then
- return true
- end
- end
- return false
- end
- ----------------------------------------------------------
- -- Função para gerar inimigos aleatórios
- ----------------------------------------------------------
- function gerar_inimigos()
- inimigos = {}
- local quantidade = dificuldade[cenario_atual] or 50
- local tipos_inimigos = {"😈", "🤡", "👹", "👻", "👺"} -- Lista de tipos de inimigos
- for i = 1, quantidade do
- local inimigo_x, inimigo_y
- repeat
- inimigo_x = math.random(1, 12) -- posições válidas de 1 a 12
- inimigo_y = math.random(1, 12)
- until not (inimigo_x == jogador_posicao_x and inimigo_y == jogador_posicao_y)
- and not is_obstaculo_at(inimigo_x, inimigo_y)
- and not is_inimigo_at(inimigo_x, inimigo_y)
- -- Escolhendo aleatoriamente um tipo de inimigo
- local tipo_inimigo = tipos_inimigos[math.random(#tipos_inimigos)]
- table.insert(inimigos, {x = inimigo_x, y = inimigo_y, tipo = tipo_inimigo})
- end
- porta_x, porta_y = nil, nil -- Esconde a porta até eliminar os inimigos
- end
- ----------------------------------------------------------
- -- Função para atualizar a porta (aparece quando todos os inimigos forem derrotados)
- ----------------------------------------------------------
- function atualizar_porta()
- if #inimigos == 0 and not porta_x then
- porta_x, porta_y = 8, 7 -- A porta é exibida na borda esquerda, coluna 7
- end
- end
- ----------------------------------------------------------
- -- Função para mover os inimigos
- ----------------------------------------------------------
- function mover_inimigos()
- for idx, inimigo in ipairs(inimigos) do
- if inimigo.x == jogador_posicao_x and not obstaculo_no_caminho(inimigo.x, inimigo.y, jogador_posicao_x, jogador_posicao_y) then
- local nova_y = inimigo.y
- if inimigo.y < jogador_posicao_y then
- nova_y = inimigo.y + 1
- elseif inimigo.y > jogador_posicao_y then
- nova_y = inimigo.y - 1
- end
- if nova_y == jogador_posicao_y then
- if not is_inimigo_at(inimigo.x, nova_y, idx) then
- inimigo.y = nova_y
- end
- else
- if not is_obstaculo_at(inimigo.x, nova_y) and not is_inimigo_at(inimigo.x, nova_y, idx) then
- inimigo.y = nova_y
- end
- end
- elseif inimigo.y == jogador_posicao_y and not obstaculo_no_caminho(inimigo.x, inimigo.y, jogador_posicao_x, jogador_posicao_y) then
- local nova_x = inimigo.x
- if inimigo.x < jogador_posicao_x then
- nova_x = inimigo.x + 1
- elseif inimigo.x > jogador_posicao_x then
- nova_x = inimigo.x - 1
- end
- if nova_x == jogador_posicao_x then
- if not is_inimigo_at(nova_x, inimigo.y, idx) then
- inimigo.x = nova_x
- end
- else
- if not is_obstaculo_at(nova_x, inimigo.y) and not is_inimigo_at(nova_x, inimigo.y, idx) then
- inimigo.x = nova_x
- end
- end
- end
- end
- end
- ----------------------------------------------------------
- -- Função para desenhar o tabuleiro
- ----------------------------------------------------------
- function desenhar_tabuleiro()
- tabuleiro = ""
- local cor = cenarios[cenario_atual]
- local shooting_trail = {}
- -- Define a trilha de disparo (5 células com a arma escolhida) se houver um inimigo alinhado com o jogador, a distância for <= 5
- for _, inimigo in ipairs(inimigos) do
- if inimigo.x == jogador_posicao_x then
- local distancia = math.abs(inimigo.y - jogador_posicao_y)
- if distancia <= 5 and not obstaculo_no_caminho(jogador_posicao_x, jogador_posicao_y, inimigo.x, inimigo.y) then
- local dir = (inimigo.y > jogador_posicao_y) and 1 or -1
- for i = 1, 5 do
- table.insert(shooting_trail, {x = jogador_posicao_x, y = jogador_posicao_y + i * dir})
- end
- break
- end
- elseif inimigo.y == jogador_posicao_y then
- local distancia = math.abs(inimigo.x - jogador_posicao_x)
- if distancia <= 5 and not obstaculo_no_caminho(jogador_posicao_x, jogador_posicao_y, inimigo.x, inimigo.y) then
- local dir = (inimigo.x > jogador_posicao_x) and 1 or -1
- for i = 1, 5 do
- table.insert(shooting_trail, {x = jogador_posicao_x + i * dir, y = jogador_posicao_y})
- end
- break
- end
- end
- end
- for i = 0, 15 do
- for j = 0, 15 do
- -- 1. Bordas
- if i == 0 or i == 15 or j == 0 or j == 15 then
- tabuleiro = tabuleiro .. cor
- -- 2. Posição do jogador (usa o herói selecionado)
- elseif i == jogador_posicao_x and j == jogador_posicao_y then
- tabuleiro = tabuleiro .. heroIcon
- -- 3. Porta
- elseif porta_x and i == porta_x and j == porta_y then
- tabuleiro = tabuleiro .. "️🚩"
- else
- local especial = false
- -- 4. Inimigos na célula
- for _, inimigo in ipairs(inimigos) do
- if i == inimigo.x and j == inimigo.y then
- tabuleiro = tabuleiro .. inimigo.tipo
- especial = true
- break
- end
- end
- if not especial then
- local morto = false
- -- 5. Inimigo morto
- for _, morte in ipairs(mortes) do
- if i == morte.x and j == morte.y then
- tabuleiro = tabuleiro .. "☠️"
- morto = true
- break
- end
- end
- if not morto then
- -- 6. Obstáculo fixo
- if i >= 1 and i <= 14 and j >= 1 and j <= 14 then
- local row = fixedPattern[i]
- local ch = row:sub(j, j)
- if ch == "O" then
- tabuleiro = tabuleiro .. "🗿"
- else
- -- 7. Trilha de disparo (usa a arma selecionada)
- if (function()
- for _, pos in ipairs(shooting_trail) do
- if pos.x == i and pos.y == j then
- return true
- end
- end
- return false
- end)() then
- tabuleiro = tabuleiro .. weaponIcon
- else
- -- 8. Marcador padrão
- tabuleiro = tabuleiro .. "▪️"
- end
- end
- else
- tabuleiro = tabuleiro .. "✔"
- end
- end
- end
- end
- end
- tabuleiro = tabuleiro .. "\n"
- end
- return "🏆 Pontuação: " .. pontuacao .. " 🧑💻 Vidas: " .. string.rep("❤️", vida) ..
- "\n☠️ Derrotados: " .. monster .. " 👤 Herói: " .. heroIcon ..
- "\n📶 Level: " .. level .." 🗡️ Arma: " .. weaponIcon .. "\n" .. tabuleiro
- end
- ----------------------------------------------------------
- -- Função para atacar inimigos
- ----------------------------------------------------------
- function atacar()
- local inimigo_alvo = nil
- local distancia_min = math.huge -- Inicializa com um número muito grande
- for _, inimigo in ipairs(inimigos) do
- if inimigo.x == jogador_posicao_x or inimigo.y == jogador_posicao_y then
- local distancia = math.abs(inimigo.x - jogador_posicao_x) + math.abs(inimigo.y - jogador_posicao_y)
- if distancia <= 5 then -- Verifica se o inimigo está no alcance (5 células)
- local bloqueado = false
- if jogador_posicao_x == inimigo.x then
- for _, obstaculo in ipairs(obstaculos) do
- 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
- bloqueado = true
- break
- end
- end
- elseif jogador_posicao_y == inimigo.y then
- for _, obstaculo in ipairs(obstaculos) do
- 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
- bloqueado = true
- break
- end
- end
- end
- if not bloqueado and distancia < distancia_min then
- distancia_min = distancia
- inimigo_alvo = inimigo
- end
- end
- end
- end
- if inimigo_alvo then
- table.insert(mortes, {x = inimigo_alvo.x, y = inimigo_alvo.y})
- for i = #inimigos, 1, -1 do
- if inimigos[i] == inimigo_alvo then
- table.remove(inimigos, i)
- break
- end
- end
- pontuacao = pontuacao + 150
- monster = monster + 1
- atualizar_porta()
- end
- end
- ----------------------------------------------------------
- -- Função para reiniciar o jogo
- ----------------------------------------------------------
- function resetar_jogo()
- local escolha = gg.choice({"🔄 Reiniciar Jogo", "❌ Sair"}, nil, "O jogo terminou! Deseja reiniciar?")
- if escolha == 1 then
- -- Reseta todas as variáveis do jogo
- jogador_posicao_x, jogador_posicao_y = 14, 7
- porta_x, porta_y = nil, nil
- cenario_atual = 1
- inimigos = {}
- obstaculos = {} -- Será refeito via fixedPattern
- dificuldade = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100}
- monster = 0
- pontuacao = 0
- vida = 3
- mortes = {}
- level = 15
- gg.toast("Jogo reiniciado!")
- jogar() -- Inicia um novo jogo
- else
- gg.toast("Jogo encerrado.")
- end
- end
- ----------------------------------------------------------
- -- Função principal do jogo
- ----------------------------------------------------------
- function jogar()
- gerar_obstaculos() -- Preenche os obstáculos com o padrão fixo
- gerar_inimigos()
- while true do
- local tabuleiro_atual = desenhar_tabuleiro()
- local escolha = gg.choice({
- " ⬆️ Cima\n",
- "\n⬅️ Esquerda\n",
- "\n ➡️ Direita\n",
- "\n ⬇️ Baixo\n",
- " ⚡ Atacar\n",
- "🗂️Menu Principa↩️l",
- "❌ Desistir👋"
- }, nil, tabuleiro_atual .. "")
- -- Movimentação do jogador (não pode atravessar obstáculos fixos)
- if escolha == 1 and jogador_posicao_x > 1 and not is_obstaculo_at(jogador_posicao_x - 1, jogador_posicao_y) then
- jogador_posicao_x = jogador_posicao_x - 1 -- Cima
- elseif escolha == 2 and jogador_posicao_y > 1 and not is_obstaculo_at(jogador_posicao_x, jogador_posicao_y - 1) then
- jogador_posicao_y = jogador_posicao_y - 1 -- Esquerda
- elseif escolha == 3 and jogador_posicao_y < 14 and not is_obstaculo_at(jogador_posicao_x, jogador_posicao_y + 1) then
- jogador_posicao_y = jogador_posicao_y + 1 -- Direita
- elseif escolha == 4 and jogador_posicao_x < 14 and not is_obstaculo_at(jogador_posicao_x + 1, jogador_posicao_y) then
- jogador_posicao_x = jogador_posicao_x + 1 -- Baixo
- elseif escolha == 5 then
- atacar()
- elseif escolha == 6 then
- mainMenu()
- elseif escolha == 7 or escolha == nil then
- sairJogo()
- end
- mover_inimigos()
- -- Verifica se algum inimigo atingiu o jogador (mesma célula)
- for _, inimigo in ipairs(inimigos) do
- if inimigo.x == jogador_posicao_x and inimigo.y == jogador_posicao_y then
- vida = vida - 1
- gg.toast("Você foi atingido! Vidas restantes: " .. string.rep("❤️", vida))
- if vida == 0 then
- gg.toast("Você foi derrotado pelos inimigos!")
- resetar_jogo()
- return
- end
- end
- end
- -- Verifica se o jogador entrou na porta para avançar de cenário
- if porta_x and jogador_posicao_x == porta_x and jogador_posicao_y == porta_y then
- if cenario_atual < #cenarios then
- cenario_atual = cenario_atual + 1
- level = cenario_atual
- jogador_posicao_x, jogador_posicao_y = 14, 7
- mortes = {}
- gerar_obstaculos()
- gerar_inimigos()
- gg.toast("Novo cenário!")
- else
- gg.alert([[
- 🌟 **Parabéns, você acaba de conquistar a vitória!** 🌟
- Você não apenas venceu... você DOMINOU o jogo! 😎🔥
- A sua habilidade e estratégia foram simplesmente incríveis!
- 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! 🏆🎉
- **Você fez história!**
- Clique em OK para reiniciar ou aceite o desafio e vá ainda mais longe! 🚀
- Parabéns, campeão! 👑✨
- ***Jogo resetado... Agora, o próximo capítulo te espera!***
- ]])
- resetar_jogo()
- return
- end
- end
- end
- end
- ----------------------------------------------------------
- -- Função para exibir informações de contato
- ----------------------------------------------------------
- function cnt()
- gg.alert([[
- 🔔 **Script made for the Channel**
- 📽 **Master Cheats⚜** - Created by: **Edrwuan👑**
- ➡️ **Subscribe to the Channel** for more Cheats and Game News 🎮
- 🔗 **Telegram Contact**: [Click here to join](https://t.me/joinchat/IarWN9hjkgcunWEN)
- 📧 **Email**: edrwuan@live.com
- 📱 **Official Telegram**: @MastercheatsAnonymous
- 🔔 **Script produzido para o Canal**
- 📽 **Master Cheats⚜** - Criado por: **Edrwuan👑**
- ➡️ **Inscreva-se no Canal** para mais Cheats e Novidades sobre Jogos 🎮
- 🔗 **Contato Telegram**: [Clique aqui para entrar](https://t.me/joinchat/IarWN9hjkgcunWEN)
- 📧 **E-mail**: edrwuan@live.com
- 📱 **Telegram Oficial**: @MastercheatsAnonymous
- ]])
- return
- end
- ----------------------------------------------------------
- -- Função para exibir dicas e informações do jogo
- ----------------------------------------------------------
- function exibir_dicas()
- local mensagem = [[
- 📜 *Mini Game Archero🧕 - Game Guardian* 📜
- 🎮 *Objetivo do Jogo:*
- - Sobreviva aos inimigos e chegue até a bandeira 🚩.
- - Derrote todos os inimigos para abrir a porta da saída.
- 💡 *Dicas e Estratégias:*
- 1️⃣ Use obstáculos 🗿 a seu favor para bloquear inimigos.
- 2️⃣ Se posicione corretamente para atacar inimigos alinhados (sua arma fará o disparo).
- 3️⃣ Fique atento ao número de inimigos no cenário e à sua posição.
- 4️⃣ Utilize bem suas 3 vidas ❤️, evitando cercos.
- 5️⃣ Cuidado! Os inimigos se movem quando você se move.
- 🔥 Boa sorte e divirta-se!
- ]]
- gg.alert(mensagem)
- end
- ----------------------------------------------------------
- -- Função para exibir mensagem de saída
- ----------------------------------------------------------
- function sairJogo()
- local resposta = gg.choice({"✅Sim, quero sair", "❌Não, quero continuar"}, nil, "Você tem certeza? 😔 Quer mesmo deixar o jogo?")
- if resposta == 1 then
- gg.alert("Oh não! 😢 O jogo terminou. Volte logo para se divertir mais! Até a próxima! 👋")
- os.exit() -- Encerra o script
- else
- gg.alert("Ufa! Que bom que você decidiu continuar! 😎 Vamos nessa, boa sorte! 🍀")
- return
- end
- end
- ----------------------------------------------------------
- -- Menu de Seleção de Herói
- ----------------------------------------------------------
- function selecionarHeroi()
- -- Tabela de heróis com ícone e nome
- local herois = {
- {icon = "🧜♂️", nome = "Merman"},
- {icon = "🧕", nome = "Mulher"},
- {icon = "🧑🚒", nome = "Bombeiro"},
- {icon = "👮♀️", nome = "Policial"},
- {icon = "🥷", nome = "Ninja"},
- {icon = "🦸", nome = "Super-herói"},
- {icon = "🧙♂️", nome = "Mago"},
- {icon = "🦹♀️", nome = "Vilã"},
- {icon = "🧑🍳", nome = "Cozinheiro"},
- {icon = "👩🌾", nome = "Agricultora"},
- {icon = "🧌", nome = "Monstro"},
- {icon = "👸", nome = "Princesa"}
- }
- -- Constrói o menu de opções com ícone e nome
- local opcoes = {}
- for i, heroi in ipairs(herois) do
- table.insert(opcoes, heroi.icon .. " - " .. heroi.nome)
- end
- local escolha = gg.choice(opcoes, nil, "Escolha seu Herói:")
- if escolha then
- heroIcon = herois[escolha].icon -- Atualiza apenas o ícone que será usado no jogo
- gg.toast("Herói selecionado: " .. herois[escolha].nome)
- else
- gg.toast("Nenhum herói selecionado. Usando padrão: " .. heroIcon)
- end
- end
- ----------------------------------------------------------
- -- Menu de Seleção de Arma
- ----------------------------------------------------------
- function selecionarArma()
- -- Tabela de armas com ícone e nome
- local armas = {
- {icon = "🔪", nome = "Faca"},
- {icon = "🗡️", nome = "Espada"},
- {icon = "🔥", nome = "Fogo"},
- {icon = "⚡", nome = "Raio"},
- {icon = "❄️", nome = "Gelo"},
- {icon = "☄️", nome = "Cometa"},
- {icon = "🧨", nome = "Dinamite"},
- {icon = "💫", nome = "Estelar"},
- {icon = "💣", nome = "Bomba"},
- {icon = "🪃", nome = "Bumerangue"},
- {icon = "⛓️", nome = "Corrente"},
- {icon = "⚙️", nome = "Disco Serra"},
- {icon = "🪓", nome = "Machado"},
- {icon = "💥", nome = "Explosiva"}
- }
- -- Cria o menu de opções concatenando ícone e nome
- local opcoes = {}
- for i, arma in ipairs(armas) do
- table.insert(opcoes, arma.icon .. " - " .. arma.nome)
- end
- local escolha = gg.choice(opcoes, nil, "Selecione sua Arma:")
- if escolha then
- weaponIcon = armas[escolha].icon -- Atualiza a arma com o ícone selecionado
- gg.toast("Arma selecionada: " .. armas[escolha].nome)
- else
- gg.toast("Nenhuma arma selecionada. Usando padrão: " .. weaponIcon)
- end
- end
- ----------------------------------------------------------
- -- Menu Principal
- ----------------------------------------------------------
- function mainMenu()
- local escolha = gg.choice(
- {
- "🎮 Iniciar Jogo",
- "🧑🚒Escolha um Heroi",
- "🗡️Selecione uma arma",
- "📖Sobre o Jogo e Dicas💡",
- "🌐 Contate-Me",
- "❌ Desistir!😪"},
- nil,
- "🕹️ Mini Game Archero - Made for Edrwuan \nBy: 🎞️YouTube 👑Master Cheats Channel🎥\n\n 💠 Menu Principal 💠"
- )
- if escolha == 1 then
- jogar()
- elseif escolha == 2 then
- selecionarHeroi()
- mainMenu() -- Retorna ao menu principal após a seleção
- elseif escolha == 3 then
- selecionarArma()
- mainMenu()
- elseif escolha == 4 then
- exibir_dicas()
- mainMenu()
- elseif escolha == 5 then
- cnt()
- mainMenu()
- elseif escolha == 6 or escolha == nil then
- gg.toast("Jogo encerrado.")
- os.exit()
- end
- end
- -- Iniciar a aplicação pelo Menu Principal
- mainMenu()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement