Olá amigos. Sou estudante de publicidade, e nesse semestre temos um grande trabalho para ser apresentado.
Dentro d minha campanha quero colocar uma aplicação em TV Digital. A minha idéia é criar um joguinho da velha que o telespectador irá jogar. Se ele ganhar, o meu cliente irá ganhar um brinde.
Gostaria de saber a possibilidade de criarmos esse jogo juntos, visto que eu não entendo muito de prgramação (entendo de informatica).
Estou disposto a reverter todo o projeto, bem como o aprendizado para a comunidade, Para isso eu contaria com a ajuda de vocês.
Minha primeira dificuldade é na lógica do jogo, como fazer o computador entender a jogada do telespectador, na busca de ganhar, visto que não quero que seja uma facilidade completa para o telespectador ganhar.
Aguardo a ajuda
Abraços
Kélil Marcilio
Autor: José Kélil Marcilio Alves do RÊgo
22 comentários
Segue um código todo pronto em Lua de um jogo da velha em que o jogador atua tanto pela 'O' quanto pelo 'X'.
Minha expectativa é que a comunidade ajude-o a evoluir o Jogo da Velha da forma que você quer (o telespectador contra o jogo) e tirando dúvidas do código.
Acredito muito que essa comunidade pode apoiar muito nesse sentido.
-- PECAS X = canvas:new('x.png')
O = canvas:new('o.png') -- TABULEIRO:
-- Respectivamente, posicao em x e y no canvas, verificador de casa preenchida
-- (t = 0 (vazia)) e imagem a ser colocada no local(inicialmente, o conteudo é nil (img = nil)
-- pois nenhum jogador possui tal casa). local tab = {
{ x=0, y=0, t=0, img=nil },
{ x=100, y=0, t=0, img=nil },
{ x=200, y=0, t=0, img=nil },
{ x=0, y=100, t=0, img=nil },
{ x=100, y=100, t=0, img=nil },
{ x=200, y=100, t=0, img=nil },
{ x=0, y=200, t=0, img=nil },
{ x=100, y=200, t=0, img=nil },
{ x=200, y=200, t=0, img=nil },
}
-- JOGADOR:
-- A tabela player possui os dois tipos de jogadores, onde cada um possui sua posicao
-- inicial (centro do tabuleiro) e imagem. A constante cur administra o turno de cada jogador. local cur = 1
local player = {
{ pos=5, img=X },
{ pos=5, img=O },
} -- Sequencia de posicoes no tabuleiro onde é possivel vencer. local win = {
{1,2,3}, {4,5,6}, {7,8,9} , {1,4,7} , {2,5,8} , {3,6,9} , {1,5,9} , {3,5,7}
} -- Funcao de teste:
-- Testa se as posicoes na tabela win possuem a mesma imagem, diferente nil. function test ()
for i=1, #win do
local c = win[i]
if (tab[c[1]].img == tab[c[2]].img) and
(tab[c[1]].img == tab[c[3]].img) and (tab[c[1]].img ~= nil)then
return true
end
end
return false
end local visible = true
local function f ()
visible = not visible
event.timer(200, f)
end -- Funcao de redesenho:
-- chamada a cada tecla pressionada
-- primeiro o fundo, depois as linha e, por fim, as jogadas já executadas. function redraw () canvas:attrColor('black')
canvas:drawRect('fill', 0, 0, canvas:attrSize())
canvas:attrColor('white')
canvas:drawLine(100,0,100,300)
canvas:drawLine(200,0,200,300)
canvas:drawLine(0,100,300,100)
canvas:drawLine(0,200,300,200)
for i=1, 9 do
if tab[i].img then
canvas:compose(tab[i].x,tab[i].y,tab[i].img)
end
end if visible then
local p = player[cur]
canvas:compose(tab[p.pos].x, tab[p.pos].y, p.img)
end
canvas:flush()
end -- Funcao de tratamento de eventos: function handler (evt) if (evt.class == 'ncl') and (evt.type == 'presentation')
and (evt.action == 'start') then
event.timer(300, f)
end local p = player[cur]
if evt.class == 'key' and evt.type == 'press'
then
local last = p.pos if evt.key == 'CURSOR_UP' then
p.pos = p.pos - 3
elseif evt.key == 'CURSOR_DOWN' then
p.pos = p.pos + 3
elseif evt.key == 'CURSOR_LEFT' then
p.pos = p.pos - 1
elseif evt.key == 'CURSOR_RIGHT' then
p.pos = p.pos + 1
elseif (evt.key == 'ENTER') and (not tab[p.pos].img) then
tab[p.pos].img = p.img
tab[p.pos].t = 1
if cur == 1 then
cur = 2
else
cur = 1
end
--NEW TEXT
p.pos = 5
end if (p.pos < 1) or (p.pos > 9) then
p.pos = last
end end
redraw() if test() then
event.post('out', { class='ncl', type='presentation', area='fim', transition='starts' })
end end event.register(handler)