49 lines
1.0 KiB
Lua
49 lines
1.0 KiB
Lua
local Randomizer = require 'tetris.randomizers.randomizer'
|
|
|
|
local MasterOfBags = Randomizer:extend()
|
|
|
|
function MasterOfBags:initialize()
|
|
self.history = {"S", "Z", "S", "Z"}
|
|
self.first = true
|
|
self.bag={}
|
|
for x=1,28 do
|
|
self.bag[x]=({"I", "J", "L", "O", "S", "T", "Z"})[(x-1)%7+1]
|
|
end
|
|
end
|
|
|
|
function MasterOfBags:generatePiece()
|
|
local piece=math.random(({[true]=#self.bag,[false]=#self.bag+1})[#self.bag>14])
|
|
if piece>#self.bag then
|
|
self.bag={}
|
|
for x=1,28 do
|
|
self.bag[x]=({"I", "J", "L", "O", "S", "T", "Z"})[(x-1)%7+1]
|
|
end
|
|
piece=math.random(#self.bag)
|
|
end
|
|
for i = 1, 6 do
|
|
if not inHistory(self.bag[piece], self.history) then
|
|
break
|
|
end
|
|
piece=math.random(#self.bag)
|
|
end
|
|
self:updateHistory(self.bag[piece])
|
|
|
|
return table.remove(self.bag, piece)
|
|
end
|
|
|
|
function MasterOfBags:updateHistory(shape)
|
|
table.remove(self.history, 1)
|
|
table.insert(self.history, shape)
|
|
end
|
|
|
|
function inHistory(piece, history)
|
|
for idx, entry in pairs(history) do
|
|
if entry == piece then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
return MasterOfBags
|