Пример #1
0
 private void NotifyAboutOpponentsMove(
     IDictionary <IActorRef, bool> playersActions)
 {
     Competitors
     .QueryFor <Acknowledged>(
         (x) => GetOpponentAction(x, playersActions)
         , Context
         , _configuration.Timeout);
 }
Пример #2
0
        public TicTacToeCompetition(
            IEnumerable <IActorPlayer> competitorActors)
            : base(competitorActors)
        {
            _gameBoard  = new TicTacBoard();
            _roundIndex = 0;

            Receive <Messages.RunRound>(msg =>
            {
                var activePlayerIndex = _roundIndex % 2;
                var activePlayer      = Competitors[activePlayerIndex];
                activePlayer.AskFor <SymbolPlacement>(
                    new RunMethodMessage("place_symbol")
                    , Context
                    , TimeSpan.FromSeconds(5));
            });

            Receive <TypedAskResult <SymbolPlacement> >(msg =>
            {
                _gameBoard.AddSymbol(msg.Sender, msg.Answer);

                if (_gameBoard.IsPlayerWinner(msg.Sender) ||
                    _gameBoard.IsFull() ||
                    _gameBoard.IsIllegalMoveCommitted())
                {
                    Conclude();
                    return;
                }

                Self.Tell(new Messages.PropagateGameState());
            });

            Receive <Messages.PropagateGameState>(msg =>
            {
                Competitors
                .QueryFor <Acknowledged>(
                    (x) => new RunMethodMessage("update_game_state", _gameBoard.GetContextPayload(x, 'X', 'O'))
                    , Context
                    , TimeSpan.FromSeconds(10));
            });

            Receive <TypedQueryResult <Acknowledged> >(msg =>
            {
                _roundIndex++;
                Self.Tell(new Messages.RunRound());
            });
        }
Пример #3
0
        public DilemmaCompetition(
            IEnumerable <IActorPlayer> competitorActors
            , IDilemmaConfiguration configuration) : base(competitorActors)
        {
            IActorRef actor = null;

            _configuration = configuration;

            _playersScore = Competitors
                            .ToDictionary(x => (IActorRef)x, x => 0);

            Receive <Messages.StartRound>(msg =>
            {
                Competitors
                .QueryFor <bool>(
                    new RunMethodMessage("choose_dilemma")
                    , Context
                    , _configuration.Timeout);
            });

            Receive <TypedQueryResult <bool> >(OnDilemmaQueryReceived);
            Receive <TypedQueryResult <Acknowledged> >(OnOpponentMoveAck);
            ReceiveAny(x => Console.WriteLine("cojest"));
        }