public void DoSelectBuildingForBuild_True()
        {
            var status = new PlayerStatus(1, "Test");
            status.ReceiveDoubloons(10);
            var mainBoardController = new MainBoardController(4);
            var playerController = new PlayerController(mainBoardController, status);

            var university = new University();
            university.ReceiveColonist();

            status.Board.BuildBuilding(university);

            var result = playerController.DoSelectBuildingToBuild(mainBoardController.Status.Buildings.First().Key, true);

            Assert.IsTrue(result);
        }
Esempio n. 2
0
        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 static List<PlayerStatus> GeneratePlayers(MainBoardController mainBoardController, int playersCount, string[] names)
        {
            var result = new List<PlayerStatus>();
            for (int i = 0; i < playersCount; i++)
            {
                var player = new PlayerStatus(i, names[i]);
                var doubloons = Constants.DoubloonsByPlayers[playersCount];
                player.ReceiveDoubloons(mainBoardController.TakeDoubloons(doubloons));
                var plantation =
                    new Plantation(Constants.PlantationsByPlayersOrder[new Tuple<int, int>(i + 1, playersCount)]);
                player.Board.BuildPlantation(plantation);

                result.Add(player);
            }

            return result;
        }
Esempio n. 4
0
 public IEnumerable<Goods> SelectGoodsForWarehouse(PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents)
 {
     throw new NotImplementedException();
 }
Esempio n. 5
0
 public Goods SelectAdditionalGoods(PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents)
 {
     throw new NotImplementedException();
 }
Esempio n. 6
0
 public MoveDirection MoveColonist(bool isHasPrivilage, PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents)
 {
     throw new NotImplementedException();
 }
Esempio n. 7
0
 private void DoCaptainAction(PlayerStatus status, IPlayerConnection connection, PlayerController controller,
     bool isHasPrivilage, List<PlayerStatus> opponents)
 {
     var goodsToShip = connection.SelectGoodsToShip(status, _mainBoardController.Status, opponents);
     controller.DoCaptainAction(goodsToShip);
 }
Esempio n. 8
0
 public IEnumerable<IISlandObject> SelectISlandObjects(bool isHasPrivilage, PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents)
 {
     throw new NotImplementedException();
 }
Esempio n. 9
0
        public RoleCardStatus SelectRole(List<RoleCardStatus> cards, PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents)
        {
            var rand = new Random();

            return cards[rand.Next(cards.Count - 1)];
        }
Esempio n. 10
0
        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);
                }
            }
        }
Esempio n. 11
0
        private void DoTradeAction(IPlayerConnection connection, bool isHasPrivilage, PlayerStatus status,
            List<PlayerStatus> opponents, PlayerController controller)
        {
            var goodsForTrade = connection.SelectGoodsToTrade(isHasPrivilage, status, _mainBoardController.Status,
                opponents);

            if (goodsForTrade.HasValue)
            {
                controller.DoTradeAction(goodsForTrade.Value, isHasPrivilage);
            }
        }
Esempio n. 12
0
 private void DoSettlerAction(IPlayerConnection connection, bool isHasPrivilage, PlayerStatus status,
     List<PlayerStatus> opponents, PlayerController controller)
 {
     var islandObjects = connection.SelectISlandObjects(isHasPrivilage, status, _mainBoardController.Status,
         opponents);
     controller.DoSettlerAction(islandObjects.ToList(), isHasPrivilage);
 }
Esempio n. 13
0
        private bool DoMayorInitAction(PlayerStatus currentPlayerStatus, MainBoardController mainBoardController,
            List<int> playerIds)
        {
            playerIds.Insert(0, currentPlayerStatus.Id);
            var playersCount = playerIds.Count;
            foreach (var playerId in playerIds)
            {
                var currentTotalColonistsCount = _mainBoardController.Status.AvailableColonists.CurrentColonistsCount;
                var status = _players[playerId].Status;
                var colonistsCount = currentTotalColonistsCount%playersCount + currentTotalColonistsCount/playersCount;

                _mainBoardController.Status.Colonists.Move(status.Board.ColonistsWarehouse, colonistsCount);

                playersCount--;
            }

            return true;
        }
Esempio n. 14
0
        private void DoMayorAction(bool isHasPrivilage, IPlayerConnection connection, PlayerStatus status,
            List<PlayerStatus> opponents,
            PlayerController controller)
        {
            if (isHasPrivilage)
            {
                var usePrivilage = connection.IsUsePrivilage(status, _mainBoardController.Status,
                    opponents);
                controller.DoMayorActionTakeAdditionalColinists(usePrivilage);
            }

            Func<MoveDirection> moveDirectionAction =
                () => connection.MoveColonist(isHasPrivilage, status, _mainBoardController.Status,
                    opponents);
            var moveDirection = moveDirectionAction();
            while (moveDirection != null)
            {
                controller.DoMoveColonistAction(moveDirection);
                moveDirection = moveDirectionAction();
            }
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
 public GoodsToShip SelectGoodsToShip(PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents)
 {
     throw new NotImplementedException();
 }
Esempio n. 17
0
 public Goods? SelectGoodsToTrade(bool isHasPrivilage, PlayerStatus status, MainBoardStatus board, IEnumerable<PlayerStatus> opponents)
 {
     throw new NotImplementedException();
 }
Esempio n. 18
0
        private SimulateTradeActionData SimulateTradeAction(PlayerStatus playerStatus)
        {
            var warehouse = playerStatus.Warehouse;
            int? cornPossiblePrice = CalculateGoodsPrice(Goods.Corn);
            int? indigoPossiblePrice = CalculateGoodsPrice(Goods.Indigo);
            int? sugarPossiblePrice = CalculateGoodsPrice(Goods.Sugar);
            int? tabaccoPossiblePrice = CalculateGoodsPrice(Goods.Tabacco);
            int? coffeePossiblePrice = CalculateGoodsPrice(Goods.Coffee);

            var result = new SimulateTradeActionData(cornPossiblePrice, indigoPossiblePrice, sugarPossiblePrice,
                tabaccoPossiblePrice, coffeePossiblePrice);

            return result;
        }
Esempio n. 19
0
 public Goods? SelectOneGoodsForStore(PlayerStatus status, IEnumerable<PlayerStatus> opponents)
 {
     throw new NotImplementedException();
 }
Esempio n. 20
0
 public bool IsTakeAdditionalColonist(bool isHasPrivilage, PlayerStatus status, MainBoardStatus board, List<PlayerStatus> opponents)
 {
     throw new NotImplementedException();
 }
Esempio n. 21
0
 public PlayerController(MainBoardController mainBoardController, PlayerStatus playerStatus)
 {
     _mainBoardController = mainBoardController;
     _playerStatus = playerStatus;
 }
Esempio n. 22
0
 public bool IsUsePrivilage(PlayerStatus status, MainBoardStatus mainBoardStatus, IEnumerable<PlayerStatus> opponents)
 {
     throw new NotImplementedException();
 }