Home Types Core Functions PGN Functions WinForms
Chess Types
Piece types
These are provided as an enumeration PieceType with these values:
Label | Value |
---|---|
EMPTY | 0 |
Pawn | 1 |
Knight | 2 |
Bishop | 3 |
Rook | 4 |
Queen | 5 |
King | 6 |
Pieces
These are for each colour and are provided as an enumeration Piece with these values:
Label | Value |
---|---|
EMPTY | 0 |
WPawn | 1 |
WKnight | 2 |
WBishop | 3 |
WRook | 4 |
WQueen | 5 |
WKing | 6 |
BPawn | 9 |
BKnight | 10 |
BBishop | 11 |
BRook | 12 |
BQueen | 13 |
BKing | 14 |
Player
These are for each colour and are provided as an enumeration Player with these values:
Label | Value |
---|---|
White | 0 |
Black | 1 |
Game Result
These are provided as an enumeration GameResult with these values:
Label | Value |
---|---|
Draw | 0 |
WhiteWins | 1 |
BlackWins | -1 |
Open | 9 |
Files
These are aliased to a short, with values 0s to 7s for FileA to FileH. FILE_EMPTY is given a value 8s.
As an example, FileC equals 2s.
Also provided are:
FILES = [FileA; FileB; FileC; FileD; FileE; FileF; FileG; FileH]
and
FILE_NAMES = [“a”; “b”; “c”; “d”; “e”; “f”; “g”; “h”]
Ranks
These are aliased to a short, with values 7s to 0s for Rank1 to Rank8. RANK_EMPTY is given a value 8s.
As an example, Rank3 equals 5s.
Also provided are:
RANKS = [Rank8; Rank7; Rank6; Rank5; Rank4; Rank3; Rank2; Rank1]
and
RANK_NAMES = [“8”; “7”; “6”; “5”; “4”; “3”; “2”; “1”]
Squares
These are aliased to a short, with values 0s to 63s for A8 to H1. OUTOFBOUNDS is given a value 64s.
As an example, A2 equals 48s.
Also provided are:
SQUARES = [A8; B8; … G1; H1]
and
SQUARE_NAMES = [“A8; “B8”; … “G1”; “H1”]
A utility function Sq is provided, defined as:
let Sq(f:File,r:Rank) :Square = r * 8s + f
Moves
These are three types of move supported. The main one is aliased to an int and encodes details of the move.
Castle Flags
These are a means of storing the castling writes for a board position. They are provided as an enumeration CstlFlgs with these values:
Label | Value |
---|---|
EMPTY | 0 |
WhiteShort | 1 |
WhiteLong | 2 |
BlackShort | 4 |
BlackLong | 8 |
All | 15 |
Bitboards
This is used internally for efficent storage of squares and moves and calculations of possible moves. They are provided as an enumeration Bitboard of 64-bit unsigned integers.
Here are some sample values:
Label | Value |
---|---|
A8 | 1UL |
H1 | 9223372036854775808UL |
FileA | 72340172838076673UL |
Rank4 | 1095216660480UL |
Move Types
These are a means of storing the broad type of each move for a SAN move. They are provided as a simple discriminated union MoveType with these choices:
- Simple
- Capture
- CastleKingSide
- CastleQueenSide
Numeric Annotation Glyphs
These are a means of storing comments on moves and positions with these values:
Label | Value |
---|---|
Null | 0 |
Good | 1 |
Poor | 2 |
Very Good | 3 |
Speculative | 4 |
Questionable | 5 |
Even | 10 |
Wslight | 14 |
Bslight | 15 |
Wmoderate | 16 |
Bmoderate | 17 |
Wdecisive | 18 |
SAN Moves
These are a means of storing a move in SAN format such as Nxg6+. They are provided as a record type pMove with these fields:
Field | Type | Description |
---|---|---|
Mtype | MoveType | The broad type of the move |
TargetSquare | Square | The square to which you move the piece |
Piece | PieceType option | The piece moved, but it could be None |
OriginFile | File option | The file moved from, but it could be None |
OriginRank | Rank option | The rank moved from, but it could be None |
PromotedPiece | PieceType option | The piece promoted to, but it could be None |
IsCheck | bool | Does the move check the king? |
IsDoubleCheck | bool | Does the move double check the king? |
IsCheckMate | bool | Does the move mate the king? |
Boards
These are a means of storing a position on board. They are provided as a record type Brd with these fields:
Field | Type | Description |
---|---|---|
PieceAt | Piece list | The pieces on each square |
WtKingPos | Square | The square of the white king |
BkKingPos | Square | The square of the black king |
PieceTypes | Bitboard list | Keeps track of the piece types on the board |
WtPrBds | Bitboard | Keeps track of the white pieces |
BkPrBds | Bitboard | Keeps track of the black pieces |
PieceLocationsAll | Bitboard | Keeps track of all pieces |
Checkers | Bitboard | Keeps track of all pieces giving check |
WhosTurn | Player | Holds the player whose turn it is |
CastleRights | CstlFlgs | Holds the castling rights still available |
EnPassant | Square | Holds the possible square to take e.p. |
Fiftymove | int | Keeps track of moves for draw in 50 |
Fullmove | int | Keeps track of overall double moves |
This also provides and Indexer so that you can get a piece on a square using code like:
let pc = board.[C3]
Board Related Moves
These are a means of storing a move with the associated board position. They are provided as a record type aMove with these fields:
Field | Type | Description |
---|---|---|
PreBrd | Brd | The position before the move |
Mno | int | The move number |
Isw | bool | Whether the move is by White |
Mv | Move | The encoded move |
PostBrd | Brd | The position after the move |
Move Entries
These are a means of storing the various type of move entry in a game. They are provided as a complex discriminated union MoveTextEntry with these choices:
Choice | Type | Description |
---|---|---|
HalfMoveEntry | int option * bool * pMove * aMove option | The main option: optional move counter, whether a continuation, the SAN move and the board related move |
CommentEntry | string | Holds a comment in a game |
GameEndEntry | GameResult | Holds the result at the end of a game |
NAGEntry | NAG | Holds a NAG entry such as ?? or += in a game |
RAVEntry | MoveTextEntry list | Holds a RAV entry for variations in a game |
Games
These are a means of storing a game. They are provided as a record type Game with these fields:
Field | Type | Description |
---|---|---|
Event | string | The game was in this event |
Site | string | The game was at this site |
Year | int option | The game was played in this year but may be None |
Month | int option | The game was played in this month but may be None |
Day | int option | The game was played in this day but may be None |
Round | string | The game was in this round |
WhitePlayer | string | The game had this player as white |
BlackPlayer | string | The game had this player as black |
Result | GameResult | The game had this result |
WhiteElo | string | The player as white had this Elo |
BlackElo | string | The player as black had this Elo |
BoardSetup | Brd option | The game optionally had this as a starting board |
AdditionalInfo | Map<string,string> | The game had these as extra headers |
MoveText | MoveTextEntry list | The game had these move entries |
Statistics
These are a means of storing statistics for a position. They are provided as a list of record types MvStats with these fields:
Field | Type | Description |
---|---|---|
Mvstr | string | The possible move in the postion in SAN format |
Count | int | The number of games with this move |
Pc | float | The percentage for this move relative to others |
WhiteWins | int | The number of wins for White with this move |
Draws | int | The number of draws with this move |
BlackWins | int | The number of wins for Black with this move |
Score | float | The percentage score with this move |
DrawPc | float | The percentage of draws with this move |
The collection of these stats for a position is held in the type BrdStats which is defined as follows:
Field | Type | Description |
---|---|---|
Mvstats | MvStats list | The stats for each possible move |
TotCount | int | The total count of games |
TotWhiteWins | int | The number of wins for White across all moves |
TotDraws | int | The number of draws across all moves |
TotBlackWins | int | The number of wins for Black across all moves |
TotScore | float | The percentage score across all moves |
TotDrawPc | float | The percentage of draws across all moves |