示例#1
0
 public GetMoveState(GameManagerState state, [NotNull] GameBoard activeBoard)
 {
     _cancellationTokenSource = new CancellationTokenSource();
     State       = state;
     ActiveBoard = activeBoard.EnsureNotNull();
     IsCancelled = new SyncValueContainer <bool>();
 }
示例#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();
        }