new and improve
This commit is contained in:
parent
20b30e0731
commit
3d47fae141
127
main.lua
127
main.lua
|
@ -67,9 +67,21 @@ local tt=0
|
||||||
local bat=1
|
local bat=1
|
||||||
local batd=bat
|
local batd=bat
|
||||||
local score=0
|
local score=0
|
||||||
|
local tochar=0
|
||||||
local scored=score
|
local scored=score
|
||||||
local function znoise(...)
|
local function znoise(...)
|
||||||
return love.math.noise(...)*2-1
|
return love.math.noise(...)*2-1
|
||||||
|
end
|
||||||
|
local function eudist(x,y)
|
||||||
|
return (x*x+y*y)^0.5
|
||||||
|
end
|
||||||
|
local function norm(x1,y1)
|
||||||
|
local d=eudist(x,y)
|
||||||
|
if d==0 then return 0,0 end
|
||||||
|
return x/d,y/d
|
||||||
|
end
|
||||||
|
local function dlbolt(x,y,x1,y1)
|
||||||
|
|
||||||
end
|
end
|
||||||
local function drawfig(n,a)
|
local function drawfig(n,a)
|
||||||
g.push("all")
|
g.push("all")
|
||||||
|
@ -133,7 +145,12 @@ end
|
||||||
|
|
||||||
local gemrng
|
local gemrng
|
||||||
local function randgem()
|
local function randgem()
|
||||||
local objl=gemrng:random()>0.99 and cgobjs or gobjs
|
tochar=tochar-1
|
||||||
|
local objl=gobjs
|
||||||
|
if tochar<=0 then
|
||||||
|
tochar=gemrng:random((bw*bh)*0.5,(bw*bh)*1.5)
|
||||||
|
objl=cgobjs
|
||||||
|
end
|
||||||
return objl[gemrng:random(math.floor(cc))]
|
return objl[gemrng:random(math.floor(cc))]
|
||||||
end
|
end
|
||||||
local function nextgem(o)
|
local function nextgem(o)
|
||||||
|
@ -163,11 +180,11 @@ local function badboigemcheck(c,am,ac,rm)
|
||||||
local rc=ac==5 and mgobjs[c] or lgobjs[c]
|
local rc=ac==5 and mgobjs[c] or lgobjs[c]
|
||||||
rm[e][3]=rc
|
rm[e][3]=rc
|
||||||
end
|
end
|
||||||
local function megascan(c,rm)
|
local function megascan(x,y,c,rm)
|
||||||
local ogc=c
|
local ogc=c
|
||||||
if not isgem(ogc) then return end
|
|
||||||
rm=rm or {}
|
rm=rm or {}
|
||||||
if ogc.super~="color" then return end
|
if not isgem(ogc) then return next(rm) and rm end
|
||||||
|
if ogc.super~="color" then return next(rm) and rm end
|
||||||
for x=1,bw do
|
for x=1,bw do
|
||||||
for y=1,bh do
|
for y=1,bh do
|
||||||
local i=pti(x,y)
|
local i=pti(x,y)
|
||||||
|
@ -180,7 +197,7 @@ local function megascan(c,rm)
|
||||||
end
|
end
|
||||||
local function check(x,y,rm,oam,obm)
|
local function check(x,y,rm,oam,obm)
|
||||||
local c=board[x][y]
|
local c=board[x][y]
|
||||||
if not c then return end
|
if not c then return rm,oam,obm end
|
||||||
local ac,bc=1,1
|
local ac,bc=1,1
|
||||||
local am,bm={},{}
|
local am,bm={},{}
|
||||||
oam,obm=oam or {}, obm or {}
|
oam,obm=oam or {}, obm or {}
|
||||||
|
@ -413,27 +430,45 @@ killall=function(kills,b,...)
|
||||||
return killall(kills,...)
|
return killall(kills,...)
|
||||||
end
|
end
|
||||||
local tt={}
|
local tt={}
|
||||||
local kills,ko={},kills
|
local seen={}
|
||||||
for k,v in pairs(ko) do
|
local news=true
|
||||||
kills[k]=v
|
while news do
|
||||||
local x,y=unpack(v)
|
news=false
|
||||||
local c=board[v[1]][v[2]]
|
local ko
|
||||||
if isgem(c) and c.super=="lines" then
|
kills,ko={},kills
|
||||||
for x=1,bw do
|
for k,v in pairs(ko) do
|
||||||
local i=pti(x,y)
|
kills[k]=v
|
||||||
if board[x][y] then
|
if not seen[k] then
|
||||||
kills[i]=kills[i] or {x,y}
|
local x,y=unpack(v)
|
||||||
|
local c=board[v[1]][v[2]]
|
||||||
|
seen[k]=true
|
||||||
|
if isgem(c) and c.super=="lines" then
|
||||||
|
for x=1,bw do
|
||||||
|
local i=pti(x,y)
|
||||||
|
if board[x][y] and not kills[i] then
|
||||||
|
news=true
|
||||||
|
kills[i]={x,y}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for y=1,bh do
|
||||||
|
local i=pti(x,y)
|
||||||
|
if board[x][y] and not kills[i] then
|
||||||
|
news=true
|
||||||
|
kills[i]={x,y}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if isgem(c) then
|
||||||
|
local mks={}
|
||||||
|
megascan(x,y,c,mks)
|
||||||
|
for k,v in pairs(mks) do
|
||||||
|
if not kills[k] then
|
||||||
|
kills[k]=v
|
||||||
|
news=true
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
for y=1,bh do
|
|
||||||
local i=pti(x,y)
|
|
||||||
if board[x][y] then
|
|
||||||
kills[i]=kills[i] or {x,y}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if isgem(c) then
|
|
||||||
megascan(c,kills)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
for k,v in pairs(kills) do
|
for k,v in pairs(kills) do
|
||||||
|
@ -488,6 +523,7 @@ local function fillboard()
|
||||||
score=0
|
score=0
|
||||||
bat=1
|
bat=1
|
||||||
gemrng=love.math.newRandomGenerator(991)
|
gemrng=love.math.newRandomGenerator(991)
|
||||||
|
tochar=bw*bh+gemrng:random(bw)
|
||||||
for x=1,bw do
|
for x=1,bw do
|
||||||
board[x]={}
|
board[x]={}
|
||||||
for y=1,bh do
|
for y=1,bh do
|
||||||
|
@ -513,6 +549,7 @@ local function fillboard()
|
||||||
dropall(-bh)
|
dropall(-bh)
|
||||||
end
|
end
|
||||||
local dbg=false
|
local dbg=false
|
||||||
|
local playdbg=false
|
||||||
|
|
||||||
function love.load()
|
function love.load()
|
||||||
fillboard()
|
fillboard()
|
||||||
|
@ -557,8 +594,9 @@ function love.mousereleased(x,y,b)
|
||||||
if ix and px and (ix~=px or iy~=py) then
|
if ix and px and (ix~=px or iy~=py) then
|
||||||
board[ix][iy],board[px][py]=
|
board[ix][iy],board[px][py]=
|
||||||
board[px][py],board[ix][iy]
|
board[px][py],board[ix][iy]
|
||||||
local kills=check(ix,iy,check(px,py,megascan(board[ix][iy],megascan(board[px][py]))))
|
local kills=check(ix,iy,check(px,py))
|
||||||
if kills then
|
if kills and board[ix][iy] and board[px][py] then
|
||||||
|
megascan(ix,iy,board[ix][iy],megascan(px,py,board[px][py],kills))
|
||||||
local ii,pi=pti(ix,iy),pti(px,py)
|
local ii,pi=pti(ix,iy),pti(px,py)
|
||||||
local ania,anib=anims[ii],anims[pi]
|
local ania,anib=anims[ii],anims[pi]
|
||||||
anims[ii],anims[pi]=anib,ania
|
anims[ii],anims[pi]=anib,ania
|
||||||
|
@ -613,19 +651,41 @@ end
|
||||||
local animc=0
|
local animc=0
|
||||||
local entc=0
|
local entc=0
|
||||||
local boomc=0
|
local boomc=0
|
||||||
local slow=false
|
local slow=1
|
||||||
local accumdt=0
|
local accumdt=0
|
||||||
local tps=120
|
local tps=120
|
||||||
|
local speeds={1,0.05,10}
|
||||||
|
|
||||||
function love.update(dt)
|
function love.update(dt)
|
||||||
dt=math.min(dt,0.2)*(slow and 0.05 or 1)
|
dt=math.min(dt,0.2)*(speeds[slow])
|
||||||
accumdt=accumdt+dt
|
accumdt=math.min(1,accumdt+dt)
|
||||||
local fcc=0
|
local fcc=0
|
||||||
while accumdt>1/tps do
|
while accumdt>1/tps do
|
||||||
fcc=fcc+1
|
fcc=fcc+1
|
||||||
local dt=1/tps
|
local dt=1/tps
|
||||||
accumdt=accumdt-dt
|
accumdt=accumdt-dt
|
||||||
if fcc>10 then return end
|
if fcc>10 then return end
|
||||||
|
if running and playdbg then
|
||||||
|
for _=1,10 do
|
||||||
|
local ix,iy=math.random(1,bw),math.random(1,bh)
|
||||||
|
local px,py=0,0
|
||||||
|
while px<1 or py<1 or px>bw or py>bh do
|
||||||
|
local ox,oy=unpack(({{1,0},{-1,0},{0,1},{0,-1}})[math.random(1,4)])
|
||||||
|
px,py=ix+ox,iy+oy
|
||||||
|
end
|
||||||
|
board[ix][iy],board[px][py]=
|
||||||
|
board[px][py],board[ix][iy]
|
||||||
|
local kills=check(ix,iy,check(px,py))
|
||||||
|
if kills and board[ix][iy] and board[px][py] then
|
||||||
|
megascan(ix,iy,board[ix][iy],megascan(px,py,board[px][py],kills))
|
||||||
|
killall(kills)
|
||||||
|
break
|
||||||
|
else
|
||||||
|
board[ix][iy],board[px][py]=
|
||||||
|
board[px][py],board[ix][iy]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
if running then
|
if running then
|
||||||
bat=math.max(0,bat-dt*0.015*(math.max(bat,0.0625)^0.5))
|
bat=math.max(0,bat-dt*0.015*(math.max(bat,0.0625)^0.5))
|
||||||
end
|
end
|
||||||
|
@ -806,11 +866,15 @@ function love.keypressed(k)
|
||||||
yls[x]=yl
|
yls[x]=yl
|
||||||
end
|
end
|
||||||
elseif k=="f5" then
|
elseif k=="f5" then
|
||||||
slow=not slow
|
slow=slow%3+1
|
||||||
elseif k=="f7" then
|
elseif k=="f7" then
|
||||||
falltest=not falltest
|
falltest=not falltest
|
||||||
elseif k=="f8" then
|
elseif k=="f8" then
|
||||||
bat=bat*0.25
|
bat=bat*0.25
|
||||||
|
elseif k=="f9" then
|
||||||
|
bat=bat*2
|
||||||
|
elseif k=="f10" then
|
||||||
|
playdbg=not playdbg
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -818,9 +882,10 @@ function love.draw()
|
||||||
if dbg then
|
if dbg then
|
||||||
g.push("all")
|
g.push("all")
|
||||||
g.scale(2,2)
|
g.scale(2,2)
|
||||||
love.graphics.print(("FPS: %i; dt: %.2f; anims: %i; fallings: %i; booms: %i"):format(
|
love.graphics.print(("FPS: %i; dt: %.2f; speed: %f; anims: %i; fallings: %i; booms: %i"):format(
|
||||||
love.timer.getFPS(),
|
love.timer.getFPS(),
|
||||||
math.floor(love.timer.getDelta()*100000)/100,
|
math.floor(love.timer.getDelta()*100000)/100,
|
||||||
|
speeds[slow],
|
||||||
animc, entc, boomc
|
animc, entc, boomc
|
||||||
))
|
))
|
||||||
g.pop()
|
g.pop()
|
||||||
|
|
Loading…
Reference in a new issue