45 lines
775 B
Lua
45 lines
775 B
Lua
function deal(ruleset,seed)
|
|
local n_usable_cards=ruleset.n_usable_cards
|
|
local n_usable_slots=ruleset.n_slots-1
|
|
local tower_height = n_usable_cards\n_usable_slots
|
|
|
|
local r=rnd()
|
|
|
|
--
|
|
srand(seed)
|
|
local slots={}
|
|
for i=1,n_usable_slots do
|
|
slots[i]={}
|
|
end
|
|
|
|
local cards={}
|
|
for i=1,#ruleset.deck.cards do
|
|
add(cards,i)
|
|
end
|
|
for a in all(ruleset.deck.aces) do
|
|
del(cards,a)
|
|
end
|
|
|
|
assert(#cards==n_usable_cards)
|
|
|
|
local slot=0
|
|
while #cards>0 do
|
|
local arr=slots[1+(slot%#slots)]
|
|
local i=flr(rnd(#cards))
|
|
local card=cards[i+1]
|
|
if (ruleset.deck.instantly_accepted[card] and #arr==0) then
|
|
-- do not use
|
|
else
|
|
add(arr,card,1)
|
|
deli(cards,i+1)
|
|
slot+=1
|
|
end
|
|
end
|
|
|
|
for i=1,#slots do
|
|
assert(#slots[i]==tower_height)
|
|
end
|
|
|
|
srand(r)
|
|
return slots
|
|
end |