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); }
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; } }
public NormalSubstrategy(CommonBoard board) { _board = board; }
public GoalieSubstrategy(CommonBoard board) { _board = board; }
public LeaderSubstrategy(CommonBoard board) { _board = board; }