public GameManager( ILogger logger, [NotNull] IChessPlayer white, [NotNull] IChessPlayer black, [NotNull] string initialPositionFen) : this(logger, white, black, new GameBoard(initialPositionFen)) { // Nothing to do }
public GameManager( [NotNull] ILogger logger, [NotNull] IChessPlayer white, [NotNull] IChessPlayer black, [NotNull] GameBoard gameBoard) { if (gameBoard is null) { throw new ArgumentNullException(nameof(gameBoard)); } _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _instanceIndex = Interlocked.Increment(ref _instanceCounter); White = white ?? throw new ArgumentNullException(nameof(white)); Black = black ?? throw new ArgumentNullException(nameof(black)); _gameBoards = new Stack <GameBoard>(gameBoard.GetHistory()); _thread = new Thread(ExecuteGame) { Name = $@"{ThisTypeName}: Thread #{_instanceIndex}", IsBackground = true, Priority = ThreadPriority.Normal }; _getMoveStateContainer = new SyncValueContainer <GetMoveState>(null, _syncLock); _gameControl = new GameControl(); _state = GameManagerState.Paused; _whiteTotalStopwatch = new Stopwatch(); _blackTotalStopwatch = new Stopwatch(); _whiteLastMoveStopwatch = new Stopwatch(); _blackLastMoveStopwatch = new Stopwatch(); _thread.Start(); }
/// <summary> /// Initialize a new chess game session instance with the two players. /// </summary> /// <param name="whitePlayer">The first player drawing the white chess pieces.</param> /// <param name="blackPlayer">The second player drawing the black chess pieces.</param> public ChessGameSession(IChessPlayer whitePlayer, IChessPlayer blackPlayer) { WhitePlayer = whitePlayer; BlackPlayer = blackPlayer; }