Example #1
0
        /// <summary>
        /// Add move into history before doing it on chessboard!
        /// </summary>
        /// <param name="move"></param>
        /// <param name="turn"></param>
        /// <param name="chessboard"></param>
        public void Add(GameMove move, ChessColor turn, Chessboard chessboard)
        {
            var chessPiece = chessboard.GetChessPiece(move.From);

            if (turn == ChessColor.White)
            {
                WhiteMoves.Add(move);
            }
            else
            {
                BlackMoves.Add(move);
            }

            CheckCastlingPossibility(chessPiece, move);

            var cacheCode = chessboard.Board.GetHashCode();

            if (PositionsRepeatedTimes.ContainsKey(cacheCode))
            {
                PositionsRepeatedTimes[cacheCode]++;
            }
            else
            {
                PositionsRepeatedTimes.Add(cacheCode, 1);
            }
        }
Example #2
0
 public object Clone()
 {
     return(new GameHistory
     {
         WhiteMoves = WhiteMoves.ToList(),
         BlackMoves = BlackMoves.ToList(),
         PositionsRepeatedTimes = PositionsRepeatedTimes.CloneDictionary()
     });
 }
Example #3
0
        public GameMove?GetLastMove()
        {
            if (WhiteMoves.Count == BlackMoves.Count && WhiteMoves.Any())
            {
                return(BlackMoves.Last());
            }

            return(WhiteMoves.LastOrDefault());
        }