Documentation ¶
Index ¶
- Constants
- Variables
- func Demote(piece string) string
- func MainLoop()
- func NifuFirst(pPos *Position, file Square) bool
- func NifuSecond(pPos *Position, file Square) bool
- func OnBoard(sq Square) bool
- func Promote(piece string) string
- type EngineConf
- type Move
- func (move Move) GetDestination() Square
- func (move Move) GetPromotion() bool
- func (move Move) GetSource() Square
- func (move Move) ReplaceDestination(sq Square) Move
- func (move Move) ReplacePromotion(promotion bool) Move
- func (move Move) ReplaceSource(sq Square) Move
- func (move Move) ToCode() string
- type Phase
- type PieceType
- type Position
- func (pPos *Position) AddControlDiff(layer int, from Square, sign int8)
- func (pPos *Position) AddControlDiffAllSlidingPiece(layer int, sign int8, excludeFrom Square)
- func (pPos *Position) ClearControlDiff()
- func (pPos *Position) DoMove(move Move)
- func (pPos *Position) Hetero(from Square, to Square) bool
- func (pPos *Position) Homo(from Square, to Square) bool
- func (pPos *Position) IsEmptySq(sq Square) bool
- func (pPos *Position) MergeControlDiff()
- func (pPos *Position) ReadPosition(command string)
- func (pPos *Position) Sprint() string
- func (pPos *Position) SprintControl(phase Phase, flag int) string
- func (pPos *Position) SprintLocation() string
- func (pPos *Position) SprintRecord() string
- func (pPos *Position) SprintSfen() string
- func (pPos *Position) UndoMove()
- type Profile
- type Square
- type Variables
Constants ¶
const ( // 持ち駒を打つ 100~113 // 先手飛打 HAND_R1 = Square(100) HAND_B1 = Square(101) HAND_G1 = Square(102) HAND_S1 = Square(103) HAND_N1 = Square(104) HAND_L1 = Square(105) HAND_P1 = Square(106) HAND_R2 = Square(107) HAND_B2 = Square(108) HAND_G2 = Square(109) HAND_S2 = Square(110) HAND_N2 = Square(111) HAND_L2 = Square(112) HAND_P2 = Square(113) HAND_ORIGIN = HAND_R1 HAND_TYPE_SIZE = HAND_P1 - HAND_ORIGIN + 1 )
const ( PIECE_TYPE_EMPTY = PieceType(0) // 空マス PIECE_TYPE_K = PieceType(1) PIECE_TYPE_R = PieceType(2) PIECE_TYPE_B = PieceType(3) PIECE_TYPE_G = PieceType(4) PIECE_TYPE_S = PieceType(5) PIECE_TYPE_N = PieceType(6) PIECE_TYPE_L = PieceType(7) PIECE_TYPE_P = PieceType(8) PIECE_TYPE_PR = PieceType(9) PIECE_TYPE_PB = PieceType(10) PIECE_TYPE_PS = PieceType(11) PIECE_TYPE_PN = PieceType(12) PIECE_TYPE_PL = PieceType(13) PIECE_TYPE_PP = PieceType(14) )
const ( // 空マス ZEROTH = Phase(0) // 先手 FIRST = Phase(1) // 後手 SECOND = Phase(2) )
const ( PIECE_EMPTY = "" PIECE_K1 = "K" PIECE_R1 = "R" PIECE_B1 = "B" PIECE_G1 = "G" PIECE_S1 = "S" PIECE_N1 = "N" PIECE_L1 = "L" PIECE_P1 = "P" PIECE_PR1 = "+R" PIECE_PB1 = "+B" PIECE_PS1 = "+S" PIECE_PN1 = "+N" PIECE_PL1 = "+L" PIECE_PP1 = "+P" PIECE_K2 = "k" PIECE_R2 = "r" PIECE_B2 = "b" PIECE_G2 = "g" PIECE_S2 = "s" PIECE_N2 = "n" PIECE_L2 = "l" PIECE_P2 = "p" PIECE_PR2 = "+r" PIECE_PB2 = "+b" PIECE_PS2 = "+s" PIECE_PN2 = "+n" PIECE_PL2 = "+l" PIECE_PP2 = "+p" )
駒
const (
// Author - 囲碁思考エンジンの作者名だぜ☆(^~^)
Author = "Satoshi Takahashi"
)
const BOARD_SIZE = 100
00~99
const MOVES_SIZE = 512
電竜戦が一番長いだろ(^~^)
const ResignMove = Move(0)
0 は 投了ということにするぜ(^~^)
const SQUARE_EMPTY = Square(0)
マス番号を指定しないことを意味するマス番号
Variables ¶
var OneDigitNumbers = [10]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
position sfen の盤のスペース数に使われますN
Functions ¶
Types ¶
type EngineConf ¶
type EngineConf struct {
Profile Profile
}
EngineConf - Tomlファイル。
func LoadEngineConf ¶
func LoadEngineConf(path string) (*EngineConf, error)
LoadEngineConf - ゲーム設定ファイルを読み込みます。
type Move ¶
type Move uint16
Move - 指し手
15bit で表せるはず(^~^) .pdd dddd dsss ssss
1~7bit: 移動元(0~127) 8~14bit: 移動先(0~127) 15bit: 成(0~1)
func GenMoveList ¶
GenMoveList - 現局面の指し手のリスト。合法手とは限らないし、全ての合法手を含むとも限らないぜ(^~^)
func NewMoveValue ¶
func NewMoveValue() Move
func NewMoveValue2 ¶
NewMoveValue2 - 初期値として 移動元マス、移動先マスを指定してください TODO 成、不成も欲しいぜ(^~^)
func (Move) GetDestination ¶
GetDestination - 移動元マス 0011 1111 1000 0000 (Mask) 0x3f80 .pdd dddd dsss ssss
func (Move) GetPromotion ¶
GetPromotion - 成 0100 0000 0000 0000 (Mask) 0x4000 .pdd dddd dsss ssss
func (Move) ReplaceDestination ¶
ReplaceDestination - 移動先マス 1100 0000 0111 1111 (Clear) 0xc07f .pdd dddd dsss ssss
func (Move) ReplacePromotion ¶
ReplacePromotion - 成 0100 0000 0000 0000 (Stand) 0x4000 1011 1111 1111 1111 (Clear) 0xbfff .pdd dddd dsss ssss
func (Move) ReplaceSource ¶
ReplaceSource - 移動元マス 1111 1111 1000 0000 (Clear) 0xff80 .pdd dddd dsss ssss
type Position ¶
type Position struct { // Go言語で列挙型めんどくさいんで文字列で(^~^) // [19] は 1九、 [91] は 9一(^~^)反時計回りに90°回転した将棋盤の状態で入ってるぜ(^~^)想像しろだぜ(^~^) Board [BOARD_SIZE]string // [0]先手 [1]後手 KingLocations [2]Square // 飛車の場所。長い利きを消すために必要(^~^) RookLocations [2]Square // 角の場所。長い利きを消すために必要(^~^) BishopLocations [2]Square // 香の場所。長い利きを消すために必要(^~^) LanceLocations [4]Square // 利きテーブル [0]先手 [1]後手 // マスへの利き数が入っています ControlBoards [2][BOARD_SIZE]int8 // マスへの利き数の差分が入っています。デバッグ目的で無駄に分けてるんだけどな(^~^) // プレイヤー1つにつき、5レイヤーあるぜ(^~^) ControlBoardsDiff [2][5][BOARD_SIZE]int8 // 持ち駒の数だぜ(^~^) R, B, G, S, N, L, P, r, b, g, s, n, l, p Hands []int // 先手が1、後手が2(^~^) Phase Phase // 開始局面の時点で何手目か(^~^)これは表示のための飾りのようなものだぜ(^~^) StartMovesNum int // 開始局面から数えて何手目か(^~^)0から始まるぜ(^~^) OffsetMovesIndex int // 指し手のリスト(^~^) // 1手目は[0]へ、512手目は[511]へ入れろだぜ(^~^) Moves [MOVES_SIZE]Move // 取った駒のリスト(^~^)アンドゥ ムーブするときに使うだけ(^~^)指し手のリストと同じ添え字を使うぜ(^~^) CapturedList [MOVES_SIZE]string }
Position - 局面
func NewPosition ¶
func NewPosition() *Position
func (*Position) AddControlDiff ¶
AddControlDiff - 盤上のマスを指定することで、そこにある駒の利きを調べて、利きの差分テーブルの値を増減させます
func (*Position) AddControlDiffAllSlidingPiece ¶
AddControlDiffAllSlidingPiece - すべての長い利きの駒の利きを調べて、利きの差分テーブルの値を増減させます
func (*Position) ClearControlDiff ¶
func (pPos *Position) ClearControlDiff()
ClearControlDiff - 利きの差分テーブルをクリアーするぜ(^~^)
func (*Position) Hetero ¶
Hetero - 移動元と移動先の駒を持つプレイヤーが異なれば真。移動先が空マスでも真 持ち駒は指定してはいけません。 Homo の逆だぜ(^~^)片方ありゃいいんだけど(^~^)
func (*Position) MergeControlDiff ¶
func (pPos *Position) MergeControlDiff()
MergeControlDiff - 利きの差分を解消するぜ(^~^)
func (*Position) ReadPosition ¶
ReadPosition - 局面を読み取ります。マルチバイト文字は含まれていないぜ(^q^)
func (*Position) SprintControl ¶
SprintControl - 利き数ボード出力(^q^)
Parameters ---------- * `flag` - 0: 利き数ボード, 1-5:利き数の差分ボードのレイヤー[0]~[4]
func (*Position) SprintLocation ¶
SprintLocation - あの駒どこにいんの?を表示
func (*Position) SprintRecord ¶
SprintRecord - 棋譜表示(^~^)
func (*Position) SprintSfen ¶
SprintSfen - SFEN文字列返せよ(^~^)
type Square ¶
type Square uint32
マス番号 00~99,100~113
func GenControl ¶
GenControl - 利いているマスの一覧を返します。動けるマスではありません。