-- 5x5 (cinco por cinco)
-- Escrito por Ninguem -- 07/02/2016
adm = "Ninguem"
mapa = [[]]
jogador = {}
nome = {}
modo = "inicio"
function soLetras(txt)
letras = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i=1, #txt do
if not string.find(letras, txt:sub(i,i)) then
return false
end
end
return true
end
function temRepetidas(txt)
local letras = {}
for i=1, #txt do
if letras[txt:sub(i,i)] then
return true
end
letras[txt:sub(i,i)] = true
end
return false
end
function desenhaLetras(p)
local alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
local txt = "
"
for i=1, #alfabeto do
local l = jogador[nome[p]].letras[alfabeto:sub(i,i)]
txt = txt.. string.format("<%s>%s ", l == 1 and "j" or l == 2 and "r" or "n", alfabeto:sub(i,i), alfabeto:sub(i,i))
end
ui.addTextArea(3, txt, p, 150, 50, 500, nil, 0, 0, 0, false)
end
function desenhaTentativas()
local txt = ""
for i, v in pairs(jogador[1].tentativas) do
txt = txt .. string.format("%s - %d\n", v.palavra, v.letras)
end
ui.addTextArea(4, txt, p, 150, 100, 250, 180, 0, 0, 0, false)
txt = ""
for i, v in pairs(jogador[2].tentativas) do
txt = txt .. string.format("%s - %d\n", v.palavra, v.letras)
end
ui.addTextArea(5, txt, p, 400, 100, 250, 180, 0, 0, 0, false)
ui.addPopup(1, 2, "Digite uma palavra de 5 letras (dessa vez pode repetir letras)", jogador[1].nome, 200, 300, 400, true)
ui.addPopup(1, 2, "Digite uma palavra de 5 letras (dessa vez pode repetir letras)", jogador[2].nome, 200, 300, 400, true)
end
function start()
desenhaLetras(jogador[1].nome)
desenhaLetras(jogador[2].nome)
desenhaTentativas()
end
function compara(n)
local letra = {}
local cont = 0
for i=1, #jogador[n].novaTentativa do
letra[jogador[n].novaTentativa:sub(i,i)] = true
end
for i, v in pairs(letra) do
for j=1, #jogador[n].palavra do
if i == jogador[n].palavra:sub(j,j) then
cont = cont + 1
end
end
end
table.insert(jogador[n].tentativas, 1, {palavra=jogador[n].novaTentativa, letras=cont})
jogador[n].novaTentativa = false
end
function fimDeJogo(n)
local m = n == 1 and 2 or 1
ui.removeTextArea(4)
ui.removeTextArea(5)
ui.addTextArea(-1, string.format("%s ACERTOU %s!\n%s ERROU %s", string.upper(jogador[n].nome), jogador[n].palavra, string.upper(jogador[m].nome), jogador[m].palavra), nil, 200, 100, 400, nil, 0, 0, 0, false)
end
function avaliaPalavras()
if jogador[1].novaTentativa == jogador[1].palavra then
if jogador[2].novaTentativa == jogador[2].palavra then
ui.removeTextArea(4)
ui.removeTextArea(5)
ui.addTextArea(-1, string.format("EMPATE\n%s ACERTOU %s!\n%s ACERTOU %s", string.upper(jogador[n].nome), jogador[n].palavra, string.upper(jogador[m].nome), jogador[m].palavra), nil, 200, 100, 400, nil, 0, 0, 0, false)
else
fimDeJogo(1)
end
return false
end
if jogador[2].novaTentativa == jogador[2].palavra then
fimDeJogo(2)
return false
end
compara(1)
compara(2)
desenhaTentativas()
end
function eventNewGame()
jogador = {}
nome = {}
ui.removeTextArea(-1)
ui.removeTextArea(3)
ui.addTextArea(1, "[espaço]", nil, 20, 360, 100, 20, 0, 0, 0, false)
ui.addTextArea(2, "[espaço]", nil, 680, 360, 100, 20, 0, 0, 0, false)
for i, v in pairs(tfm.get.room.playerList) do
system.bindKeyboard(i, 32, true, true)
end
end
function eventKeyboard(p, t, d, x, y)
if modo == "inicio" then
if x > 20 and x < 120 then
if not jogador[1] then
jogador[1] = {nome=p, palavra=false, tentativas={}, novaTentativa=false, letras={}}
ui.addTextArea(1, ""..p, nil, 20, 360, 100, 20, 0, 0, 0, false)
nome[p] = 1
if jogador[2] then
for i, v in pairs(jogador) do
ui.addPopup(0, 2, "Escolha uma palavra de 5 letras com 5 letras diferentes", v.nome, 200, 150, 400, true)
end
end
end
elseif x > 680 and x < 780 then
if not jogador[2] then
jogador[2] = {nome=p, palavra=false, tentativas={}, novaTentativa=false, letras={}}
ui.addTextArea(2, "
"..p, nil, 680, 360, 100, 20, 0, 0, 0, false)
nome[p] = 2
if jogador[1] then
for i, v in pairs(jogador) do
ui.addPopup(0, 2, "Escolha uma palavra de 5 letras com 5 letras diferentes", v.nome, 200, 150, 400, true)
end
end
end
end
end
end
function eventPopupAnswer(id, p, cmd)
if id == 0 then -- popup de inicio
cmd = string.upper(cmd)
if #cmd == 5 and not temRepetidas(cmd) and soLetras(cmd) then
jogador[nome[p] == 1 and 2 or 1].palavra = cmd
if not jogador[1].palavra or not jogador[2].palavra then
ui.addTextArea(3, "
Aguardando o outro jogador...", p, 200, 150, 400, nil, 0, 0, 0, false)
else
start()
end
else
ui.addPopup(0, 2, "Escolha uma palavra de 5 letras com 5 letras diferentes", p, 200, 150, 400, true)
end
elseif id == 1 then -- popup de tentativa
cmd = string.upper(cmd)
if #cmd == 5 and soLetras(cmd) then
jogador[nome[p]].novaTentativa = cmd
if not jogador[1].novaTentativa or not jogador[2].novaTentativa then
ui.addTextArea(-1, "
Aguardando o outro jogador...", p, 200, 300, 400, nil, 0, 0, 0, false)
else
avaliaPalavras()
end
else
ui.addPopup(1, 2, "Digite uma palavra de 5 letras (dessa vez pode repetir letras)", p, 200, 300, 400, true)
end
end
end
function eventTextAreaCallback(id, p, cmd)
if id == 3 then
if jogador[nome[p]].letras[cmd] == 1 then
jogador[nome[p]].letras[cmd] = 2
elseif jogador[nome[p]].letras[cmd] == 2 then
jogador[nome[p]].letras[cmd] = false
else
jogador[nome[p]].letras[cmd] = 1
end
desenhaLetras(p)
end
end
function eventChatCommand(p, cmd)
if p == adm then
if cmd == "new" then
tfm.exec.newGame(mapa)
end
end
end
tfm.exec.disableAutoShaman(true)
tfm.exec.disableAutoNewGame(true)
tfm.exec.disableAfkDeath(true)
tfm.exec.newGame(mapa)