mirror of
https://github.com/SashLilac/cambridge.git
synced 2024-11-22 17:59:01 -06:00
Fixed randomisers in A1-A4 modes:
- History 4-rolls, history 6-rolls and history 6-rolls 35-bag no longer deal S, Z or O as their first piece - Added a 7-bag randomiser with the same behaviour (bag7noSZOstart) - Tweaked the "35-bag" part of the history 6-rolls 35-bag randomiser to work closer to what it's supposed to be - Switched Marathon AX4's randomiser from history 6-rolls to 7-bag no SZO start
This commit is contained in:
parent
6b624b9853
commit
1366451a3d
@ -3,7 +3,7 @@ require 'funcs'
|
|||||||
local GameMode = require 'tetris.modes.gamemode'
|
local GameMode = require 'tetris.modes.gamemode'
|
||||||
local Piece = require 'tetris.components.piece'
|
local Piece = require 'tetris.components.piece'
|
||||||
|
|
||||||
local History6RollsRandomizer = require 'tetris.randomizers.history_6rolls'
|
local Bag7NoSZOStartRandomizer = require 'tetris.randomizers.bag7noSZOstart'
|
||||||
|
|
||||||
local MarathonAX4Game = GameMode:extend()
|
local MarathonAX4Game = GameMode:extend()
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ function MarathonAX4Game:new()
|
|||||||
MarathonAX4Game.super:new()
|
MarathonAX4Game.super:new()
|
||||||
|
|
||||||
self.roll_frames = 0
|
self.roll_frames = 0
|
||||||
self.randomizer = History6RollsRandomizer()
|
self.randomizer = Bag7NoSZOStartRandomizer()
|
||||||
|
|
||||||
self.section_time_limit = 3600
|
self.section_time_limit = 3600
|
||||||
self.section_start_time = 0
|
self.section_start_time = 0
|
||||||
|
31
tetris/randomizers/bag7noSZOstart.lua
Normal file
31
tetris/randomizers/bag7noSZOstart.lua
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
local Randomizer = require 'tetris.randomizers.randomizer'
|
||||||
|
|
||||||
|
local Bag7NoSZOStartRandomizer = Randomizer:extend()
|
||||||
|
|
||||||
|
function Bag7NoSZOStartRandomizer:shuffleBag()
|
||||||
|
local b = self.bag
|
||||||
|
local ln = #b
|
||||||
|
for i = 1, ln do
|
||||||
|
local j = math.random(i, ln)
|
||||||
|
b[i], b[j] = b[j], b[i]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function isnotSZO(x) return not(x == "S" or x == "Z" or x == "O") end
|
||||||
|
|
||||||
|
function Bag7NoSZOStartRandomizer:initialize()
|
||||||
|
self.bag = {"I", "J", "L", "O", "S", "T", "Z"}
|
||||||
|
repeat
|
||||||
|
self:shuffleBag()
|
||||||
|
until isnotSZO(self.bag[7])
|
||||||
|
end
|
||||||
|
|
||||||
|
function Bag7NoSZOStartRandomizer:generatePiece()
|
||||||
|
if #self.bag == 0 then
|
||||||
|
self.bag = {"I", "J", "L", "O", "S", "T", "Z"}
|
||||||
|
self:shuffleBag()
|
||||||
|
end
|
||||||
|
return table.remove(self.bag)
|
||||||
|
end
|
||||||
|
|
||||||
|
return Bag7NoSZOStartRandomizer
|
@ -3,17 +3,23 @@ local Randomizer = require 'tetris.randomizers.randomizer'
|
|||||||
local History4RollsRandomizer = Randomizer:extend()
|
local History4RollsRandomizer = Randomizer:extend()
|
||||||
|
|
||||||
function History4RollsRandomizer:initialize()
|
function History4RollsRandomizer:initialize()
|
||||||
self.history = {"Z", "S", "Z", "S"}
|
self.history = {"Z", "Z", "Z", "Z"}
|
||||||
|
self.first = true
|
||||||
end
|
end
|
||||||
|
|
||||||
function History4RollsRandomizer:generatePiece()
|
function History4RollsRandomizer:generatePiece()
|
||||||
local shapes = {"I", "J", "L", "O", "S", "T", "Z"}
|
if self.first then
|
||||||
for i = 1, 4 do
|
self.first = false
|
||||||
local x = math.random(7)
|
return self:updateHistory(({"L", "J", "I", "T"})[math.random(4)])
|
||||||
if not inHistory(shapes[x], self.history) or i == 4 then
|
else
|
||||||
return self:updateHistory(shapes[x])
|
local shapes = {"I", "J", "L", "O", "S", "T", "Z"}
|
||||||
end
|
for i = 1, 4 do
|
||||||
end
|
local x = math.random(7)
|
||||||
|
if not inHistory(shapes[x], self.history) or i == 4 then
|
||||||
|
return self:updateHistory(shapes[x])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function History4RollsRandomizer:updateHistory(shape)
|
function History4RollsRandomizer:updateHistory(shape)
|
||||||
|
@ -4,16 +4,22 @@ local History6RollsRandomizer = Randomizer:extend()
|
|||||||
|
|
||||||
function History6RollsRandomizer:initialize()
|
function History6RollsRandomizer:initialize()
|
||||||
self.history = {"Z", "S", "Z", "S"}
|
self.history = {"Z", "S", "Z", "S"}
|
||||||
|
self.first = true
|
||||||
end
|
end
|
||||||
|
|
||||||
function History6RollsRandomizer:generatePiece()
|
function History6RollsRandomizer:generatePiece()
|
||||||
local shapes = {"I", "J", "L", "O", "S", "T", "Z"}
|
if self.first then
|
||||||
for i = 1, 6 do
|
self.first = false
|
||||||
local x = math.random(7)
|
return self:updateHistory(({"L", "J", "I", "T"})[math.random(4)])
|
||||||
if not inHistory(shapes[x], self.history) or i == 6 then
|
else
|
||||||
return self:updateHistory(shapes[x])
|
local shapes = {"I", "J", "L", "O", "S", "T", "Z"}
|
||||||
end
|
for i = 1, 6 do
|
||||||
end
|
local x = math.random(7)
|
||||||
|
if not inHistory(shapes[x], self.history) or i == 6 then
|
||||||
|
return self:updateHistory(shapes[x])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function History6RollsRandomizer:updateHistory(shape)
|
function History6RollsRandomizer:updateHistory(shape)
|
||||||
|
@ -1,38 +1,70 @@
|
|||||||
local Randomizer = require 'tetris.randomizers.randomizer'
|
local Randomizer = require 'tetris.randomizers.randomizer'
|
||||||
|
|
||||||
local History6RollsRandomizer = Randomizer:extend()
|
local History6Rolls35PoolRandomizer = Randomizer:extend()
|
||||||
|
|
||||||
function History6RollsRandomizer:initialize()
|
function History6Rolls35PoolRandomizer:initialize()
|
||||||
|
self.first = true
|
||||||
self.history = {"Z", "S", "Z", "S"}
|
self.history = {"Z", "S", "Z", "S"}
|
||||||
self.bag_counts = {
|
self.pool = {
|
||||||
I = 5, J = 5, L = 5, O = 5, S = 3, T = 5, Z = 3
|
"I", "I", "I", "I", "I",
|
||||||
|
"T", "T", "T", "T", "T",
|
||||||
|
"L", "L", "L", "L", "L",
|
||||||
|
"J", "J", "J", "J", "J",
|
||||||
|
"S", "S", "S", "S", "S",
|
||||||
|
"Z", "Z", "Z", "Z", "Z",
|
||||||
|
"O", "O", "O", "O", "O",
|
||||||
}
|
}
|
||||||
|
self.droughts = {
|
||||||
|
I = 0,
|
||||||
|
T = 0,
|
||||||
|
L = 0,
|
||||||
|
J = 0,
|
||||||
|
S = 0,
|
||||||
|
Z = 0,
|
||||||
|
O = 0,
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
function History6RollsRandomizer:getBagPiece(n)
|
function History6Rolls35PoolRandomizer:generatePiece()
|
||||||
for shape, count in pairs(self.bag_counts) do
|
local index, x
|
||||||
n = n - count
|
if self.first then
|
||||||
if n <= 0 then
|
local prevent = {"S", "Z", "O"}
|
||||||
return shape
|
repeat
|
||||||
end
|
index = math.random(#self.pool)
|
||||||
end
|
x = self.pool[index]
|
||||||
|
until not inHistory(x, prevent)
|
||||||
|
self.first = false
|
||||||
|
else
|
||||||
|
for i = 1, 6 do
|
||||||
|
index = math.random(#self.pool)
|
||||||
|
x = self.pool[index]
|
||||||
|
if not inHistory(x, self.history) or i == 6 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
self.pool[index] = self:updateHistory(x)
|
||||||
|
return x
|
||||||
end
|
end
|
||||||
|
|
||||||
function History6RollsRandomizer:generatePiece()
|
function History6Rolls35PoolRandomizer:updateHistory(shape)
|
||||||
for i = 1, 6 do
|
table.remove(self.history, 1)
|
||||||
local x = self:getBagPiece(math.random(31))
|
|
||||||
if not inHistory(x, self.history) or i == 6 then
|
|
||||||
return self:updateHistory(x)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function History6RollsRandomizer:updateHistory(shape)
|
|
||||||
self.bag_counts[shape] = self.bag_counts[shape] - 1
|
|
||||||
local replaced_piece = table.remove(self.history, 1)
|
|
||||||
table.insert(self.history, shape)
|
table.insert(self.history, shape)
|
||||||
self.bag_counts[replaced_piece] = self.bag_counts[replaced_piece] + 1
|
|
||||||
return shape
|
local highdrought
|
||||||
|
local highdroughtcount = 0
|
||||||
|
for k, v in pairs(self.droughts) do
|
||||||
|
if k == shape then
|
||||||
|
self.droughts[k] = 0
|
||||||
|
else
|
||||||
|
self.droughts[k] = v + 1
|
||||||
|
if v >= highdroughtcount then
|
||||||
|
highdrought = k
|
||||||
|
highdroughtcount = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return highdrought
|
||||||
end
|
end
|
||||||
|
|
||||||
function inHistory(piece, history)
|
function inHistory(piece, history)
|
||||||
@ -44,4 +76,4 @@ function inHistory(piece, history)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
return History6RollsRandomizer
|
return History6Rolls35PoolRandomizer
|
||||||
|
Loading…
Reference in New Issue
Block a user