示例#1
0
        public void StartGame(Dictionary <int, Player> players)
        {
            List <Message> messages = new List <Message>();

            foreach (var player in players)
            {
                var message = new Message <GameStarted>()
                {
                    AgentId        = player.Key,
                    MessagePayload = new GameStarted()
                    {
                        AgentId   = player.Key,
                        AlliesIds = players.Values.Where(p => p.Team == player.Value.Team && p != player.Value).Select(p => p.AgentId).ToList(),
                        BoardSize = new BoardSize()
                        {
                            X = _configuration.BoardX, Y = _configuration.BoardY
                        },
                        EnemiesIds      = players.Values.Where(p => p.Team != player.Value.Team).Select(p => p.AgentId).ToList(),
                        GoalAreaSize    = _configuration.GoalAreaHeight,
                        LeaderId        = players.Values.Where(p => p.Team == player.Value.Team && p.IsLeader).Select(p => p.AgentId).FirstOrDefault(),
                        NumberOfGoals   = _configuration.NumberOfGoals,
                        NumberOfPieces  = _configuration.NumberOfPieces,
                        NumberOfPlayers = new NumberOfPlayers()
                        {
                            Allies  = players.Values.Where(p => p.Team == player.Value.Team && p != player.Value).Count(),
                            Enemies = players.Values.Where(p => p.Team != player.Value.Team).Count()
                        },
                        Penalties = new Penalties()
                        {
                            CheckForSham        = _configuration.CheckForShamPenalty.ToString(),
                            DestroyPiece        = _configuration.DestroyPiecePenalty.ToString(),
                            Discovery           = _configuration.DiscoveryPenalty.ToString(),
                            InformationExchange = _configuration.InformationExchangePenalty.ToString(),
                            Move     = _configuration.MovePenalty.ToString(),
                            PutPiece = _configuration.PutPenalty.ToString()
                        },
                        Position = new Position()
                        {
                            X = player.Value.X,
                            Y = player.Value.Y
                        },
                        ShamPieceProbability = _configuration.ShamPieceProbability,
                        TeamId = player.Value.Team.AsString()
                    }
                };
                messages.Add(message);
            }
            messages.ForEach(m => _communicator.Send(m));
        }
示例#2
0
        public void GameEndHandler(Map map, IMessageSenderReceiver communicator)
        {
            string winner  = map.Winner == Team.Red ? "red" : "blue";
            var    message = new Message <GameEnded>()
            {
                MessagePayload = new GameEnded()
                {
                    Winner = winner
                }
            };

            foreach (Player p in map.Players.Values)
            {
                Log.Debug("Processing GameEnded message to agent: {id}", p.AgentId);
                message.AgentId = p.AgentId;
                communicator.Send(message);
            }
        }
示例#3
0
 public void Send(Message message)
 {
     _adaptedSenderReceiver.Send(message);
 }