/// <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); } }
public object Clone() { return(new GameHistory { WhiteMoves = WhiteMoves.ToList(), BlackMoves = BlackMoves.ToList(), PositionsRepeatedTimes = PositionsRepeatedTimes.CloneDictionary() }); }
public GameMove?GetLastMove() { if (WhiteMoves.Count == BlackMoves.Count && WhiteMoves.Any()) { return(BlackMoves.Last()); } return(WhiteMoves.LastOrDefault()); }