private void CheckForNextRound(MainBoardStatus status) { var allRoleCards = status.RoleCards; if (allRoleCards.Count(x => x.IsUsed) == PlayersCount) { allRoleCards.ToList().ForEach(x => x.NextRound()); } }
public IBuilding SelectBuildingToBuild(bool isHasPrivilage, PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents) { var allBuildings = board.Buildings.Where(x => x.Value > 0); var param = new BuilderParameters(); status.Board.Buildings.OfType<BuildingBase<BuilderParameters>>() .ToList() .ForEach(x => x.DoAction(ref param)); var discount = status.Board.Quarries.Count(x => x.IsActive); var availableBuldings = allBuildings.Where(x => x.Key.Cost - Math.Min(discount, x.Key.Discount) <= status.Doubloons).ToArray(); var building = availableBuldings[new Random().Next(availableBuldings.Count() - 1)]; return building.Key; }
public MainBoardController(int playersCount) { _status = new MainBoardStatus(playersCount); }
public void Clone_Successfully() { var status = new MainBoardStatus(4); }
public IEnumerable<IISlandObject> SelectISlandObjects(bool isHasPrivilage, PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents) { throw new NotImplementedException(); }
public Goods? SelectGoodsToTrade(bool isHasPrivilage, PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents) { throw new NotImplementedException(); }
public GoodsToShip SelectGoodsToShip(PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents) { throw new NotImplementedException(); }
public IEnumerable<Goods> SelectGoodsForWarehouse(PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents) { throw new NotImplementedException(); }
public Goods SelectAdditionalGoods(PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents) { throw new NotImplementedException(); }
public MoveDirection MoveColonist(bool isHasPrivilage, PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents) { throw new NotImplementedException(); }
public bool IsUsePrivilage(PlayerStatus status, MainBoardStatus mainBoardStatus, IEnumerable<PlayerStatus> opponents) { throw new NotImplementedException(); }
public bool IsTakeAdditionalColonist(bool isHasPrivilage, PlayerStatus status, MainBoardStatus board, List<PlayerStatus> opponents) { throw new NotImplementedException(); }
public RoleCardStatus SelectRole(List<RoleCardStatus> cards, PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents) { var rand = new Random(); return cards[rand.Next(cards.Count - 1)]; }
private void DoBuilderAction(IPlayerConnection connection, bool isHasPrivilage, PlayerStatus status, MainBoardStatus board, List<PlayerStatus> opponents, PlayerController controller) { var isSuccessfull = false; IBuilding selectedBuilding = null; while (!isSuccessfull) { var building = connection.SelectBuildingToBuild(isHasPrivilage, status, board, opponents); isSuccessfull = controller.DoSelectBuildingToBuild(building, isHasPrivilage); if (isSuccessfull && building != null) { selectedBuilding = status.Board.Buildings.Single(x => x.GetType() == building.GetType()); } } if (selectedBuilding == null) { return; } var param = new BuilderParameters(); status.Board.Buildings.OfType<BuildingBase<BuilderParameters>>().Where(x=>x.IsActive).ToList().ForEach(x=>x.DoAction(ref param)); if (param.TakeAdditionalColonist && board.Colonists.CurrentColonistsCount > 0) { var isTakeAdditionalColonist = connection.IsTakeAdditionalColonist(isHasPrivilage, status, board, opponents); if (isTakeAdditionalColonist) { board.Colonists.Move(selectedBuilding); } } }
private void DoCraftsmanAction(IPlayerConnection currentConnection, PlayerController currentPlayerController, MainBoardStatus boardStatus, IEnumerable<PlayerStatus> currentOpponents, PlayerStatus currentPlayerStatus) { var players = GeneratePlayersOrder(_governor); foreach (var player in players) { var status = _players[player].Status; var param = new CraftsmanParameters(); status.Board.Buildings.OfType<GoodsFactoryBase>().ToList().ForEach(x => x.DoAction(ref param)); var plantations = status.Board.Plantations.Where(x => x.IsActive).Select(x => x.Type).GroupBy(x => x); var production = plantations.ToDictionary(plantation => plantation.Key, plantation => Math.Min(plantation.Count(), param.GoodsProduction[plantation.Key])); currentPlayerController.DoCraftsmanAction(production); } var additionalGoods = currentConnection.SelectAdditionalGoods(currentPlayerStatus, boardStatus, currentOpponents); currentPlayerController.DoCraftsmanActionReceiveAdditionalGoods(additionalGoods); }