package casino import "fmt" type GameName string const ( GameSlots GameName = "slots" ) type TableConfig struct { ID string `yaml:"id"` Game GameName `yaml:"game"` MaxPlayers int `yaml:"max_players,omitempty"` BettingTicks int `yaml:"betting_ticks,omitempty"` MinBet int `yaml:"min_bet,omitempty"` MaxBet int `yaml:"max_bet,omitempty"` } type MachineConfig struct { ID string `yaml:"id"` Game GameName `yaml:"game"` Variant string `yaml:"variant,omitempty"` MinBet int `yaml:"min_bet,omitempty"` MaxBet int `yaml:"max_bet,omitempty"` SpinTicks int `yaml:"spin_ticks,omitempty"` Payout float64 `yaml:"payout,omitempty"` } func (c MachineConfig) Normalize() MachineConfig { if c.MinBet <= 0 { c.MinBet = 1 } if c.MaxBet <= 0 { c.MaxBet = int(^uint(0) >> 1) } if c.SpinTicks <= 0 { c.SpinTicks = 2 } if c.Variant == "" { c.Variant = "huff_and_even_more_puff" } if c.Payout <= 0 { c.Payout = 0.97 } return c } func (c TableConfig) Normalize() TableConfig { if c.MaxPlayers <= 0 { c.MaxPlayers = 8 } if c.BettingTicks <= 0 { c.BettingTicks = 20 } if c.MinBet <= 0 { c.MinBet = 1 } if c.MaxBet <= 0 { c.MaxBet = int(^uint(0) >> 1) } return c } type Wager struct { Total int Chips int Credits int } type Wallet interface { Wager(amount int) (Wager, bool) PayCredits(amount int) } type EventType string const ( EventJoined EventType = "joined" EventBetting EventType = "betting" EventBetPlaced EventType = "bet_placed" EventRoundStarted EventType = "round_started" EventResult EventType = "result" EventPayout EventType = "payout" EventTimedOut EventType = "timed_out" EventLeft EventType = "left" EventClosed EventType = "closed" ) type Event struct { RoomID int TableID string Type EventType Player string Message string PrivateMessage string PrivateTo string Color string Public bool Slot *SlotSnapshot } type SlotSnapshot struct { Grid [3][5]string StoppedReels int } func (e Event) String() string { if e.Message != "" { return e.Message } return fmt.Sprintf("%s at %s", e.Type, e.TableID) } type Participant struct { Name string Connected bool HasBet bool Wager Wager Wallet Wallet }