//Сохранить состояние игры(сохр. в формате ФЭН) internal void ParseGameToFEN() { Square sqBK = desk.FindKing(Color.black); Square sqWK = desk.FindKing(Color.white); King bk = (King)sqBK.ownedPiece; King wk = (King)sqWK.ownedPiece; notation.PiecePosition = FenPieces(); notation.InGameColor = inGameColor; notation.Castling = bk.CastlingKey + wk.CastlingKey; //notation.EnPassant = false; notation.HalfMoveClock = 0; notation.MoveNumber = moveNumber; }
public void CheckCastling(Color kingColor) { Square ksq = desk.FindKing(kingColor);; King k = (King)ksq.ownedPiece; Vectors kingVector = (kingColor == Color.white) ? whiteMoves.Find(item => item.vectorPieceKey == whiteKing) : blackMoves.Find(item => item.vectorPieceKey == blackKing); if (!IsCheck()) { if (k.CanMakeShortCastling(desk.deskSquares, ksq)) { if (k.pieceColor == Color.black && !IsMateAfterMove("ke8f8", kingVector) && !IsMateAfterMove("ke8g8", kingVector)) { kingVector.avaibleSquares.Add(" 0-0 "); } if (k.pieceColor == Color.white && !IsMateAfterMove("ke1f1", kingVector) && !IsMateAfterMove("ke1g1", kingVector)) { kingVector.avaibleSquares.Add(" 0-0 "); } } if (k.CanMakeLongCastling(desk.deskSquares, ksq)) { if (k.pieceColor == Color.black && !IsMateAfterMove("ke8d8", kingVector) && !IsMateAfterMove("ke8c8", kingVector)) { kingVector.avaibleSquares.Add("0-0-0"); } if (k.pieceColor == Color.white && !IsMateAfterMove("ke1d1", kingVector) && !IsMateAfterMove("ke1c1", kingVector)) { kingVector.avaibleSquares.Add("0-0-0"); } } } }