コード例 #1
0
ファイル: ExportAperyBook.cs プロジェクト: mizar/BookConv
        /// <summary>
        /// SPositionからApery用のハッシュキーを取得
        /// </summary>
        /// <param name="position"></param>
        /// <returns></returns>
        private static ulong GetKey(SPosition pos)
        {
            ulong key = 0;

            // 盤上の駒
            for (AperySquare ap = AperySquare.I9; ap < AperySquare.SquareNum; ap++)
            {
                int sq = Square.Make(ap.FileOf(), ap.RankOf());

                Piece piece = pos.GetPiece(sq);

                if (piece != Piece.NoPiece)
                {
                    int index = (int)piece.ConvAperyPiece();

                    key ^= AperyBook.ZobPiece[index][(int)ap];
                }
            }

            // 持ち駒
            for (PieceType pt = PieceType.FU; pt < PieceType.King; pt++)
            {
                int num = pos.GetHand(pos.Turn, pt);

                key ^= AperyBook.ZobHand[(int)pt - 1][num];
            }

            if (pos.Turn == PlayerColor.White)
            {
                key ^= AperyBook.ZobTurn;
            }

            return(key);
        }
コード例 #2
0
ファイル: ExportAperyBook.cs プロジェクト: mizar/BookConv
 private static int FileOf(this AperySquare sq)
 {
     return(8 - ((int)sq / 9));
 }
コード例 #3
0
ファイル: ExportAperyBook.cs プロジェクト: mizar/BookConv
 private static int RankOf(this AperySquare sq)
 {
     return((int)sq % 9);
 }