■
__Boardの関数列挙
- __Board()
- __Board(string)
- ~__Board()
- void set(string)
- bool set_position(string)
- bool set_hcp(char*)
- bool set_psfen(char*)
- void reset()
- string dump()
- void push(int)
- void pop()
- int peek()
- bool is_game_over()
- int isDraw(int)
- move(int, int, bool)
- drop_move(int, int)
- int move_from_usi(string&)
- int move_from_csa(string&)
- int move_from_move16(unsigned short)
- int move_from_psv(unsigned short)
- int turn()
- int ply()
- string toSFEN()
- string toCSAPos()
- void toHuffmanCodedPos(char*)
- void toPackedSfen(char*)
- int piece(int sq)
- void toPackedSfen(char*)
- int piece (int)
- bool inCheck()
- int mateMoveIn1Ply()
- int mateMove(int)
- bool is_mate(int)
- unsigned long long getKey()
- bool moveIsLegal(int)
- bool is_nyugoyoku()
- bool isOK()
- vector
piece_in_hand(int) - vector
pieces() - void piece_planes(char*)
- void piece_planes_rotate(char*)
- unsigned long long bookKey()
- void bbToVector(PiceType, Color, Piece, vector
)
__Boardの変数
- Position pos
- deque<pair<Move, StateInfo>> history
ポインタ
スマートポインタについて読んだ C++11スマートポインタ入門
__LegalMoveListはshared_ptrでMoveListを管理している.
理由はよくわからない.
所有権を複数で保つ必要がなさそうに見えるが.
MoveList
generateLegalMoves
関数のながれは次のよう
- generateMoves(moveList, pos)
- GenerateMoves<Legal, US>()(moveList, pos)
- GenerateMoves<Eavasion, US>()(moveList, pos)
- makeNonPromoteMove
(King, ksq, to, pos) - GeneratePieceMoves<Evasion, Pawn, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<Evasion, Lance, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<Evasion, Knight, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<Evasion, Silver, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<Evasion, Bishop, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<Evasion, Rook, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<Evasion, GoldHorseDragon, US, false>()(moveList, pos, target, ksq)
- makeNonPromoteMove
- GenerateMoves<NonEavasion, US>()(moveList, pos)
- generateDropMoves
(moveList, pos, target) - GeneratePieceMoves<NonEvasion, Pawn, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<NonEvasion, Lance, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<NonEvasion, Knight, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<NonEvasion, Silver, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<NonEvasion, Bishop, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<NonEvasion, Rook, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<NonEvasion, GoldHorseDragon, US, false>()(moveList, pos, target, ksq)
- GeneratePieceMoves<NonEvasion, King, US, false>()(moveList, pos, target, ksq)
- generateDropMoves
- GenerateMoves<Eavasion, US>()(moveList, pos)
王手回避のEvasionの方は難しいので,NonEvasionを読む.
なんか読めた気がする.トップダウン・アプローチ大事. 関係関数省略できるもんね. GeneratePiceMovesのPawnと,Lanceを読んだ. bitboardの使い方がやっとわかった.PawnとLanceの合法手生成まででいちど書いてみるのもいいかもしれない. 一番めんどくさいのは,事前計算部分だと思う. 具体的にはinit.cppで作っているLanceAttackみたいな配列の計算. これは色,香車の位置,駒の配置の3軸のパターンで可能な移動先をbitboardとして返してくれる配列. これの計算パートはまだ読んでいない.... そうでした.ここが不思議かもしれない.