Exemplo n.º 1
0
 private void PerformMoveAsComputerIfNeeded()
 {
     if (_playersState.CurrentPlayer.IsAComputer)
     {
         _cancenTokenSource = LongRunningProcess.StartNew();
         var token = _cancenTokenSource.Token;
         _moveTask = Task.Factory.StartNew(() => _bestMoveApplier.ChooseAndPerform(token), token);
     }
 }
Exemplo n.º 2
0
 public PhutballGameState(
     IEventPublisher eventPublisher,
     IPhutballBoard phutballBoard,
     IPlayersState playersState,
     BestMoveApplier bestMoveApplier,
     Func <IHandlePlayerMoves> handlePlayerMovesFactory)
 {
     _currentState             = PhutballGameStateEnum.NotStarted;
     _eventPublisher           = eventPublisher;
     _phutballBoard            = phutballBoard;
     _playersState             = playersState;
     _bestMoveApplier          = bestMoveApplier;
     _handlePlayerMovesFactory = handlePlayerMovesFactory;
     _handlePlayerMoves        = handlePlayerMovesFactory();
     _eventPublisher.Subscribe <PlayerWonEvent>((e) => CurrentPlayerWon());
     _eventPublisher.Subscribe <PlayerOnTheMoveChanged>(OnPlayerOnTheMoveChanged);
     _eventPublisher.Subscribe <ComputerStartedMoving>((e) => LongRunningProcess.Clear());
 }
Exemplo n.º 3
0
 private void CancelComputerMove()
 {
     if (_moveTask != null)
     {
         _cancenTokenSource.Cancel();
         try
         {
             _moveTask.Wait(_cancenTokenSource.Token);
         }
         catch (OperationCanceledException)
         {
             _moveTask.Wait();
         }
         _moveTask = null;
         LongRunningProcess.Clear();
         _eventPublisher.Publish(new ComputerStartedMoving());
     }
 }