예제 #1
0
        //Сохранить состояние игры(сохр. в формате ФЭН)
        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;
        }
예제 #2
0
        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");
                    }
                }
            }
        }