예제 #1
0
        /// <summary>
        /// 駒の手番や成・不成りを変更します。(局面編集モードで使います)
        /// </summary>
        private BoardPiece SuccPiece(BoardPiece piece, Square square)
        {
            var clone = piece.Clone();
            var type  = clone.PieceType;

            // 金玉コンビは成れません。
            if (type == PieceType.Gyoku ||
                type == PieceType.Kin)
            {
                clone.BWType = piece.BWType.Flip();
            }
            else
            {
                if (!clone.IsPromoted)
                {
                    clone.IsPromoted = true;
                }
                else
                {
                    clone.BWType     = piece.BWType.Flip();
                    clone.IsPromoted = false;
                }
            }

            // 成りを強制する場合もあります。
            if (Board.IsPromoteForce(clone.Piece, clone.BWType, square))
            {
                clone.IsPromoted = true;
            }

            return(clone);
        }
예제 #2
0
        /// <summary>
        /// 駒の手番や成・不成りを変更します。(局面編集モードで使います)
        /// </summary>
        private BoardPiece SuccPiece(BoardPiece piece, Square square)
        {
            var clone = piece.Clone();
            var type  = clone.PieceType;

            if (clone.PieceType == PieceType.Gyoku)
            {
                // 玉は同じ側に2つあることができません。
                if (Board.GetGyoku(clone.BWType.Flip()) == null)
                {
                    clone.BWType = clone.BWType.Flip();
                }
            }
            else if (clone.PieceType == PieceType.Kin)
            {
                // 金は成れません。
                clone.BWType = clone.BWType.Flip();
            }
            else
            {
                if (!clone.IsPromoted)
                {
                    clone.IsPromoted = true;
                }
                else
                {
                    clone.BWType     = clone.BWType.Flip();
                    clone.IsPromoted = false;
                }
            }

            // 歩の場合は二歩を警戒する必要があります。
            if (clone.Piece == Piece.Hu &&
                Board.GetPawnCount(clone.BWType, square.File) > 0)
            {
                clone.IsPromoted = true;
            }

            // 成りを強制する場合もあります。
            if (Board.IsPromoteForce(clone.Piece, clone.BWType, square))
            {
                clone.IsPromoted = true;
            }

            return(clone);
        }
예제 #3
0
        /// <summary>
        /// 駒の手番や成・不成りを変更します。(局面編集モードで使います)
        /// </summary>
        private BoardPiece SuccPiece(BoardPiece piece, Square square)
        {
            var clone = piece.Clone();
            var type = clone.PieceType;

            if (clone.PieceType == PieceType.Gyoku)
            {
                // 玉は同じ側に2つあることができません。
                if (Board.GetGyoku(clone.BWType.Flip()) == null)
                {
                    clone.BWType = clone.BWType.Flip();
                }
            }
            else if (clone.PieceType == PieceType.Kin)
            {
                // 金は成れません。
                clone.BWType = clone.BWType.Flip();
            }
            else
            {
                if (!clone.IsPromoted)
                {
                    clone.IsPromoted = true;
                }
                else
                {
                    clone.BWType = clone.BWType.Flip();
                    clone.IsPromoted = false;
                }
            }

            // 歩の場合は二歩を警戒する必要があります。
            if (clone.Piece == Piece.Hu &&
                Board.IsDoublePawn(clone.BWType, square))
            {
                clone.IsPromoted = true;
            }

            // 成りを強制する場合もあります。
            if (Board.IsPromoteForce(clone.Piece, clone.BWType, square))
            {
                clone.IsPromoted = true;
            }

            return clone;
        }
예제 #4
0
        /// <summary>
        /// 駒の手番や成・不成りを変更します。(局面編集モードで使います)
        /// </summary>
        private BoardPiece SuccPiece(BoardPiece piece, Square square)
        {
            var clone = piece.Clone();
            var type = clone.PieceType;

            // 金玉コンビは成れません。
            if (type == PieceType.Gyoku ||
                type == PieceType.Kin)
            {
                clone.BWType = piece.BWType.Flip();
            }
            else
            {
                if (!clone.IsPromoted)
                {
                    clone.IsPromoted = true;
                }
                else
                {
                    clone.BWType = piece.BWType.Flip();
                    clone.IsPromoted = false;
                }
            }

            // 成りを強制する場合もあります。
            if (Board.IsPromoteForce(clone.Piece, clone.BWType, square))
            {
                clone.IsPromoted = true;
            }

            return clone;
        }