Documentation ¶
Index ¶
- Variables
- func BruteForce3x(ctx context.Context, s Stater, g SlotGame, reels Reels)
- func BruteForce5x(ctx context.Context, s Stater, g SlotGame, reels Reels)
- func MonteCarlo(ctx context.Context, s Stater, g SlotGame, n int)
- type Line
- type Line3x
- type Line5x
- type Lineset
- type Lineset3x
- type Lineset5x
- type Reels
- type Reels3x
- type Reels5x
- type SBL
- type Screen
- type Screen3x3
- func (s *Screen3x3) At(x int, y int) Sym
- func (s *Screen3x3) Dim() (int, int)
- func (s *Screen3x3) FillSym() Sym
- func (s *Screen3x3) Free()
- func (s *Screen3x3) Pos(x int, line Line) Sym
- func (s *Screen3x3) ScatNum(scat Sym) (n int)
- func (s *Screen3x3) ScatNumCont(scat Sym) (n int)
- func (s *Screen3x3) ScatNumOdd(scat Sym) (n int)
- func (s *Screen3x3) ScatPos(scat Sym) Line
- func (s *Screen3x3) ScatPosCont(scat Sym) Line
- func (s *Screen3x3) ScatPosOdd(scat Sym) Line
- func (s *Screen3x3) Set(x int, y int, sym Sym)
- func (s *Screen3x3) SetCol(x int, reel []Sym, pos int)
- func (s *Screen3x3) Spin(reels Reels)
- type Screen5x3
- func (s *Screen5x3) At(x int, y int) Sym
- func (s *Screen5x3) Dim() (int, int)
- func (s *Screen5x3) FillSym() Sym
- func (s *Screen5x3) Free()
- func (s *Screen5x3) Pos(x int, line Line) Sym
- func (s *Screen5x3) ScatNum(scat Sym) (n int)
- func (s *Screen5x3) ScatNumCont(scat Sym) (n int)
- func (s *Screen5x3) ScatNumOdd(scat Sym) (n int)
- func (s *Screen5x3) ScatPos(scat Sym) Line
- func (s *Screen5x3) ScatPosCont(scat Sym) Line
- func (s *Screen5x3) ScatPosOdd(scat Sym) Line
- func (s *Screen5x3) Set(x int, y int, sym Sym)
- func (s *Screen5x3) SetCol(x int, reel []Sym, pos int)
- func (s *Screen5x3) Spin(reels Reels)
- type Screen5x4
- func (s *Screen5x4) At(x int, y int) Sym
- func (s *Screen5x4) Dim() (int, int)
- func (s *Screen5x4) FillSym() Sym
- func (s *Screen5x4) Free()
- func (s *Screen5x4) Pos(x int, line Line) Sym
- func (s *Screen5x4) ScatNum(scat Sym) (n int)
- func (s *Screen5x4) ScatNumCont(scat Sym) (n int)
- func (s *Screen5x4) ScatNumOdd(scat Sym) (n int)
- func (s *Screen5x4) ScatPos(scat Sym) Line
- func (s *Screen5x4) ScatPosCont(scat Sym) Line
- func (s *Screen5x4) ScatPosOdd(scat Sym) Line
- func (s *Screen5x4) Set(x int, y int, sym Sym)
- func (s *Screen5x4) SetCol(x int, reel []Sym, pos int)
- func (s *Screen5x4) Spin(reels Reels)
- type Slot3x3
- func (g *Slot3x3) Apply(screen Screen, sw *WinScan)
- func (g *Slot3x3) FreeSpins() int
- func (g *Slot3x3) GetBet() float64
- func (g *Slot3x3) GetGain() float64
- func (g *Slot3x3) GetLines() SBL
- func (g *Slot3x3) GetReels() string
- func (g *Slot3x3) NewScreen() Screen
- func (g *Slot3x3) SetBet(bet float64) error
- func (g *Slot3x3) SetGain(gain float64) error
- func (g *Slot3x3) Spawn(screen Screen, sw *WinScan)
- type Slot5x3
- func (g *Slot5x3) Apply(screen Screen, sw *WinScan)
- func (g *Slot5x3) FreeSpins() int
- func (g *Slot5x3) GetBet() float64
- func (g *Slot5x3) GetGain() float64
- func (g *Slot5x3) GetLines() SBL
- func (g *Slot5x3) GetReels() string
- func (g *Slot5x3) NewScreen() Screen
- func (g *Slot5x3) SetBet(bet float64) error
- func (g *Slot5x3) SetGain(gain float64) error
- func (g *Slot5x3) Spawn(screen Screen, sw *WinScan)
- type Slot5x4
- func (g *Slot5x4) Apply(screen Screen, sw *WinScan)
- func (g *Slot5x4) FreeSpins() int
- func (g *Slot5x4) GetBet() float64
- func (g *Slot5x4) GetGain() float64
- func (g *Slot5x4) GetLines() SBL
- func (g *Slot5x4) GetReels() string
- func (g *Slot5x4) NewScreen() Screen
- func (g *Slot5x4) SetBet(bet float64) error
- func (g *Slot5x4) SetGain(gain float64) error
- func (g *Slot5x4) Spawn(screen Screen, sw *WinScan)
- type SlotGame
- type Stat
- type Stater
- type Sym
- type WinItem
- type WinScan
Constants ¶
This section is empty.
Variables ¶
var ( ErrBetEmpty = errors.New("bet is empty") ErrNoLineset = errors.New("lines set is empty") ErrLinesetOut = errors.New("lines set is out of range bet lines") ErrNoFeature = errors.New("feature not available") ErrNoReels = errors.New("no reels for given descriptor") )
var BetLinesBetSoft25 = Lineset5x{
{2, 2, 2, 2, 2},
{1, 1, 1, 1, 1},
{3, 3, 3, 3, 3},
{1, 2, 3, 2, 1},
{3, 2, 1, 2, 3},
{1, 1, 2, 1, 1},
{3, 3, 2, 3, 3},
{2, 3, 3, 3, 2},
{2, 1, 1, 1, 2},
{2, 1, 2, 1, 2},
{2, 3, 2, 3, 2},
{1, 2, 1, 2, 1},
{3, 2, 3, 2, 3},
{2, 2, 1, 2, 2},
{2, 2, 3, 2, 2},
{1, 2, 2, 2, 1},
{3, 2, 2, 2, 3},
{1, 2, 3, 3, 3},
{3, 2, 1, 1, 1},
{1, 3, 1, 3, 1},
{3, 1, 3, 1, 3},
{1, 3, 3, 3, 1},
{3, 1, 1, 1, 3},
{1, 1, 3, 1, 1},
{3, 3, 1, 3, 3},
}
BetSoft 25 bet lines
var BetLinesBetSoft30 = Lineset5x{
{2, 2, 2, 2, 2},
{1, 1, 1, 1, 1},
{3, 3, 3, 3, 3},
{1, 2, 3, 2, 1},
{3, 2, 1, 2, 3},
{1, 1, 2, 1, 1},
{3, 3, 2, 3, 3},
{2, 3, 3, 3, 2},
{2, 1, 1, 1, 2},
{2, 1, 2, 1, 2},
{2, 3, 2, 3, 2},
{1, 2, 1, 2, 1},
{3, 2, 3, 2, 3},
{2, 2, 1, 2, 2},
{2, 2, 3, 2, 2},
{1, 2, 2, 2, 1},
{3, 2, 2, 2, 3},
{1, 2, 3, 3, 3},
{3, 2, 1, 1, 1},
{1, 3, 1, 3, 1},
{3, 1, 3, 1, 3},
{1, 3, 3, 3, 1},
{3, 1, 1, 1, 3},
{1, 1, 3, 1, 1},
{3, 3, 1, 3, 3},
{1, 3, 2, 1, 3},
{3, 1, 2, 3, 1},
{2, 1, 3, 2, 3},
{1, 3, 2, 3, 2},
{3, 2, 1, 1, 2},
}
BetSoft 30 bet lines
var BetLinesHot = Lineset3x{
{2, 2, 2},
{1, 1, 1},
{3, 3, 3},
{1, 2, 3},
{3, 2, 1},
}
Ultra Hot 3x3 bet lines
var BetLinesMgj = Lineset5x{
{2, 2, 2, 2, 2},
{1, 1, 1, 1, 1},
{3, 3, 3, 3, 3},
{1, 2, 3, 2, 1},
{3, 2, 1, 2, 3},
{1, 1, 2, 3, 3},
{3, 3, 2, 1, 1},
{2, 1, 2, 3, 2},
{2, 3, 2, 1, 2},
{1, 2, 1, 2, 1},
{3, 2, 3, 2, 3},
{1, 2, 2, 2, 2},
{3, 2, 2, 2, 2},
{2, 2, 1, 1, 1},
{2, 2, 3, 3, 3},
{2, 1, 1, 1, 1},
{2, 3, 3, 3, 3},
{1, 1, 1, 1, 2},
{3, 3, 3, 3, 2},
{3, 3, 2, 3, 3},
{1, 1, 2, 1, 1},
}
Megajack 21 bet lines
var BetLinesNetEnt10 = Lineset5x{
{2, 2, 2, 2, 2},
{1, 1, 1, 1, 1},
{3, 3, 3, 3, 3},
{1, 2, 3, 2, 1},
{3, 2, 1, 2, 3},
{1, 1, 2, 1, 1},
{3, 3, 2, 3, 3},
{2, 3, 3, 3, 2},
{2, 1, 1, 1, 2},
{2, 1, 2, 1, 2},
}
NetEnt 10 bet lines
var BetLinesNetEnt20 = Lineset5x{
{2, 2, 2, 2, 2},
{1, 1, 1, 1, 1},
{3, 3, 3, 3, 3},
{1, 2, 3, 2, 1},
{3, 2, 1, 2, 3},
{1, 1, 2, 1, 1},
{3, 3, 2, 3, 3},
{2, 3, 3, 3, 2},
{2, 1, 1, 1, 2},
{2, 1, 2, 1, 2},
{2, 3, 2, 3, 2},
{1, 2, 1, 2, 1},
{3, 2, 3, 2, 3},
{2, 2, 1, 2, 2},
{2, 2, 3, 2, 2},
{1, 2, 2, 2, 1},
{3, 2, 2, 2, 3},
{1, 2, 3, 3, 3},
{3, 2, 1, 1, 1},
{1, 3, 1, 3, 1},
}
NetEnt 20 bet lines
var BetLinesNvm10 = Lineset5x{
{2, 2, 2, 2, 2},
{1, 1, 1, 1, 1},
{3, 3, 3, 3, 3},
{1, 2, 3, 2, 1},
{3, 2, 1, 2, 3},
{2, 3, 3, 3, 2},
{2, 1, 1, 1, 2},
{3, 3, 2, 1, 1},
{1, 1, 2, 3, 3},
{3, 2, 2, 2, 1},
}
Novomatic 10 bet lines (deluxe versions of games)
var BetLinesNvm20 = Lineset5x{
{2, 2, 2, 2, 2},
{1, 1, 1, 1, 1},
{3, 3, 3, 3, 3},
{1, 2, 3, 2, 1},
{3, 2, 1, 2, 3},
{1, 1, 2, 3, 3},
{3, 3, 2, 1, 1},
{2, 1, 1, 1, 2},
{2, 3, 3, 3, 2},
{1, 2, 2, 2, 1},
{3, 2, 2, 2, 3},
{2, 1, 2, 3, 2},
{2, 3, 2, 1, 2},
{1, 3, 1, 3, 1},
{3, 1, 3, 1, 3},
{1, 2, 1, 2, 1},
{3, 2, 3, 2, 3},
{1, 3, 3, 3, 3},
{3, 1, 1, 1, 1},
{2, 2, 1, 2, 2},
}
Novomatic 20 bet lines (new games)
var BetLinesNvm40 = Lineset5x{
{1, 1, 1, 1, 1},
{2, 2, 2, 2, 2},
{3, 3, 3, 3, 3},
{4, 4, 4, 4, 4},
{1, 2, 3, 2, 1},
{2, 3, 4, 3, 2},
{3, 2, 1, 2, 3},
{4, 3, 2, 3, 4},
{1, 1, 1, 1, 2},
{2, 2, 2, 2, 1},
{3, 3, 3, 3, 4},
{4, 4, 4, 4, 3},
{1, 2, 2, 2, 2},
{2, 2, 2, 2, 3},
{3, 3, 3, 3, 2},
{4, 3, 3, 3, 3},
{2, 1, 1, 1, 1},
{2, 3, 3, 3, 3},
{3, 2, 2, 2, 2},
{3, 4, 4, 4, 4},
{1, 1, 1, 2, 3},
{2, 2, 2, 3, 4},
{3, 3, 3, 2, 1},
{4, 4, 4, 3, 2},
{1, 2, 3, 3, 3},
{2, 3, 4, 4, 4},
{3, 2, 1, 1, 1},
{4, 3, 2, 2, 2},
{1, 1, 2, 1, 1},
{2, 2, 1, 2, 2},
{3, 3, 4, 3, 3},
{4, 4, 3, 4, 4},
{1, 2, 2, 2, 1},
{2, 2, 3, 2, 2},
{3, 3, 2, 3, 3},
{4, 3, 3, 3, 4},
{2, 1, 1, 1, 2},
{2, 3, 3, 3, 2},
{3, 2, 2, 2, 3},
{3, 4, 4, 4, 3},
}
Novomatic 40 bet lines (screen 5x4)
var BetLinesNvm9 = Lineset5x{
{2, 2, 2, 2, 2},
{1, 1, 1, 1, 1},
{3, 3, 3, 3, 3},
{1, 2, 3, 2, 1},
{3, 2, 1, 2, 3},
{2, 3, 3, 3, 2},
{2, 1, 1, 1, 2},
{3, 3, 2, 1, 1},
{1, 1, 2, 3, 3},
}
Novomatic 9 bet lines (old versions of games)
Functions ¶
Types ¶
type SBL ¶
type SBL uint
SBL is selected bet lines bitset.
func MakeSblSet ¶
MakeSblSet creates lines set from slice of line indexes.
type Screen ¶
type Screen interface { Dim() (int, int) // returns screen dimensions At(x int, y int) Sym // returns symbol at position (x, y), starts from (1, 1) Pos(x int, line Line) Sym // returns symbol at position (x, line(x)), starts from (1, 1) Set(x int, y int, sym Sym) // setup symbol at given position SetCol(x int, reel []Sym, pos int) // setup column on screen with given reel at given position Spin(reels Reels) // fill the screen with random hits on those reels ScatNum(scat Sym) (n int) // returns number of scatters on the screen ScatNumOdd(scat Sym) (n int) // returns number of scatters on the screen on odd reels ScatNumCont(scat Sym) (n int) // returns number of continuous scatters on the screen ScatPos(scat Sym) Line // returns line with scatters positions on the screen ScatPosOdd(scat Sym) Line // returns line with scatters positions on the screen on odd reels ScatPosCont(scat Sym) Line // returns line with continuous scatters positions on the screen FillSym() Sym // returns symbol that filled whole screen, or 0 Free() // put object to pool }
Screen contains symbols rectangle of the slot game. It can be with dimensions 3x1, 3x3, 5x3, 5x4 or others. (1 ,1) symbol is on left top corner.
type Screen3x3 ¶
type Screen3x3 [3][3]Sym
Screen for 3x3 slots.
func NewScreen3x3 ¶
func NewScreen3x3() *Screen3x3
func (*Screen3x3) ScatNumCont ¶
func (*Screen3x3) ScatNumOdd ¶
func (*Screen3x3) ScatPosCont ¶
func (*Screen3x3) ScatPosOdd ¶
type Screen5x3 ¶
type Screen5x3 [5][3]Sym
Screen for 5x3 slots.
func NewScreen5x3 ¶
func NewScreen5x3() *Screen5x3
func (*Screen5x3) ScatNumCont ¶
func (*Screen5x3) ScatNumOdd ¶
func (*Screen5x3) ScatPosCont ¶
func (*Screen5x3) ScatPosOdd ¶
type Screen5x4 ¶
type Screen5x4 [5][4]Sym
Screen for 5x4 slots.
func NewScreen5x4 ¶
func NewScreen5x4() *Screen5x4
func (*Screen5x4) ScatNumCont ¶
func (*Screen5x4) ScatNumOdd ¶
func (*Screen5x4) ScatPosCont ¶
func (*Screen5x4) ScatPosOdd ¶
type Slot3x3 ¶
type Slot3x3 struct { RD string `json:"rd" yaml:"rd" xml:"rd"` // reels descriptor SBL SBL `json:"sbl" yaml:"sbl" xml:"sbl"` // selected bet lines Bet float64 `json:"bet" yaml:"bet" xml:"bet"` // bet value Gain float64 `json:"gain,omitempty" yaml:"gain,omitempty" xml:"gain,omitempty"` // gain for double up games }
Slot5x3 is base struct for all slot games with screen 5x3.
type Slot5x3 ¶
type Slot5x3 struct { RD string `json:"rd" yaml:"rd" xml:"rd"` // reels descriptor SBL SBL `json:"sbl" yaml:"sbl" xml:"sbl"` // selected bet lines Bet float64 `json:"bet" yaml:"bet" xml:"bet"` // bet value Gain float64 `json:"gain,omitempty" yaml:"gain,omitempty" xml:"gain,omitempty"` // gain for double up games }
Slot5x3 is base struct for all slot games with screen 5x3.
type Slot5x4 ¶
type Slot5x4 struct { RD string `json:"rd" yaml:"rd" xml:"rd"` // reels descriptor SBL SBL `json:"sbl" yaml:"sbl" xml:"sbl"` // selected bet lines Bet float64 `json:"bet" yaml:"bet" xml:"bet"` // bet value Gain float64 `json:"gain,omitempty" yaml:"gain,omitempty" xml:"gain,omitempty"` // gain for double up games }
Slot5x4 is base struct for all slot games with screen 5x4.
type SlotGame ¶
type SlotGame interface { NewScreen() Screen // returns new empty screen object for this game, constat function Scanner(screen Screen, sw *WinScan) // scan given screen and append result to sw, constat function Spin(screen Screen) // fill the screen with random hits on those reels, constat function Spawn(screen Screen, sw *WinScan) // setup bonus games to win results, constat function Apply(screen Screen, sw *WinScan) // update game state to spin results FreeSpins() int // returns number of free spins remained, constat function GetGain() float64 // returns gain for double up games, constat function SetGain(gain float64) error // set gain to given value on double up games GetBet() float64 // returns current bet, constat function SetBet(float64) error // set bet to given value GetLines() SBL // returns selected lines indexes, constat function SetLines(SBL) error // setup selected lines indexes GetReels() string // returns reels descriptor SetReels(rd string) error // setup reels descriptor }
type Stat ¶
type Stat struct { Reshuffles uint64 LinePay float64 ScatPay float64 FreeCount uint64 BonusCount [8]uint64 JackCount [4]uint64 // contains filtered or unexported fields }
Stat is statistics calculation for slot reels.
type WinItem ¶
type WinItem struct { Pay float64 `json:"pay,omitempty" yaml:"pay,omitempty" xml:"pay,omitempty,attr"` // payment with selected bet Mult float64 `json:"mult,omitempty" yaml:"mult,omitempty" xml:"mult,omitempty,attr"` // multiplier for payment for free spins and other special cases Sym Sym `json:"sym,omitempty" yaml:"sym,omitempty" xml:"sym,omitempty,attr"` // win symbol Num int `json:"num,omitempty" yaml:"num,omitempty" xml:"num,omitempty,attr"` // number of win symbol Line int `json:"line,omitempty" yaml:"line,omitempty" xml:"line,omitempty,attr"` // line mumber (0 for scatters and not lined) XY Line `json:"xy" yaml:"xy" xml:"xy"` // symbols positions on screen Free int `json:"free,omitempty" yaml:"free,omitempty" xml:"free,omitempty,attr"` // number of free spins remains BID int `json:"bid,omitempty" yaml:"bid,omitempty" xml:"bid,omitempty,attr"` // bonus identifier Jack int `json:"jack,omitempty" yaml:"jack,omitempty" xml:"jack,omitempty,attr"` // jackpot identifier Bon any `json:"bon,omitempty" yaml:"bon,omitempty" xml:"bon,omitempty"` // bonus game data }
WinItem describes win on each line or scatters.