Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- dofile("niveles.lua")
- empty = image.load("imagenes/empty.png")
- azul = image.load("imagenes/azul.png")
- sonido={}
- jugador = {img=image.load("imagenes/player.png"),posx=0,posy=0}
- size=30 --tamaño de los bloques
- cnv = 1 --nivel actual
- middlex = 480/2
- middley = 272/2
- tiles=0 --tiles que faltan
- posjugador = true
- moved = 0 --veces movidas
- --sonido.mover=sound.load("sonidos/mover.mp3")
- function cargar()
- moved=0
- tiles=0
- map=nil
- nivelactual=nil
- jugador.posx=0
- jugador.posy=0
- map={img = image.create(size*#nivel[cnv][1],size*#nivel[cnv]),x=middlex-(#nivel[cnv][1]*size)/2,y=middley-(#nivel[cnv]*size)/2}
- nivelactual={}
- for q=1,#nivel[cnv] do
- table.insert(nivelactual,q,{})
- for t=1,#nivel[cnv][q] do
- table.insert(nivelactual[q],t,{})
- end
- end
- for y = 1, #nivel[cnv] do
- for x = 1, #nivel[cnv][y] do
- if nivel[cnv][y][x] == "e" then
- map.img:blit((x-1)*30,(y-1)*30,empty)
- nivelactual[y][x]= "e"
- elseif nivel[cnv][y][x] == "a" then
- map.img:blit((x-1)*30,(y-1)*30,empty)
- nivelactual[y][x]= "a"
- tiles = tiles+1
- elseif nivel[cnv][y][x] == "p" then
- map.img:blit((x-1)*30,(y-1)*30,empty)
- nivelactual[y][x]= "a"
- jugador.posx=x
- jugador.posy=y
- tiles = tiles+1
- end
- end
- end
- end
- function mover(dir,n)
- local originalx = jugador.posx
- local originaly = jugador.posy
- if dir == "down" then
- originaly=originaly+(1*n)
- jugador.posy=jugador.posy+0.5
- jugador.posx=jugador.posx+0.5
- elseif dir == "up" then
- originaly=originaly-1*n
- jugador.posy=jugador.posy+0.5
- jugador.posx=jugador.posx+0.5
- elseif dir == "left" then
- originalx=originalx-1*n
- jugador.posy=jugador.posy+0.5
- jugador.posx=jugador.posx+0.5
- elseif dir == "right" then
- originalx=originalx+1*n
- jugador.posy=jugador.posy+0.5
- jugador.posx=jugador.posx+0.5
- end
- for i=1,30 do
- if dir == "down" then
- jugador.img:resize(30+i/3,30+i/3)
- jugador.img:center(jugador.img:width()/2,jugador.img:height()/2)
- jugador.posy=jugador.posy+(1*n)/60
- elseif dir == "right" then
- jugador.img:resize(30+i/3,30+i/3)
- jugador.img:center(jugador.img:width()/2,jugador.img:height()/2)
- jugador.posx=jugador.posx+(1*n)/60
- elseif dir == "up" then
- jugador.img:resize(30+i/3,30+i/3)
- jugador.img:center(jugador.img:width()/2,jugador.img:height()/2)
- jugador.posy=jugador.posy-(1*n)/60
- elseif dir == "left" then
- jugador.img:resize(30+i/3,30+i/3)
- jugador.img:center(jugador.img:width()/2,jugador.img:height()/2)
- jugador.posx=jugador.posx-(1*n)/60
- end
- blitmainthings()
- screen.flip()
- end
- for i=1,30 do
- if dir == "down" then
- jugador.img:resize(30-i/3,30-i/3)
- jugador.img:center(jugador.img:width()/2,jugador.img:height()/2)
- jugador.posy=jugador.posy+(1*n)/60
- elseif dir == "right" then
- jugador.img:resize(30-i/3,30-i/3)
- jugador.img:center(jugador.img:width()/2,jugador.img:height()/2)
- jugador.posx=jugador.posx+(1*n)/60
- elseif dir == "up" then
- jugador.img:resize(30-i/3,30-i/3)
- jugador.img:center(jugador.img:width()/2,jugador.img:height()/2)
- jugador.posy=jugador.posy-(1*n)/60
- elseif dir == "left" then
- jugador.img:resize(30-i/3,30-i/3)
- jugador.img:center(jugador.img:width()/2,jugador.img:height()/2)
- jugador.posx=jugador.posx-(1*n)/60
- end
- blitmainthings()
- screen.flip()
- end
- jugador.img:reset()
- jugador.posy=originaly
- jugador.posx=originalx
- end
- function comprobar(dir,n)
- if nivelactual[jugador.posy][jugador.posx] == "e" or jugador.posy <1 or jugador.posx <1 then
- morir()
- elseif nivelactual[jugador.posy][jugador.posx] == "a" then
- if dir == "right" then
- if nivelactual[jugador.posy][jugador.posx-(1*n)] == "a" then
- nivelactual[jugador.posy][jugador.posx-(1*n)] = "e"
- tiles=tiles-1
- end
- elseif dir == "left" then
- if nivelactual[jugador.posy][jugador.posx+(1*n)] == "a" then
- nivelactual[jugador.posy][jugador.posx+(1*n)] = "e"
- tiles=tiles-1
- end
- elseif dir == "up" then
- if nivelactual[jugador.posy+(1*n)][jugador.posx] == "a" then
- nivelactual[jugador.posy+(1*n)][jugador.posx] = "e"
- tiles=tiles-1
- end
- elseif dir == "down" then
- if nivelactual[jugador.posy-(1*n)][jugador.posx] == "a" then
- nivelactual[jugador.posy-(1*n)][jugador.posx] = "e"
- tiles=tiles-1
- end
- end
- end
- end
- function morir()
- jugador.posy=jugador.posy+0.5
- jugador.posx=jugador.posx+0.5
- for i= 1, 30 do
- jugador.img:resize(30-i,30-i)
- jugador.img:center(jugador.img:width()/2,jugador.img:height()/2)
- blitmainthings()
- screen.flip()
- jugador.img:reset()
- end
- jugador.img:reset()
- cargar()
- end
- function blitblocks()
- for y = 1, #nivelactual do
- for x = 1, #nivelactual[y] do
- --nivel
- if nivelactual[y][x] == "a" then
- azul:blit(map.x+(x-1)*size,map.y+(y-1)*size)
- end
- end
- end
- end
- function perder()
- blitmainthings()
- screen.flip()
- os.message("Has perdido...") cargar()
- end
- function moverjugador()
- if controls.down() then
- if controls.cross() then
- mover("down",2)
- comprobar("down",2)
- else
- mover("down",1)
- comprobar("down",1)
- end
- elseif controls.up() then
- if controls.cross() then
- mover("up",2)
- comprobar("up",2)
- else
- mover("up",1)
- comprobar("up",1)
- end
- elseif controls.right() then
- if controls.cross() then
- mover("right",2)
- comprobar("right",2)
- else
- mover("right",1)
- comprobar("right",1)
- end
- elseif controls.left() then
- if controls.cross() then
- mover("left",2)
- comprobar("left",2)
- else
- mover("left",1)
- comprobar("left",1)
- end
- end
- end
- function blitmainthings()
- map.img:blit(map.x,map.y)
- blitblocks()
- jugador.img:blit(map.x+(jugador.posx-1)*size,map.y+(jugador.posy-1)*size)
- screen.print(10,5,"PosX: "..math.floor(jugador.posx).." Posy: "..math.floor(jugador.posy))
- screen.print(150,5,"Tiles: "..tiles)
- screen.print(300,5,"Movidas: "..moved)
- end
- cargar()
- while true do
- controls.read()
- moverjugador()
- blitmainthings()
- if tiles==1 then
- blitmainthings()
- screen.flip()
- os.message("Has ganado...")
- cnv=cnv+1
- cargar()
- end
- screen.flip()
- if controls.select() then a() end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement