Beispiel #1
0
 public GameManager(
     ILogger logger,
     [NotNull] IChessPlayer white,
     [NotNull] IChessPlayer black,
     [NotNull] string initialPositionFen)
     : this(logger, white, black, new GameBoard(initialPositionFen))
 {
     // Nothing to do
 }
Beispiel #2
0
        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;
 }