Exemplo n.º 1
0
 private void PayForLunchAndSetMarkers(DayOfWeek day)
 {
     foreach (PlayerBase player in Players)
     {
         int   cost         = 0;
         Place visitedPlace = PublicBoard.VisitedPlaces[player][day];
         if (visitedPlace is RestaurantPlace)
         {
             RestaurantPlace restaurant = visitedPlace as RestaurantPlace;
             if (PublicBoard.RestaurantHasModifierForThisDay <OneDollarIncrease>(restaurant.Identifier, day))
             {
                 cost++;
             }
             if (PublicBoard.RestaurantHasModifierForThisDay <OneDollarDiscount>(restaurant.Identifier, day))
             {
                 cost--;
             }
             cost += restaurant.Cost;
             if (cost >= 4 && player.Character == Character.CEO)
             {
                 cost--;
             }
         }
         PublicBoard.AddCashToPlayer(-cost, player);
     }
     ;
 }
Exemplo n.º 2
0
        private void ScorePreferencesAndLoyalty()
        {
            foreach (PlayerBase player in this.Players)
            {
                PublicBoard.SetUndesiredRestaurantOfTheWeek(player, _preferenceCards[player].Undesired);
                LoyaltyCard loyalty         = _loyaltyCards[player];
                int         visitsToLoyalty = 0;
                foreach (DayOfWeek day in Extensions.Weekdays)
                {
                    if (PublicBoard.VisitedPlaces[player][day] is RestaurantPlace && (PublicBoard.VisitedPlaces[player][day] as RestaurantPlace).Identifier == loyalty.Restaurant)
                    {
                        visitsToLoyalty++;
                    }
                    if (PublicBoard.RestaurantWithMajority(day) == _preferenceCards[player].FirstPreference && PublicBoard.IsPlayerInMajority(day, player))
                    {
                        PublicBoard.AddVictoryPointsToPlayer(_preferenceCards[player].FirstPreferenceBonus, player, VictoryPointsSource.PreferenceCard);
                    }
                    if (PublicBoard.RestaurantWithMajority(day) == _preferenceCards[player].SecondPreference && PublicBoard.IsPlayerInMajority(day, player))
                    {
                        PublicBoard.AddVictoryPointsToPlayer(_preferenceCards[player].SecondPreferenceBonus, player, VictoryPointsSource.PreferenceCard);
                    }
                    if (PublicBoard.Restaurants[_preferenceCards[player].Undesired].Visitors[day].Contains(player))
                    {
                        ApplyPunishment(_preferenceCards[player].Punishment, player);
                    }
                    if (PublicBoard.IsPlayerAlone(day, player.Left))
                    {
                        ApplyPunishment(_preferenceCards[player].SideBan, player.Left);
                    }
                    if (PublicBoard.IsPlayerAlone(day, player.Right))
                    {
                        ApplyPunishment(_preferenceCards[player].SideBan, player.Right);
                    }
                }

                PublicBoard.AddVictoryPointsToPlayer(loyalty.VictoryPoints[visitsToLoyalty], player, VictoryPointsSource.LoyaltyCard);

                switch (_loyaltyCards[player].Type)
                {
                case LoyaltyType.VIP:
                    LoyaltyCardVIP cardVIP = _loyaltyCards[player] as LoyaltyCardVIP;
                    if (visitsToLoyalty >= 2)
                    {
                        List <int>         desserts    = player.ChooseDessert(PublicBoard, DessertBuffet.TakeChoices(cardVIP.DessertOptions), cardVIP.DessertTakeCount);
                        List <DessertCard> chosenCards = this.DessertBuffet.RemoveDessertAtIndexes(desserts);
                        _dessertCards[player].AddRange(chosenCards);
                    }
                    break;

                case LoyaltyType.GOLD:
                    LoyaltyCardGOLD cardGOLD = _loyaltyCards[player] as LoyaltyCardGOLD;
                    if (visitsToLoyalty >= 3)
                    {
                        PublicBoard.AddCashToPlayer(cardGOLD.ExtraCash, player);
                    }
                    break;
                }
            }
        }
Exemplo n.º 3
0
        private void ScoreVPs(DayOfWeek day)
        {
            foreach (Restaurant restaurant in Extensions.Restaurants)
            {
                foreach (PlayerBase player in PublicBoard.Restaurants[restaurant].Visitors[day])
                {
                    foreach (FoodType food in PublicBoard.FavoriteFood[player])
                    {
                        if (PublicBoard.Restaurants[restaurant].Menu.Contains(food))
                        {
                            PublicBoard.AddVictoryPointsToPlayer(1, player, VictoryPointsSource.Food);
                        }
                    }
                }
            }

            Players.ActionForCharacter(Character.HR, player =>
            {
                if (PublicBoard.IsPlayerInMajority(day, player))
                {
                    if (player.ShouldSwitchCashForVPAndTP(PublicBoard, -1, 1, 0))
                    {
                        PublicBoard.AddCashToPlayer(-1, player);
                        PublicBoard.AddVictoryPointsToPlayer(1, player, VictoryPointsSource.Character);
                    }
                }
            });
            Players.ActionForCharacter(Character.Marketing, player =>
            {
                if (!PublicBoard.IsPlayerInMajority(day, player))
                {
                    if (player.ShouldSwitchCashForVPAndTP(PublicBoard, -3, 2, 1))
                    {
                        PublicBoard.AddCashToPlayer(-3, player);
                        PublicBoard.AddVictoryPointsToPlayer(2, player, VictoryPointsSource.Character);
                        PublicBoard.AddTeamScore(1);
                    }
                }
            });
            Players.ActionForCharacter(Character.Programmer, player =>
            {
                if (!PublicBoard.IsPlayerInMajority(day, player) && !PublicBoard.IsPlayerAlone(day, player))
                {
                    PublicBoard.AddVictoryPointsToPlayer(3, player, VictoryPointsSource.Character);
                }
            });
            Players.ActionForCharacter(Character.Environment, player =>
            {
                if (PublicBoard.VisitedPlaces[player][day].Menu.Contains(FoodType.Vegetarian))
                {
                    PublicBoard.AddVictoryPointsToPlayer(2, player, VictoryPointsSource.Character);
                }
            });
        }
Exemplo n.º 4
0
        private void ApplyPunishment(Punishment punishment, PlayerBase target)
        {
            switch (punishment.Type)
            {
            case PunishmentType.Cash:
                if (PublicBoard.PlayerCash[target] < Math.Abs(punishment.Value))
                {
                    PublicBoard.AddCashToPlayer(-PublicBoard.PlayerCash[target], target);
                }
                else
                {
                    PublicBoard.AddCashToPlayer(punishment.Value, target);
                }
                break;

            case PunishmentType.VictoryPoints:
                PublicBoard.AddVictoryPointsToPlayer(punishment.Value, target, VictoryPointsSource.Punishment);
                break;
            }
        }
Exemplo n.º 5
0
        private void ScorePlayerBonus()
        {
            foreach (PlayerBonusCard playerBonus in this.PublicBoard.CurrentPlayerBonuses)
            {
                foreach (PlayerBase player in this.Players)
                {
                    if (playerBonus.HasCompletedForPlayer(player, PublicBoard))
                    {
                        this.PublicBoard.AddVictoryPointsToPlayer(playerBonus.Points, player, VictoryPointsSource.PlayerBonus);
                        if (player.Character == Character.WarehouseManager)
                        {
                            Restaurant restaurant = player.ChooseRestaurantToAdvanceTrack(PublicBoard);
                            if (this.PublicBoard.RestaurantTracks[restaurant].AdvancePlayer(player))
                            {
                                List <DessertCard> cards           = new List <DessertCard>();
                                List <int>         chosenCardIndex = player.ChooseDessert(this.PublicBoard, this.DessertBuffet.TakeChoices(this.PublicBoard.RestaurantTracks[restaurant].CardAmount), 1);
                                List <DessertCard> chosenCards     = this.DessertBuffet.RemoveDessertAtIndexes(chosenCardIndex);
                                _dessertCards[player].AddRange(chosenCards);
                            }
                        }
                        if (player.Character == Character.Finance)
                        {
                            PublicBoard.AddCashToPlayer(4, player);
                        }
                    }
                }
            }

            foreach (PlayerBase player in this.Players)
            {
                if (player.Character == Character.ForeignAffairs)
                {
                    int count = PublicBoard.VisitedPlaces[player].Select(x => x.Value).Where(x => x is RestaurantPlace).Distinct().Count();
                    PublicBoard.AddVictoryPointsToPlayer(count.Fibonacci(), player, VictoryPointsSource.Character);
                }
            }
        }