tabula

package module
v0.0.0-...-c4a498a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 26, 2025 License: AGPL-3.0 Imports: 14 Imported by: 2

README

tabula - Backgammon analysis engine

GoDoc Donate

Information on the design of the engine is documented in DESIGN.md.

Play

A tabula bot is available to play against at https://bgammon.org for each supported variant:

  • Backgammon
  • Acey-deucey
  • Tabula

Support

Please share issues and suggestions here.

Documentation

Index

Constants

View Source
const (
	SpaceHomePlayer      int8 = 0
	SpaceHomeOpponent    int8 = 25
	SpaceBarPlayer       int8 = 26
	SpaceBarOpponent     int8 = 27
	SpaceRoll1           int8 = 28
	SpaceRoll2           int8 = 29
	SpaceRoll3           int8 = 30
	SpaceRoll4           int8 = 31
	SpaceEnteredPlayer   int8 = 32 // Whether the player has fully entered the board. Only used in acey-deucey games.
	SpaceEnteredOpponent int8 = 33 // Whether the opponent has fully entered the board. Only used in acey-deucey games.
	SpaceVariant         int8 = 34 // 0 - Backgammon, 1 - Acey-deucey, 2 - Tabula.
	SpaceCrawford        int8 = 35 // 0 - Pending, 1 - Active, 2 - Expired.
)

Named board "spaces".

View Source
const (
	VariantBackgammon int8 = 0
	VariantAceyDeucey int8 = 1
	VariantTabula     int8 = 2
)

Variants.

View Source
const (
	CrawfordPending int8 = 0
	CrawfordActive  int8 = 1
	CrawfordExpired int8 = 2
)

Crawford Rule.

Variables

View Source
var (
	WeightBlot     = 0.9
	WeightHit      = -1.0
	WeightOppScore = -0.9
)
View Source
var (
	// AnalysisBufferSize is the size of the outer queue buffer, which handles analyzing boards provided to Tabula.
	AnalysisBufferSize = 128

	// SubAnalysisBufferSize is the size of the inner queue buffer, which handles analyzing potential positions.
	SubAnalysisBufferSize = 3072
)

Buffer sizes.

View Source
var QueueBufferSize = 4096000
View Source
var Verbose bool

Functions

func MovesEqual

func MovesEqual(a [4][2]int8, b [4][2]int8) bool

MovesEqual returns whether two sets of moves are logically equal.

func PseudoPips

func PseudoPips(player int8, space int8, variant int8) int

PseudoPips returns the pseudo-pip value of a space.

Types

type Analysis

type Analysis struct {
	Board Board
	Moves [4][2]int8
	Past  bool
	Score float64

	Pips        int
	Blots       int
	Hits        int
	PlayerScore float64

	OppPips  float64
	OppBlots float64
	OppHits  float64
	OppScore float64
	// contains filtered or unexported fields
}

func (*Analysis) String

func (a *Analysis) String() string

type BEIServer

type BEIServer struct {
	Verbose bool
}

func NewBEIServer

func NewBEIServer() *BEIServer

func (*BEIServer) Listen

func (s *BEIServer) Listen(address string)

func (*BEIServer) ListenLocal

func (s *BEIServer) ListenLocal() chan net.Conn

type Board

type Board [boardSpaces]int8

Board represents the state of a game. It contains spaces for the checkers, as well as four "spaces" which contain the available die rolls.

func NewBoard

func NewBoard(variant int8) Board

NewBoard returns a new board with checkers placed in their starting positions.

func (Board) Analyze

func (b Board) Analyze(available [][4][2]int8, result *[]*Analysis, skipOpponent bool) (analyzedPositions int)

Analyze analyzes all legal player moves and all legal opponent moves that may follow. The available moves and their potential counters are scored and sorted, and the final analysis is stored in the result slice.

func (Board) Available

func (b Board) Available(player int8) ([][4][2]int8, []Board)

Available returns legal moves available.

func (Board) Blots

func (b Board) Blots(player int8) int

Blots returns the number of blots the specified player has on the board.

func (Board) ChooseDoubles

func (b Board) ChooseDoubles(result *[]*Analysis) int

ChooseDoubles analyzes and returns the best choice of doubles in an acey-deucey game.

func (Board) Evaluation

func (b Board) Evaluation(player int8, hitScore int, moves [4][2]int8) *Analysis

Evaluation scores a board and returns the resulting Analysis.

func (Board) FirstLast

func (b Board) FirstLast(player int8) (playerFirst int8, opponentLast int8)

FirstLast returns the position of the specified player's first checker and their opponent's last checker.

func (Board) HaveRoll

func (b Board) HaveRoll(from int8, to int8, player int8) bool

HaveRoll returns whether the player has a sufficient die roll for the specified move.

func (Board) MayBearOff

func (b Board) MayBearOff(player int8) bool

MayBearOff returns whether the specified player is eligible to bear checkers off the board.

func (Board) Move

func (b Board) Move(from int8, to int8, player int8) Board

Move moves a checker on the board.

func (Board) Past

func (b Board) Past() bool

Past returns whether the players have passed each other on the board with all of their checkers. When this is the case, hitting a checker is no longer possible.

func (Board) Pips

func (b Board) Pips(player int8) int

Pips returns the total pip value corresponding to all of the checkers of the specified player.

func (Board) Print

func (b Board) Print()

Print prints the board to the console.

func (Board) SecondHalf

func (b Board) SecondHalf(player int8) bool

SecondHalf returns whether all of the checkers of the specified player are either located in the second half of the board or have been beared off.

func (Board) SetValue

func (b Board) SetValue(space int, value int8) Board

SetValue sets the value of a space.

func (Board) StartingPosition

func (b Board) StartingPosition(player int8) bool

StartingPosition returns whether the specified player has all of their checkers in the initial position.

func (Board) String

func (b Board) String() string

String returns the board state and position as a string.

func (Board) UseRoll

func (b Board) UseRoll(from int8, to int8, player int8) Board

UseRoll uses a die roll. UseRoll must be called before making a move.

Directories

Path Synopsis
cmd
tabula command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL