-- 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)