From 24dbdb9a57d73ac12d5dc6a0b14778759f1c2d83 Mon Sep 17 00:00:00 2001 From: Nyeogmi Date: Wed, 7 Feb 2024 21:34:11 -0800 Subject: [PATCH] Revert "Try another smart dealer implementation" This reverts commit e4e6887e64d97da9211fef7d64e086cc723a267d. --- board.lua | 56 +++++++++++++++++++++++++++++++++++++++++++++-------- dealer.lua | 37 ++++++++++++++++++----------------- main.p8 | 1 - ruleset.lua | 13 ++++--------- 4 files changed, 71 insertions(+), 36 deletions(-) diff --git a/board.lua b/board.lua index 76a9343..4090497 100644 --- a/board.lua +++ b/board.lua @@ -44,23 +44,63 @@ function board:init(ruleset) end function board:deal() - local deal=deal(self.ruleset) local n_usable_slots=self.ruleset.n_slots - 1 - + -- first, pull the aces + local available={} + for card=1,#self.ruleset.deck.cards do + available[card]=true + end for i=1,#self.ruleset.deck.aces do local well=self.wells[i] local ace=self.ruleset.deck.aces[i] well:add(ace) -- temporarily, so would_accept will work self:animate_move_ace_to_well(ace,i) + available[ace]=false end - local rows=#deal[1] - for y=1,rows do - for x=1,#deal do - local outx=x - if (x>n_usable_slots\2) outx+=1 - self:animate_move_new_card_to_slot(deal[x][y],outx) + local eligible_bottom_row={} + for card=1,#self.ruleset.deck.cards do + local skip + if not available[card] then + skip=true + else + for w in all(self.wells) do + if (w:would_accept(card)) skip=true break + end end + if (not skip) add(eligible_bottom_row,card) + end + + -- let the animation install the aces for real + for w in all(self.wells) do + w:clear() + end + + function i_to_slot(i) + if (iodds) acceptor=nil + local a=acceptor or start_point or source if (a) add(slots[a],card) return true end @@ -68,18 +65,22 @@ function deal(ruleset) if w <= ruleset.n_suits then local c=pop(slots[0]) assert(c!=0) - if (c and not find_home(false,c,nil,0)) return + if (c and not find_home(1.0,c,nil,0)) return exclude = 0 end local card=pop(wells[w]) assert(card!=0) - if (not find_home(true,card,nil,exclude)) return + if (not find_home(1.0,card,nil,exclude)) return - local src=flr(rnd()*(#slots+1)) - local card=pop_accepted_card(slots[src]) - if card then - if (not find_home(false,card,src,nil)) return + local n_moves=48 + for i=1,n_moves do + local src=flr(rnd()*(#slots+1)) + local card=pop_accepted_card(slots[src]) + if card then + local odds=0.0 + if (not find_home(odds,card,src,nil)) return + end end end @@ -88,7 +89,7 @@ function deal(ruleset) for i=0,#slots do while #slots[i]>max_height[i] do local card=pop(slots[i]) - if (not find_home(false,card,nil,nil,true)) return + if (not find_home(0.0,card,nil,nil)) return end end diff --git a/main.p8 b/main.p8 index a714863..be20ccb 100644 --- a/main.p8 +++ b/main.p8 @@ -9,7 +9,6 @@ __lua__ #include layout.lua #include ruleset.lua #include progression.lua -#include dealer.lua #include main.lua __gfx__ 00000000070000007770000000700000007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/ruleset.lua b/ruleset.lua index cfd041f..59903ea 100644 --- a/ruleset.lua +++ b/ruleset.lua @@ -32,19 +32,17 @@ function ruleset:init( local usable_slots = n_slots - 1 assert(usable_slots%2==0) - local n_total_cards = n_arcana + n_suits * n_cards_per_suit + local total_n_cards = n_arcana + n_suits * n_cards_per_suit -- aces aren't usable because they are initially placed in the wells - local n_usable_cards = n_total_cards - self.n_suits + local usable_n_cards = total_n_cards - self.n_suits -- deal has to be symmetrical - assert(n_usable_cards % usable_slots == 0, usable_slots-(n_usable_cards%usable_slots)) + assert(usable_n_cards % usable_slots == 0, usable_slots-(usable_n_cards%usable_slots)) -- these cards would be instantly moved to the wells and -- therefore cannot be in the bottom row local instantly_placed_cards = self.n_suits + 2 - assert((n_total_cards-instantly_placed_cards)-usable_slots >= 0) - - self.n_usable_cards = n_usable_cards + assert((total_n_cards-instantly_placed_cards)-usable_slots >= 0) self:generate_deck() self:generate_layouts() @@ -57,7 +55,6 @@ function ruleset:generate_deck() aces={}, suits={}, cards={}, - instantly_accepted={}, rank_name="a23456789tjqk" } self.deck=deck @@ -70,14 +67,12 @@ function ruleset:generate_deck() for rank=1,self.n_cards_per_suit do add(deck.cards,{suit=suit,rank=rank}) if (rank==1) add(deck.aces,#deck.cards) - if (rank==2) deck.instantly_accepted[#deck.cards]=true end end -- arcana for rank=0,self.n_arcana-1 do add(deck.cards,{suit="a",rank=rank}) - if (rank==0 or rank==self.n_arcana-1) deck.instantly_accepted[#deck.cards]=true end function deck:draw_card(x,y,c,shadow)