public OrderingSubstrategy(GameStarted gameInfo, CommonBoard board)
        {
            _board = board;
            var sortedTeam = new List <int>(gameInfo.AlliesIds);

            sortedTeam.Add(gameInfo.AgentId);
            sortedTeam.Remove(gameInfo.LeaderId);
            sortedTeam.Sort();
            sortedTeam.Add(gameInfo.LeaderId);
            int myIndex = sortedTeam.IndexOf(gameInfo.AgentId);

            if (myIndex != 0)
            {
                board.neighborIds.nearGoal = sortedTeam[myIndex - 1];
            }
            if (myIndex != sortedTeam.Count - 1)
            {
                board.neighborIds.nearFront = sortedTeam[myIndex + 1];
            }
            List <int> subareasLengths = GetSubareasLengths(gameInfo);

            board.MyBounds = GetMyBounds(gameInfo, subareasLengths, myIndex);

            board.MySubareaFields = new CommonBoard.PosField[gameInfo.BoardSize.X.Value, board.MyAreaSize];
            for (int i = 0; i < gameInfo.BoardSize.X.Value; i++)
            {
                for (int j = 0; j < board.MyAreaSize; j++)
                {
                    board.MySubareaFields[i, j] = new CommonBoard.PosField(i, board.MyBounds.Min + j);
                }
            }
            if (_board.Type != CommonBoard.AgentType.Goalie)
            {
                for (int i = 0; i < gameInfo.BoardSize.X.Value; i++)
                {
                    board.FieldsToPlaceOn[i] = new CommonBoard.PosField(i,
                                                                        (board.Team == Team.Blue ? board.MyBounds.Min - 1 : board.MyBounds.Max + 1));
                }
            }
            if (_board.Type != CommonBoard.AgentType.Leader)
            {
                for (int i = 0; i < gameInfo.BoardSize.X.Value; i++)
                {
                    board.FieldsToTakeFrom[i] = board.GetFieldAt(new Point(i,
                                                                           (board.Team == Team.Red ? board.MyBounds.Min : board.MyBounds.Max)));
                }
            }
            //Log.Debug("I'm at {@position} and I should be between {@bounds}",
            //    gameInfo.Position, board.MyBounds);
            //Log.Debug("I'm {agentId} and my neighbors are {neighborNearGoal} and {neighborNearFront}",
            //    gameInfo.AgentId, board.neighborIds.nearGoal, board.neighborIds.nearFront);
        }
Esempio n. 2
0
        public MasterStrategy(GameStarted gameInfo)
        {
            CommonBoard.AgentType agentType;
            if (gameInfo.AlliesIds.Count() == 0)
            {
                return;
            }
            if (gameInfo.AlliesIds.Count() == 1)
            {
                agentType =
                    gameInfo.LeaderId == gameInfo.AgentId ? CommonBoard.AgentType.Leader
                : CommonBoard.AgentType.Goalie;
            }
            else
            {
                agentType =
                    gameInfo.LeaderId == gameInfo.AgentId ? CommonBoard.AgentType.Leader
                    :
                    (
                        gameInfo.AlliesIds
                        .Where(allyId => allyId != gameInfo.LeaderId)
                        .Min() > gameInfo.AgentId
                    ? CommonBoard.AgentType.Goalie
                    : CommonBoard.AgentType.Standard
                    );
            }
            _board = new CommonBoard(gameInfo, agentType);
            _substrategies.Add(new OrderingSubstrategy(gameInfo, _board));
            switch (_board.Type)
            {
            case CommonBoard.AgentType.Standard:
                _substrategies.Add(new NormalSubstrategy(_board));
                break;

            case CommonBoard.AgentType.Goalie:
                _substrategies.Add(new GoalieSubstrategy(_board));
                break;

            case CommonBoard.AgentType.Leader:
                _substrategies.Add(new LeaderSubstrategy(_board));
                break;
            }
        }
Esempio n. 3
0
 public NormalSubstrategy(CommonBoard board)
 {
     _board = board;
 }
Esempio n. 4
0
 public GoalieSubstrategy(CommonBoard board)
 {
     _board = board;
 }
Esempio n. 5
0
 public LeaderSubstrategy(CommonBoard board)
 {
     _board = board;
 }