commit 948afed69f8df10b258fa65d8a8634bff9720a79
parent ea132a9e82f14acde7e63ebab3548e61b4703c9b
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Tue, 5 Dec 2023 15:11:01 -0500
check bets / auto fold...
Diffstat:
1 file changed, 67 insertions(+), 32 deletions(-)
diff --git a/pkg/web/handlers/poker.go b/pkg/web/handlers/poker.go
@@ -142,42 +142,77 @@ func (g *PokerGame) Deal(roomID string) {
go func() {
waitPlayersActionFn := func() {
- for i, p := range g.Ongoing.Players {
- if p == nil {
- continue
- }
- player := g.Ongoing.GetPlayer(p.Username)
- if player.Folded {
- continue
- }
- evt := PokerWaitTurnEvent{Idx: i}
- PokerPubSub.Pub(roomTopic, evt)
- g.Ongoing.WaitTurnEvent = evt
- fmt.Println("WAIT FOR ACTION", p)
- waitCh := time.After(MaxUserCountdown * time.Second)
- LOOP:
- for {
- var evt PlayerEvent
- select {
- case evt = <-g.PlayersEventCh:
- case <-waitCh:
- fmt.Println("WAIT TOO LONG, either auto check, or fold")
- break LOOP
+ for {
+ minBet := 0
+ for i, p := range g.Ongoing.Players {
+ if p == nil {
+ continue
}
- if evt.Player != p.Username {
+ player := g.Ongoing.GetPlayer(p.Username)
+ if player.Folded {
continue
}
- fmt.Println("GOT FROM", evt.Player, evt)
- if evt.Fold {
- player.Folded = true
- PokerPubSub.Pub(roomTopic, PlayerFoldEvent{Card1Idx: player.Cards[0].Idx, Card2Idx: player.Cards[1].Idx})
- } else if evt.Check {
- } else if evt.Call {
- } else if evt.Bet > 0 {
- g.Ongoing.Players[i].Bet += evt.Bet
- g.Ongoing.Players[i].Cash -= evt.Bet
- PokerPubSub.Pub(roomTopic, PlayerBetEvent{PlayerIdx: i, Player: p.Username, Bet: evt.Bet, TotalBet: g.Ongoing.Players[i].Bet, Cash: g.Ongoing.Players[i].Cash})
+ evt := PokerWaitTurnEvent{Idx: i}
+ PokerPubSub.Pub(roomTopic, evt)
+ g.Ongoing.WaitTurnEvent = evt
+ fmt.Println("WAIT FOR ACTION", p)
+ waitCh := time.After(MaxUserCountdown * time.Second)
+ LOOP:
+ for {
+ var evt PlayerEvent
+ select {
+ case evt = <-g.PlayersEventCh:
+ case <-waitCh:
+ fmt.Println("WAIT TOO LONG, either auto check, or fold")
+ if p.Bet < minBet {
+ player.Folded = true
+ PokerPubSub.Pub(roomTopic, PlayerFoldEvent{Card1Idx: player.Cards[0].Idx, Card2Idx: player.Cards[1].Idx})
+ }
+ break LOOP
+ }
+ if evt.Player != p.Username {
+ continue
+ }
+ fmt.Println("GOT FROM", evt.Player, evt)
+ if evt.Fold {
+ player.Folded = true
+ PokerPubSub.Pub(roomTopic, PlayerFoldEvent{Card1Idx: player.Cards[0].Idx, Card2Idx: player.Cards[1].Idx})
+ } else if evt.Check {
+ } else if evt.Call {
+ } else if evt.Bet > 0 {
+ if evt.Bet < minBet {
+ fmt.Println("BET TOO LOW", evt.Bet, minBet)
+ continue
+ }
+ minBet = evt.Bet
+ g.Ongoing.Players[i].Bet += evt.Bet
+ g.Ongoing.Players[i].Cash -= evt.Bet
+ PokerPubSub.Pub(roomTopic, PlayerBetEvent{PlayerIdx: i, Player: p.Username, Bet: evt.Bet, TotalBet: g.Ongoing.Players[i].Bet, Cash: g.Ongoing.Players[i].Cash})
+ }
+ break
+ }
+ }
+
+ // All settle when all players have the same bet amount
+ allSettled := true
+ b := -1
+ for _, p := range g.Ongoing.Players {
+ if p != nil {
+ if p.Folded {
+ continue
+ }
+ if b == -1 {
+ b = p.Bet
+ } else {
+ if p.Bet != b {
+ allSettled = false
+ break
+ }
+ }
}
+ }
+
+ if allSettled {
break
}
}