Documentation ¶
Index ¶
- func OFEN(ofen string) (func(*Game), error)
- func PGN(r io.Reader) (func(*Game), error)
- func TagPairs(tagPairs []*TagPair) func(*Game)
- func UseNotation(n Notation) func(*Game)
- type AlgebraicNotation
- type Board
- func (b *Board) Draw() string
- func (b *Board) Flip(fd FlipDirection) *Board
- func (b *Board) MarshalBinary() (data []byte, err error)
- func (b *Board) MarshalText() (text []byte, err error)
- func (b *Board) Piece(sq Square) Piece
- func (b *Board) Rotate() *Board
- func (b *Board) SquareMap() map[Square]Piece
- func (b *Board) String() string
- func (b *Board) Transpose() *Board
- func (b *Board) UnmarshalBinary(data []byte) error
- func (b *Board) UnmarshalText(text []byte) error
- type CastleRights
- type Color
- type Decoder
- type Encoder
- type File
- type FlipDirection
- type Game
- func (g *Game) AddTagPair(k, v string) bool
- func (g *Game) Clone() *Game
- func (g *Game) Draw(method Method) error
- func (g *Game) EligibleDraws() []Method
- func (g *Game) GetTagPair(k string) *TagPair
- func (g *Game) MarshalText() (text []byte, err error)
- func (g *Game) Method() Method
- func (g *Game) Move(m *Move) error
- func (g *Game) MoveStr(s string) error
- func (g *Game) Moves() []*Move
- func (g *Game) OFEN() string
- func (g *Game) Outcome() Outcome
- func (g *Game) Position() *Position
- func (g *Game) Positions() []*Position
- func (g *Game) RemoveTagPair(k string) bool
- func (g *Game) Resign(color Color)
- func (g *Game) String() string
- func (g *Game) TagPairs() []*TagPair
- func (g *Game) UndoMove()
- func (g *Game) UnmarshalText(text []byte) error
- func (g *Game) ValidMoves() []*Move
- type LongAlgebraicNotation
- type Method
- type Move
- type MoveTag
- type Notation
- type Outcome
- type Piece
- type PieceType
- type Position
- func (pos *Position) Board() *Board
- func (pos *Position) CastleRights() CastleRights
- func (pos *Position) CheckSquare() Square
- func (pos *Position) EnPassantSquare() Square
- func (pos *Position) Hash() [16]byte
- func (pos *Position) InCheck() bool
- func (pos *Position) MarshalBinary() (data []byte, err error)
- func (pos *Position) MarshalText() (text []byte, err error)
- func (pos *Position) Status() Method
- func (pos *Position) String() string
- func (pos *Position) Turn() Color
- func (pos *Position) UnmarshalBinary(data []byte) error
- func (pos *Position) UnmarshalText(text []byte) error
- func (pos *Position) Update(m *Move) *Position
- func (pos *Position) ValidMoves() []*Move
- type Rank
- type Scanner
- type Side
- type Square
- type TagPair
- type UOINotation
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func OFEN ¶
OFEN takes a string and returns a function that updates the game to reflect the OFEN data. Since OFEN doesn't encode prior moves, the move list will be empty. The returned function is designed to be used in the NewGame constructor. An error is returned if there is a problem parsing the OFEN data.
func PGN ¶
PGN takes a reader and returns a function that updates the game to reflect the PGN data. The PGN can use any move notation supported by this package. The returned function is designed to be used in the NewGame constructor. An error is returned if there is a problem parsing the PGN data.
func TagPairs ¶
TagPairs returns a function that sets the tag pairs to the given value. The returned function is designed to be used in the NewGame constructor.
func UseNotation ¶
UseNotation returns a function that sets the game's notation to the given value. The notation is used to parse the string supplied to the MoveStr() method as well as the any PGN output. The returned function is designed to be used in the NewGame constructor.
Types ¶
type AlgebraicNotation ¶
type AlgebraicNotation struct{}
AlgebraicNotation (or Standard Algebraic Notation) is the official octad notation used by FIDE. Examples: c2, b3, O-O (short castling), d4=Q (promotion)
func (AlgebraicNotation) Decode ¶
func (AlgebraicNotation) Decode(pos *Position, s string) (*Move, error)
Decode implements the Decoder interface.
func (AlgebraicNotation) Encode ¶
func (AlgebraicNotation) Encode(pos *Position, m *Move) string
Encode implements the Encoder interface.
func (AlgebraicNotation) String ¶
func (AlgebraicNotation) String() string
String implements the fmt.Stringer interface and returns the notation's name.
type Board ¶
type Board struct {
// contains filtered or unexported fields
}
A Board represents a octad board and its relationship between squares and pieces.
func (*Board) Flip ¶
func (b *Board) Flip(fd FlipDirection) *Board
Flip flips the board over the vertical or horizontal center line.
func (*Board) MarshalBinary ¶
MarshalBinary implements the encoding.BinaryMarshaller interface and returns the bitboard representations as a array of bytes. Bitboards are encoded in the following order: WhiteKing, WhiteQueen, WhiteRook, WhiteBishop, WhiteKnight WhitePawn, BlackKing, BlackQueen, BlackRook, BlackBishop, BlackKnight, BlackPawn
func (*Board) MarshalText ¶
MarshalText implements the encoding.TextMarshaller interface and returns a string in the OFEN board format: ppkn/4/4/NKPP
func (*Board) SquareMap ¶
SquareMap returns a mapping of squares to pieces. A square is only added to the map if it is occupied.
func (*Board) String ¶
String implements the fmt.Stringer interface and returns a string in the OFEN board format: ppkn/4/4/NKPP
func (*Board) UnmarshalBinary ¶
UnmarshalBinary implements the encoding.BinaryUnmarshaler interface and parses the bitboard representations as a array of bytes. Bitboards are decoded in the following order: WhiteKing, WhiteQueen, WhiteRook, WhiteBishop, WhiteKnight WhitePawn, BlackKing, BlackQueen, BlackRook, BlackBishop, BlackKnight, BlackPawn
func (*Board) UnmarshalText ¶
UnmarshalText implements the encoding.TextUnmarshaller interface and takes a string in the OFEN board format: ppkn/4/4/NKPP
type CastleRights ¶
type CastleRights string
CastleRights holds the state of both sides castling abilities.
func (CastleRights) CanCastle ¶
func (cr CastleRights) CanCastle(c Color, side Side) bool
CanCastle returns true if the given color and side combination can castle, otherwise returns false.
func (CastleRights) String ¶
func (cr CastleRights) String() string
String implements the fmt.Stringer interface and returns a FEN compatible string. Ex. NCFncf
type Decoder ¶
Decoder is the interface implemented by objects that can decode a string into a move given the position. It is not the decoders responsibility to validate the move. An error is returned if the string could not be decoded.
type Encoder ¶
Encoder is the interface implemented by objects that can encode a move into a string given the position. It is not the encoders responsibility to validate the move.
type FlipDirection ¶
type FlipDirection int
FlipDirection is the direction for the Board.Flip method
const ( // UpDown flips the board's rank values UpDown FlipDirection = iota // LeftRight flips the board's file values LeftRight )
type Game ¶
type Game struct {
// contains filtered or unexported fields
}
A Game represents a single octad game.
func GamesFromPGN ¶
GamesFromPGN returns all PGN decoding games from the reader. It is designed to be used decoding multiple PGNs in the same file. An error is returned if there is an issue parsing the PGNs. Deprecated: Use Scanner instead.
func NewGame ¶
NewGame defaults to returning a game in the standard opening position. Options can be given to configure the game's initial state.
func (*Game) AddTagPair ¶
AddTagPair adds or updates a tag pair with the given key and value and returns true if the value is overwritten.
func (*Game) Draw ¶
Draw attempts to draw the game by the given method. If the method is valid, then the game is updated to a draw by that method. If the method isn't valid then an error is returned.
func (*Game) EligibleDraws ¶
EligibleDraws returns valid inputs for the Draw() method.
func (*Game) GetTagPair ¶
GetTagPair returns the tag pair for the given key or nil if it is not present.
func (*Game) MarshalText ¶
MarshalText implements the encoding.TextMarshaller interface and encodes the game's PGN.
func (*Game) Move ¶
Move updates the game with the given move. An error is returned if the move is invalid or the game has already been completed.
func (*Game) MoveStr ¶
MoveStr decodes the given string in game's notation and calls the Move function. An error is returned if the move can't be decoded or the move is invalid.
func (*Game) RemoveTagPair ¶
RemoveTagPair removes the tag pair for the given key and returns true if a tag pair was removed.
func (*Game) Resign ¶
Resign resigns the game for the given color. If the game has already been completed then the game is not updated.
func (*Game) UndoMove ¶ added in v1.0.6
func (g *Game) UndoMove()
UndoMove will undo the last move played and revert the game to the position as it was before that move was played.
func (*Game) UnmarshalText ¶
UnmarshalText implements the encoding.TextUnmarshaler interface and assumes the data is in the PGN format.
func (*Game) ValidMoves ¶
ValidMoves returns a list of valid moves in the current position.
type LongAlgebraicNotation ¶
type LongAlgebraicNotation struct{}
LongAlgebraicNotation is a fully expanded version of algebraic notation in which the starting and ending squares are specified. Examples: e2e4, Rd3xd7, O-O (short castling), e7e8=Q (promotion)
func (LongAlgebraicNotation) Decode ¶
func (LongAlgebraicNotation) Decode(pos *Position, s string) (*Move, error)
Decode implements the Decoder interface.
func (LongAlgebraicNotation) Encode ¶
func (LongAlgebraicNotation) Encode(pos *Position, m *Move) string
Encode implements the Encoder interface.
func (LongAlgebraicNotation) String ¶
func (LongAlgebraicNotation) String() string
String implements the fmt.Stringer interface and returns the notation's name.
type Method ¶
type Method uint8
A Method is the method that generated the outcome.
const ( // NoMethod indicates that an outcome hasn't occurred or that the method can't be determined. NoMethod Method = iota // Checkmate indicates that the game was won checkmate. Checkmate // Resignation indicates that the game was won by resignation. Resignation // DrawOffer indicates that the game was drawn by a draw offer. DrawOffer // Stalemate indicates that the game was drawn by stalemate. Stalemate // ThreefoldRepetition indicates that the game was automatically drawn // by the game state being repeated three times. ThreefoldRepetition // TwentyFiveMoveRule indicates that the game was automatically drawn // when the half move clock was fifty or greater. TwentyFiveMoveRule // InsufficientMaterial indicates that the game was automatically drawn // because there was insufficient material for checkmate. InsufficientMaterial )
type Move ¶
type Move struct {
// contains filtered or unexported fields
}
A Move is the movement of a piece from one square to another.
func (*Move) Equals ¶
Equals returns whether or not the move in question is exactly the same as the current move
type MoveTag ¶
type MoveTag uint16
A MoveTag represents a notable consequence of a move.
const ( // KnightCastle indicates that the move is a knight castle. KnightCastle MoveTag = 1 << iota // ClosePawnCastle indicates that the move is a close pawn castle. ClosePawnCastle // FarPawnCastle indicates that the move is a far pawn castle. FarPawnCastle // Capture indicates that the move captures a piece. Capture // EnPassant indicates that the move captures via en passant. EnPassant // Check indicates that the move puts the opposing player in check. Check )
type Outcome ¶
type Outcome string
A Outcome is the result of a game.
const ( // NoOutcome indicates that a game is in progress or ended without a result. NoOutcome Outcome = "*" // WhiteWon indicates that white won the game. WhiteWon Outcome = "1-0" // BlackWon indicates that black won the game. BlackWon Outcome = "0-1" // Draw indicates that game was a draw. Draw Outcome = "1/2-1/2" )
type Piece ¶
type Piece int8
Piece is a piece type with a color.
const ( // NoPiece represents no piece NoPiece Piece = iota // WhiteKing is a white king WhiteKing // WhiteQueen is a white queen WhiteQueen // WhiteRook is a white rook WhiteRook // WhiteBishop is a white bishop WhiteBishop // WhiteKnight is a white knight WhiteKnight // WhitePawn is a white pawn WhitePawn // BlackKing is a black king BlackKing // BlackQueen is a black queen BlackQueen // BlackRook is a black rook BlackRook // BlackBishop is a black bishop BlackBishop // BlackKnight is a black knight BlackKnight // BlackPawn is a black pawn BlackPawn )
type Position ¶
type Position struct {
// contains filtered or unexported fields
}
Position represents the state of the game without regard to its outcome. Position is translatable to FEN notation.
func StartingPosition ¶
StartingPosition returns the starting position ppkn/4/4/NKPP w NCFncf - 0 1
func (*Position) CastleRights ¶
func (pos *Position) CastleRights() CastleRights
CastleRights returns the castling rights of the position.
func (*Position) CheckSquare ¶ added in v1.0.1
CheckSquare returns the square containing the checked king.
func (*Position) EnPassantSquare ¶
EnPassantSquare returns the position's active en passant square if any.
func (*Position) InCheck ¶ added in v1.0.1
InCheck returns true if the king is in check in the position.
func (*Position) MarshalBinary ¶
MarshalBinary implements the encoding.BinaryMarshaller interface
func (*Position) MarshalText ¶
MarshalText implements the encoding.TextMarshaller interface and encodes the position's OFEN.
func (*Position) Status ¶
Status returns the position's status as one of the outcome methods. Possible returns values include Checkmate, Stalemate, and NoMethod.
func (*Position) String ¶
String implements the fmt.Stringer interface and returns a string with the OFEN format: ppkn/4/4/NKPP w NCFncf - 0 1
func (*Position) UnmarshalBinary ¶
UnmarshalBinary implements the encoding.BinaryMarshaller interface
func (*Position) UnmarshalText ¶
UnmarshalText implements the encoding.TextUnmarshaler interface and assumes the data is in the OFEN format.
func (*Position) Update ¶
Update returns a new position resulting from the given move. The move itself isn't validated, if validation is needed use Game's Move method. This method is more performant for bots that rely on the ValidMoves because it skips redundant validation.
func (*Position) ValidMoves ¶
ValidMoves returns a list of valid moves for the position.
type Scanner ¶
type Scanner struct {
// contains filtered or unexported fields
}
Scanner is modeled on the bufio.Scanner type but instead of reading lines, it reads octad games from concatenated PGN files. It is designed to replace GamesFromPGN in order to handle very large PGN database files such as https://database.lioctad.org/.
func (*Scanner) Err ¶
Err returns an error encountered during scanning. Typically this will be a PGN parsing error or an io.EOF.
type Side ¶
type Side int
Side represents a side to castle to. In octad, there are three types of castling allowed. Knight, close pawn, and far pawn
type Square ¶
type Square int8
A Square is one of the 16 rank and file combinations that make up a board.
const ( // NoSquare represents an invalid square NoSquare Square = iota - 1 // A1 square, index 0 A1 // B1 square, index 1 B1 // C1 square, index 2 C1 // D1 square, index 3 D1 // A2 square, index 4 A2 // B2 square, index 5 B2 // C2 square, index 6 C2 // D2 square, index 7 D2 // A3 square, index 8 A3 // B3 square, index 9 B3 // C3 square, index 10 C3 // D3 square, index 11 D3 // A4 square, index 12 A4 // B4 square, index 13 B4 // C4 square, index 14 C4 // D4 square, index 15 D4 )
type UOINotation ¶
type UOINotation struct{}
UOINotation is a more computer friendly alternative to algebraic notation. This notation uses the same format as the UOI (Universal Octad Interface). Example: d3d4q (for promotion)
func (UOINotation) Decode ¶
func (UOINotation) Decode(pos *Position, s string) (*Move, error)
Decode implements the Decoder interface.
func (UOINotation) Encode ¶
func (UOINotation) Encode(pos *Position, m *Move) string
Encode implements the Encoder interface.
func (UOINotation) String ¶
func (UOINotation) String() string
String implements the fmt.Stringer interface and returns the notation's name.