小程序Link添加连击和分数系统
This commit is contained in:
@@ -1,9 +1,12 @@
|
|||||||
local ms=love.mouse
|
local ms=love.mouse
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local gc_setColor,gc_rectangle=gc.setColor,gc.rectangle
|
local gc_setColor,gc_rectangle=gc.setColor,gc.rectangle
|
||||||
|
local setFont=setFont
|
||||||
|
|
||||||
local int,rnd,abs=math.floor,math.random,math.abs
|
local int,rnd,abs=math.floor,math.random,math.abs
|
||||||
local max,min=math.max,math.min
|
local max,min=math.max,math.min
|
||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
|
local function sign(a)return a>0 and 1 or a<0 and -1 or 0 end
|
||||||
|
|
||||||
local levels={
|
local levels={
|
||||||
{c=6,r=3,color=3},
|
{c=6,r=3,color=3},
|
||||||
@@ -35,10 +38,11 @@ local colorList={
|
|||||||
COLOR.lF,
|
COLOR.lF,
|
||||||
}
|
}
|
||||||
local sure=0
|
local sure=0
|
||||||
local progress,level
|
|
||||||
local state
|
|
||||||
local invis,fast
|
local invis,fast
|
||||||
|
local state
|
||||||
local startTime,time
|
local startTime,time
|
||||||
|
local progress,level
|
||||||
|
local score,score1,combo,comboTime,maxCombo
|
||||||
local field={
|
local field={
|
||||||
x=160,y=30,
|
x=160,y=30,
|
||||||
w=960,h=640,
|
w=960,h=640,
|
||||||
@@ -80,11 +84,12 @@ local function resetBoard()
|
|||||||
SYSFX.newShade(2,field.x,field.y,field.w,field.h,1,1,1)
|
SYSFX.newShade(2,field.x,field.y,field.w,field.h,1,1,1)
|
||||||
end
|
end
|
||||||
local function newGame()
|
local function newGame()
|
||||||
progress={}
|
|
||||||
state=0
|
state=0
|
||||||
startTime=TIME()
|
|
||||||
time=0
|
|
||||||
level=1
|
level=1
|
||||||
|
progress={}
|
||||||
|
time=0
|
||||||
|
startTime=TIME()
|
||||||
|
score,score1,combo,comboTime,maxCombo=0,0,0,0,0
|
||||||
resetBoard()
|
resetBoard()
|
||||||
end
|
end
|
||||||
local function addPoint(list,x,y)
|
local function addPoint(list,x,y)
|
||||||
@@ -154,10 +159,25 @@ local function touch(x,y)
|
|||||||
local line=checkLink(x,y,selX,selY)
|
local line=checkLink(x,y,selX,selY)
|
||||||
if line then
|
if line then
|
||||||
ins(lines,{time=0,line=line})
|
ins(lines,{time=0,line=line})
|
||||||
|
|
||||||
|
--Clear
|
||||||
field[y][x]=false
|
field[y][x]=false
|
||||||
field[selY][selX]=false
|
field[selY][selX]=false
|
||||||
field.remain=field.remain-1
|
field.remain=field.remain-1
|
||||||
field.full=false
|
field.full=false
|
||||||
|
|
||||||
|
--Score
|
||||||
|
local s=1000+int(combo^.9)
|
||||||
|
score=score+s
|
||||||
|
TEXT.show(s,1205,500,20,'score')
|
||||||
|
|
||||||
|
--Combo
|
||||||
|
if comboTime==0 then combo=0 end
|
||||||
|
comboTime=comboTime*max(1-combo*.001,.95)+max(1-combo*.01,.8)
|
||||||
|
combo=combo+1
|
||||||
|
if combo>maxCombo then maxCombo=combo end
|
||||||
|
|
||||||
|
--Check win
|
||||||
if field.remain==0 then
|
if field.remain==0 then
|
||||||
if levels[level+1]then
|
if levels[level+1]then
|
||||||
ins(progress,("%s - %.3fs"):format(level,TIME()-startTime))
|
ins(progress,("%s - %.3fs"):format(level,TIME()-startTime))
|
||||||
@@ -191,9 +211,6 @@ local scene={}
|
|||||||
function scene.sceneInit()
|
function scene.sceneInit()
|
||||||
invis,fast=false,false
|
invis,fast=false,false
|
||||||
newGame()
|
newGame()
|
||||||
SYSFX.update(1e99)
|
|
||||||
for i=1,#field do TABLE.cut(field[i])end
|
|
||||||
state=2
|
|
||||||
BGM.play('hang out')
|
BGM.play('hang out')
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -247,11 +264,11 @@ end
|
|||||||
function scene.update(dt)
|
function scene.update(dt)
|
||||||
if state==1 then
|
if state==1 then
|
||||||
time=TIME()-startTime
|
time=TIME()-startTime
|
||||||
|
comboTime=max(comboTime-dt,0)
|
||||||
|
score1=score1+sign(score-score1)+int((score-score1)*.1+.5)
|
||||||
end
|
end
|
||||||
|
|
||||||
if sure>0 then
|
if sure>0 then sure=sure-dt end
|
||||||
sure=sure-dt
|
|
||||||
end
|
|
||||||
|
|
||||||
for i=#lines,1,-1 do
|
for i=#lines,1,-1 do
|
||||||
local L=lines[i]
|
local L=lines[i]
|
||||||
@@ -264,6 +281,7 @@ end
|
|||||||
|
|
||||||
function scene.draw()
|
function scene.draw()
|
||||||
gc.push('transform')
|
gc.push('transform')
|
||||||
|
--Camera
|
||||||
gc.translate(field.x,field.y)
|
gc.translate(field.x,field.y)
|
||||||
gc.scale(field.w/field.c,field.h/field.r)
|
gc.scale(field.w/field.c,field.h/field.r)
|
||||||
|
|
||||||
@@ -304,17 +322,51 @@ function scene.draw()
|
|||||||
end
|
end
|
||||||
gc.pop()
|
gc.pop()
|
||||||
|
|
||||||
|
if state==2 then
|
||||||
|
--Draw no-setting area
|
||||||
|
gc.setColor(1,0,0,.3)
|
||||||
|
gc.rectangle('fill',15,295,285,250)
|
||||||
|
|
||||||
|
gc.setColor(.9,.9,0)--win
|
||||||
|
elseif state==1 then
|
||||||
|
gc.setColor(.9,.9,.9)--game
|
||||||
|
elseif state==0 then
|
||||||
|
gc.setColor(.2,.8,.2)--ready
|
||||||
|
end
|
||||||
|
gc.setLineWidth(6)
|
||||||
|
gc.rectangle('line',field.x-5,field.y-5,field.w+10,field.h+10)
|
||||||
|
|
||||||
--Time
|
--Time
|
||||||
setFont(30)
|
setFont(30)gc.setColor(COLOR.Z)
|
||||||
gc.setColor(COLOR.Z)
|
|
||||||
gc.print(("%.3f"):format(time),1140,20)
|
gc.print(("%.3f"):format(time),1140,20)
|
||||||
|
|
||||||
--Progress time list
|
--Progress time list
|
||||||
setFont(15)
|
setFont(15)gc.setColor(.6,.6,.6)
|
||||||
gc.setColor(.6,.6,.6)
|
for i=1,#progress do gc.print(progress[i],1140,40+20*i)end
|
||||||
for i=1,#progress do
|
|
||||||
gc.print(progress[i],1140,35+20*i)
|
--Combo Rectangle
|
||||||
|
if comboTime>0 then
|
||||||
|
local r=36*comboTime^.3
|
||||||
|
gc.setColor(1,1,1,min(.6+comboTime,1)*.25)
|
||||||
|
gc.rectangle('fill',1205-r,400-r,2*r,2*r,2)
|
||||||
|
gc.setColor(1,1,1,min(.6+comboTime,1))
|
||||||
|
gc.setLineWidth(2)
|
||||||
|
gc.rectangle('line',1205-r,400-r,2*r,2*r,4)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Combo Text
|
||||||
|
setFont(60)
|
||||||
|
if combo>50 then
|
||||||
|
gc.setColor(1,.2,.2,min(.3+comboTime*.5,1)*min(comboTime,1))
|
||||||
|
mStr(combo,1205+(rnd()-.5)*combo^.5,360+(rnd()-.5)*combo^.5)
|
||||||
|
end
|
||||||
|
local rg=max(1-combo*.001,.5)
|
||||||
|
gc.setColor(rg,rg,1,min(.4+comboTime,1))
|
||||||
|
mStr(combo,1205,360)
|
||||||
|
|
||||||
|
--Score
|
||||||
|
setFont(25)gc.setColor(COLOR.Z)
|
||||||
|
mStr(score1,1205,500)
|
||||||
end
|
end
|
||||||
|
|
||||||
scene.widgetList={
|
scene.widgetList={
|
||||||
|
|||||||
Reference in New Issue
Block a user