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