整理玩家类代码,再分离出一个方法
This commit is contained in:
@@ -622,37 +622,36 @@ function Player:lock()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Player:checkClear(field,start,height,CB,CX)
|
function Player:checkClear(field,start,height,CB,CX)
|
||||||
local cc=0
|
local cc,gbcc=0,0
|
||||||
if self.gameEnv.fillClear then
|
for i=1,height do
|
||||||
for i=1,height do
|
local h=start+i-2
|
||||||
local h=start+i-2
|
|
||||||
|
|
||||||
--Bomb trigger (optional, must with CB)
|
--Bomb trigger (optional, must with CB)
|
||||||
if CB and h>0 and field[h]and self.clearedRow[cc]~=h then
|
if CB and h>0 and field[h]and self.clearedRow[cc]~=h then
|
||||||
for x=1,#CB[1]do
|
for x=1,#CB[1]do
|
||||||
if CB[i][x]and field[h][CX+x-1]==19 then
|
if CB[i][x]and field[h][CX+x-1]==19 then
|
||||||
cc=cc+1
|
cc=cc+1
|
||||||
self.clearingRow[cc]=h-cc+1
|
self.clearingRow[cc]=h-cc+1
|
||||||
self.clearedRow[cc]=h
|
self.clearedRow[cc]=h
|
||||||
break
|
break
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
h=h+1
|
|
||||||
--Row filled
|
|
||||||
for x=1,10 do
|
|
||||||
if field[h][x]<=0 then
|
|
||||||
goto CONTINUE_notFull
|
|
||||||
end
|
|
||||||
end
|
|
||||||
cc=cc+1
|
|
||||||
ins(self.clearingRow,h-cc+1)
|
|
||||||
ins(self.clearedRow,h)
|
|
||||||
::CONTINUE_notFull::
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
h=h+1
|
||||||
|
--Row filled
|
||||||
|
for x=1,10 do
|
||||||
|
if field[h][x]<=0 then
|
||||||
|
goto CONTINUE_notFull
|
||||||
|
end
|
||||||
|
end
|
||||||
|
cc=cc+1
|
||||||
|
if field[h].garbage then gbcc=gbcc+1 end
|
||||||
|
ins(self.clearingRow,h-cc+1)
|
||||||
|
ins(self.clearedRow,h)
|
||||||
|
::CONTINUE_notFull::
|
||||||
end
|
end
|
||||||
return cc
|
return cc,gbcc
|
||||||
end
|
end
|
||||||
function Player:roofCheck()
|
function Player:roofCheck()
|
||||||
local CB=self.cur.bk
|
local CB=self.cur.bk
|
||||||
@@ -673,14 +672,30 @@ function Player:roofCheck()
|
|||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
function Player:removeClearedLines()
|
||||||
|
for i=#self.clearedRow,1,-1 do
|
||||||
|
local h=self.clearedRow[i]
|
||||||
|
if self.field[h].garbage then
|
||||||
|
self.garbageBeneath=self.garbageBeneath-1
|
||||||
|
end
|
||||||
|
FREEROW.discard(rem(self.field,h))
|
||||||
|
FREEROW.discard(rem(self.visTime,h))
|
||||||
|
end
|
||||||
|
end
|
||||||
function Player:removeTopClearingFX()
|
function Player:removeTopClearingFX()
|
||||||
for i=#self.clearingRow,1,-1 do
|
for i=#self.clearingRow,1,-1 do
|
||||||
if self.clearingRow[i]>#self.field then
|
if self.clearingRow[i]>#self.field then
|
||||||
rem(self.clearingRow)
|
rem(self.clearingRow)
|
||||||
else
|
else
|
||||||
return
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if self.clearingRow[1]then
|
||||||
|
self.falling=self.gameEnv.fall
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
return true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
function Player:checkMission(piece,mission)
|
function Player:checkMission(piece,mission)
|
||||||
if mission<5 then
|
if mission<5 then
|
||||||
@@ -1225,7 +1240,10 @@ do--Player.drop(self)--Place piece
|
|||||||
end
|
end
|
||||||
|
|
||||||
--Check line clear
|
--Check line clear
|
||||||
cc=cc+self:checkClear(self.field,CY,#CB,CB,CX)
|
if self.gameEnv.fillClear then
|
||||||
|
local _cc,_gbcc=self:checkClear(self.field,CY,#CB,CB,CX)
|
||||||
|
cc,gbcc=cc+_cc,gbcc+_gbcc
|
||||||
|
end
|
||||||
|
|
||||||
--Create clearing FX
|
--Create clearing FX
|
||||||
for i=1,cc do
|
for i=1,cc do
|
||||||
@@ -1257,25 +1275,10 @@ do--Player.drop(self)--Place piece
|
|||||||
local finesse=CY>ENV.fieldH-2 or self:roofCheck()
|
local finesse=CY>ENV.fieldH-2 or self:roofCheck()
|
||||||
|
|
||||||
--Remove rows need to be cleared
|
--Remove rows need to be cleared
|
||||||
if cc>0 then
|
self:removeClearedLines()
|
||||||
for i=cc,1,-1 do
|
|
||||||
_=self.clearedRow[i]
|
|
||||||
if self.field[_].garbage then
|
|
||||||
self.garbageBeneath=self.garbageBeneath-1
|
|
||||||
gbcc=gbcc+1
|
|
||||||
end
|
|
||||||
FREEROW.discard(rem(self.field,_))
|
|
||||||
FREEROW.discard(rem(self.visTime,_))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
--Cancel top clearing FX
|
--Cancel top clearing FX & get clear flag
|
||||||
self:removeTopClearingFX()
|
clear=self:removeTopClearingFX()
|
||||||
if self.clearingRow[1]then
|
|
||||||
self.falling=ENV.fall
|
|
||||||
else
|
|
||||||
clear=true
|
|
||||||
end
|
|
||||||
|
|
||||||
--Finesse check (control)
|
--Finesse check (control)
|
||||||
local finePts
|
local finePts
|
||||||
|
|||||||
Reference in New Issue
Block a user