--Snake
--Jorge_97

snksize=16

dofile("GAMES/Snake/niveles.lua")

snk_t={}
snk_s={}

snklvl=1

function snkstart()
--Tabla que almacena las posiciones
snk={}
snk[1]={x=10,y=3,w=snksize,h=snksize}
snk[2]={x=11,y=3,w=snksize,h=snksize}
snk[3]={x=12,y=3,w=snksize,h=snksize}

--Dirección de SNAKE
snkd=1

--Tiempo para cambiar (MS)
pulsaciones=450

--Objetos conseguidos
cobjetos=0

--Tiempo de movimiento
snktime=timer.new()
snktime:start()

--Contador
snkcontador=timer.new()
snkcontador:start()
end





function snkgame()

	draw.fillrect(0,0,480,272,negro)
	for i=1,29 do
		snk_t[2]:blit(i*snksize-snksize/2,0)
	end
	for y=1,#escenario do
		for x=1,#escenario[y] do
			snk_t[escenario[y][x]]:blit(x*snksize-snksize/2,y*snksize)
		end
	end
	screen.flip()
	if type(escenarioimg)=="userdata" then escenarioimg:free() escenarioimg=nil end
	escenarioimg=screen.toimage()

while true do
controls.read()


if snkcontador:time()>snkmaxtime*1000 then snklevel() end

if #snk==1 then
	if controls.press("left") then snkd=1 elseif controls.press("right") then snkd=2 end
	if controls.press("up") then snkd=3 elseif controls.press("down") then snkd=4 end
else
	if controls.press("left") and snk[2].x!=snk[1].x-1 then 
		snkd=1 		
	elseif controls.press("right") and snk[2].x!=snk[1].x+1 then 
		snkd=2 
	end
	
	if controls.press("up") and snk[2].y!=snk[1].y-1 then 
		snkd=3 
	elseif controls.press("down") and snk[2].y!=snk[1].y+1 then 
		snkd=4 
	end
end

if controls.press("triangle") then os.message(snktime:time()) end
if controls.cross() then pulsaciones=pulsaciones-0.01 end

if snktime:time()>pulsaciones then
	if #snk>1 then
		for i=#snk,2,-1 do
			snk[i].x=snk[i-1].x
			snk[i].y=snk[i-1].y
		end
	end
	if snkd==1 then
		snk[1].x=snk[1].x-1
	end
	if snkd==2 then 
		snk[1].x=snk[1].x+1
	end
	if snkd==3 then 
		snk[1].y=snk[1].y-1
	end
	if snkd==4 then 
		snk[1].y=snk[1].y+1
	end	
	if escenario[snk[1].y][snk[1].x]!=1 then snklevel() end
	escenarioimg:blit(0,0)
	
	for i=1,#objetos do
		if objetos[i].e then
			snk_t[3]:blit(objetos[i].x*snksize-snksize/2,objetos[i].y*snksize)
		end
		if snk[1].x==objetos[i].x and snk[1].y==objetos[i].y and objetos[i].e then
			if snkd==1 then 
				table.insert(snk,{x=snk[#snk].x+1,y=snk[#snk].y})
			end
			if snkd==2 then 
				table.insert(snk,{x=snk[#snk].x-1,y=snk[#snk].y})
			end
			if snkd==3 then 
				table.insert(snk,{x=snk[#snk].x,y=snk[#snk].y+1})
			end
			if snkd==4 then 
				table.insert(snk,{x=snk[#snk].x,y=snk[#snk].y-1})
			end
			cobjetos=cobjetos+1
			objetos[i].e=false
			if cobjetos==#objetos then snklvl=snklvl+1 snklevel() end
		end
	end
	--Mostramos el escenario y la cabeza
	snk_s[snkd]:blit(snk[1].x*snksize-snksize/2,snk[1].y*snksize)

	if #snk>1 then
		for i=2,#snk do
			if snk[1].x==snk[i].x and snk[1].y==snk[i].y then
				snklevel()
			end
		end
	end
	if #snk>1 then
		for i=2,#snk do
			draw.fillrect(snk[i].x*snksize-snksize/2,snk[i].y*snksize,snksize,snksize,negro)
		end
	end

	screen.print(100,10,"Tiempo: "..math.ceil((snkmaxtime*1000-snkcontador:time())/1000),negro)
	screen.print(300,10,"Manzanas: "..#objetos-cobjetos,negro)
	
	screen.flip()
	snktime:reset()
	
end


	if controls.press("start") then
		snktime:stop()
		screen.toimage():blend(0,0,100)
		draw.fillrect(0,50,480,40,negro)
		draw.fillrect(0,150,480,30,negro)
		screen.print(240,65,"Menú de Pausa",0.9,blanco,0,"center")
		screen.print(240,160,"Pulsa X para seguir o Círculo para salir",0.7,blanco,0,"center")
		screen.flip()
		while true do
			controls.read()
			if controls.press("cross") then snktime:start() break end
			if controls.press("circle") then sistema() end
		end
	end

end
end