Esempio n. 1
0
        public void SetFen(string fen)
        {
            if (string.IsNullOrEmpty(fen))
            {
                return;
            }

            if (BeforeSetFen != null)
            {
                BeforeSetFen(this, EventArgs.Empty);
            }

            //GameValidator = new GameW(fen);
            GameValidator.SetFen(fen);

            if (Flags.IsOffline)
            {
                if (Flags.IsFirtMove)
                {
                    MoveIdWhenFenIsSet = 0;
                }
                else
                {
                    MoveIdWhenFenIsSet = CurrentMove.Id;
                }

                SwapPlayersIfNeeded();
            }

            EnPassant                  = ChessLibrary.FenParser.GetEnpasantSqaure(fen);
            HalfMovesCounter           = ChessLibrary.FenParser.GetHalfMovesCounter(fen);
            FullMovesCounter           = ChessLibrary.FenParser.GetFullMovesCounter(fen);
            Flags.IsBlackShortCastling = ChessLibrary.FenParser.GetIsBlackShortCastling(fen);
            Flags.IsBlackLongCastling  = ChessLibrary.FenParser.GetIsBlackLongCastling(fen);
            Flags.IsWhiteShortCastling = ChessLibrary.FenParser.GetIsWhiteShortCastling(fen);
            Flags.IsWhiteLongCastling  = ChessLibrary.FenParser.GetIsWhiteLongCastling(fen);

            //PlayFenSound();
            if (AfterSetFen != null)
            {
                AfterSetFen(this, EventArgs.Empty);
            }
        }
Esempio n. 2
0
        private Moves LoadMoves(string pv)
        {
            Moves moves = new Moves(Moves.GetMovesTable());

            try
            {
                #region Set GameWrapper

                if (this.UciEngine.IsPonderMoveResponse)
                {
                    GameWrapper.SetFen(CurrentFen);
                    if (GameWrapper.IsLegalMove(this.Game.PonderMove) && this.Game.Flags.IsInfiniteAnalysisOff && !this.UciEngine.IsKibitzer)
                    {
                        GameWrapper.AppendMove(this.Game.PonderMove);
                    }
                }
                else
                {
                    GameWrapper.SetFen(CurrentFen);
                }

                #endregion

                #region DataMembers
                string[] pvMoves = pv.Split(" ".ToCharArray());
                currentMoveNumber = this.Game.NextMoveNo;
                isWhite           = this.Game.NextMoveIsWhite;
                int  tempMoveNumber = currentMoveNumber;
                bool isWhiteMove    = isWhite;
                Move m;
                #endregion

                #region LoadMoves
                foreach (string move in pvMoves)
                {
                    if (string.IsNullOrEmpty(move))
                    {
                        continue;
                    }
                    if (GameWrapper.IsLegalMove(move))
                    {
                        m = GetMove(move, tempMoveNumber, isWhiteMove);

                        GameWrapper.AppendMove(move);

                        moves.DataTable.ImportRow(m.DataRow);

                        isWhiteMove = !isWhiteMove;

                        if (isWhiteMove)
                        {
                            tempMoveNumber++;
                        }
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                TestDebugger.Instance.Write(ex);
            }
            return(moves);
        }
Esempio n. 3
0
        private Moves LoadMoves(string pv)
        {
            Moves moves = new Moves(Moves.GetMovesTable());

            try
            {
                GameWrapper.SetFen(fen);

                string[] pvMoves           = pv.Split(" ".ToCharArray());
                int      currentMoveNumber = 1;
                bool     isWhite           = true;
                int      tempMoveNumber    = currentMoveNumber;
                bool     isWhiteMove       = isWhite;
                Move     m;

                foreach (string move in pvMoves)
                {
                    if (string.IsNullOrEmpty(move))
                    {
                        continue;
                    }
                    if (GameWrapper.IsLegalMove(move))
                    {
                        m                            = App.Model.Move.NewMove();
                        m.Game                       = g;
                        m.MoveNo                     = tempMoveNumber;
                        m.IsWhite                    = isWhiteMove;
                        m.From                       = move.Substring(0, 2);
                        m.To                         = move.Substring(2, 2);
                        m.Piece                      = Board.PieceFromString(GameWrapper.GetMovingPiece(move));
                        m.Flags.IsCapture            = GameWrapper.IsCapturingMove(move);
                        m.Flags.IsPromotion          = GameWrapper.IsPromotionMove(move);
                        m.Flags.IsLongCastling       = GameWrapper.IsLongCastlingMove(move);
                        m.Flags.IsShortCastling      = GameWrapper.IsShortCastlingMove(move);
                        m.Flags.IsInCheck            = GameWrapper.IsCheckingMove(move);
                        m.Flags.IsMated              = GameWrapper.IsCheckMatingMove(move);
                        m.Flags.IsStaleMated         = GameWrapper.IsStaleMatingMove(move);
                        m.Flags.IsAmbigousMove       = GameWrapper.IsAmbiguousMove(move);
                        m.Flags.IsAmbigousMoveColumn = GameWrapper.IsAmbiguousFile(move);
                        m.Flags.IsAmbigousMoveRow    = GameWrapper.IsAmbiguousRank(move);

                        if (m.Flags.IsCapture)
                        {
                            m.CapturedPiece = Board.PieceFromString(GameWrapper.GetMovingPiece(move));
                        }
                        if (m.Flags.IsMated)
                        {
                            m.Flags.IsInCheck = false;
                        }
                        GameWrapper.AppendMove(move);

                        moves.DataTable.ImportRow(m.DataRow);

                        isWhiteMove = !isWhiteMove;

                        if (isWhiteMove)
                        {
                            tempMoveNumber++;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                TestDebugger.Instance.Write(ex);
            }
            return(moves);
        }