-- title: fuga das sombras
-- author: jefersson
-- desc: RPG em 2D
-- script: lua
jogador = {
sprite = 260,
x = 120,
y = 68,
cordefundo = 6,
quadro = 1
}
constantes = {
largura_tela = 240,
altura_tela = 138,
velocidade_sprites_player = 0.1
}
objetos = {
}
function tentamover(delta)
meudeslocamentox = delta.deltax
meudeslocamentoy = delta.deltay
superioresquerdo = {
x = jogador.x - 8 + meudeslocamentox,
y = jogador.y - 8 + meudeslocamentoy
}
superiordireito = {
x = jogador.x + 7 + meudeslocamentox,
y = jogador.y - 8 + meudeslocamentoy
}
inferiordireito = {
x = jogador.x + 7 + meudeslocamentox,
y = jogador.y + 7 + meudeslocamentoy
}
inferioresquerdo = {
x = jogador.x - 8 + meudeslocamentox,
y = jogador.y + 7 + meudeslocamentoy
}
if not (temcolisaocommapa(inferioresquerdo) or
temcolisaocommapa(inferiordireito) or
temcolisaocommapa(superioresquerdo) or
temcolisaocommapa(superiordireito)) then
jogador.quadro = jogador.quadro + constantes.velocidade_sprites_player
if jogador.quadro >= 3 then
jogador.quadro = 1
end
jogador.y = jogador.y + meudeslocamentoy
jogador.x = jogador.x + meudeslocamentox
end
end
function temcolisaocommapa(ponto)
blocox = ponto.x / 8
blocoy = ponto.y / 8
blocoId = mget(blocox, blocoy)
if blocoId >= 128 then
return true
else
return false
end
end
function atualiza()
direcao = {
{deltax = 0, deltay = -1},
{deltax = 0, deltay = 1},
{deltax = -1, deltay = 0},
{deltax = 1, deltay = 0}
}
animacoeplayer = {
{256, 258},
{260, 262},
{264, 266},
{268, 270}
}
for tecla = 0, 3 do
if btn(tecla) then
quadros = animacoeplayer[tecla + 1]
quadro = math.floor(jogador.quadro)
jogador.sprite = quadros[quadro]
tentamover(direcao[tecla + 1])
end
end
end
function desenhaplayer()
spr(jogador.sprite,
jogador.x - 8,
jogador.y - 8,
jogador.cordefundo,
1, -- escala
0, -- espelhar
0, -- rotacionar
2, -- quantos blocos para direita
2) -- quantos blocos para baixo
end
function desenhamap()
map(0, -- posicao x no mapa
0, -- posicao y no mapa
constantes.largura_tela, -- quanto desenhar x
constantes.altura_tela, -- quanto desenhar y
0, -- em qual ponto colocar o x inicial
0) -- em qual ponto colocar o y inicial
end
function desenhaobjetos()
for indice,objeto in pairs(objetos) do
spr(objeto.sprite,
objeto.x,
objeto.y,
objeto.cordefundo,
1,
0,
0,
2,
2)
end
end
function colisaojogadorchave(indice)
table.remove(objetos, indice)
end
function temcolisaocomobjetos(objeto1, objeto2)
local esquerdade1 = objeto1.x - 8
local direitade1 = objeto1.x + 7
local baixode1 = objeto1.y + 7
local cimade1 = objeto1.y - 8
local direitade2 = objeto2.x + 7
local esquerdade2 = objeto2.x - 8
local baixode2 = objeto2.y + 7
local cimade2 = objeto2.y - 8
if esquerdade2 > direitade1 or
direitade2 < esquerdade1 or
baixode1 < cimade2 or
cimade1 > baixode2 then
return false
end
return true
end
function verificacolisaoobjeto ()
for indice, objeto in pairs(objetos) do
if temcolisaocomobjetos(jogador, indice) then
colisaojogadorchave(indice)
end
end
end
function desenha()
cls()
desenhamap()
desenhaplayer()
desenhaobjetos()
end
function TIC()
atualiza()
verificacolisaoobjeto()
desenha()
end
function criachave(coluna, linha)
local chave = {
sprite = 364,
x = coluna * 8,
y = linha * 8,
cordefundo = 6
}
return chave
end
function inicializa()
local chave = criachave(25, 8)
table.insert(objetos, chave)
end
inicializa()