diff --git a/parts/scenes/app_2048.lua b/parts/scenes/app_2048.lua index 0e092320..b80d682d 100644 --- a/parts/scenes/app_2048.lua +++ b/parts/scenes/app_2048.lua @@ -128,33 +128,34 @@ local function squash(L) local moved=false while true do p2=p1+1 - while not L[p2]do + while not L[p2]and p2<5 do p2=p2+1 - if p2==5 then - p1=p1+1 - if p1==4 then - return L[1],L[2],L[3],L[4],moved - end - break - end end - if not L[p1]then--air←2 - L[p1],L[p2]=L[p2],false - moved=true - elseif L[p1]==L[p2]then--2←2 - L[p1],L[p2]=L[p1]+1,false - if L[p1]>maxTile then - freshMaxTile() + if p2==5 then + if p1==4 then + return L[1],L[2],L[3],L[4],moved + else + p1=p1+1 + end + else + if not L[p1]then--air←2 + L[p1],L[p2]=L[p2],false + moved=true + elseif L[p1]==L[p2]then--2←2 + L[p1],L[p2]=L[p1]+1,false + if L[p1]>maxTile then + freshMaxTile() + end + L[p2]=false + p1=p1+1 + moved=true + elseif p1+1~=p2 then--2←4 + L[p1+1],L[p2]=L[p2],false + p1=p1+1 + moved=true + else--2,4 + p1=p1+1 end - L[p2]=false - p1=p1+1 - moved=true - elseif p1+1~=p2 then--2←4 - L[p1+1],L[p2]=L[p2],false - p1=p1+1 - moved=true - else--2,4 - p1=p1+1 end end end