/// <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); }
/// <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); }
/// <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; }
/// <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; }