Exemplo n.º 1
0
 public void Play(IList <ITurnPlayer> players, IList <IStructureCard> discardedCards)
 {
     LoggerHelper.Info("Starting to play turn for all players");
     foreach (var player in players)
     {
         var neighbors = NeighborsHelper.GetNeighbors(players.Select(p => (IPlayer)p).ToList(), player);
         Play(player, (IGamePlayer)neighbors[NeighborsHelper.RIGHTDIRECTION], (IGamePlayer)neighbors[NeighborsHelper.LEFTDIRECTION], discardedCards);
     }
 }
Exemplo n.º 2
0
 public void GetMultipleTimesRewards(IList <ITurnPlayer> players, IList <IStructureCard> discardedCards)
 {
     LoggerHelper.Info("Getting multiple times rewards for players.");
     foreach (var player in players)
     {
         var neighbors = NeighborsHelper.GetNeighbors(players.Select(p => (IPlayer)p).ToList(), player);
         foreach (var e in player.Wonder.EffectsAvailable)
         {
             GetMultipleTimesRewards(e, player, (IGamePlayer)neighbors[NeighborsHelper.RIGHTDIRECTION], (IGamePlayer)neighbors[NeighborsHelper.LEFTDIRECTION], discardedCards);
         }
     }
 }
Exemplo n.º 3
0
        static void CurrentData(IGamePlayer player)
        {
            WonderStage(player);
            Console.WriteLine("Coins: " + player.Coins);
            CurrentResources(player);
            CurrentCards(player);
            Console.WriteLine();
            var neighbors = NeighborsHelper.GetNeighbors(manager.Players.Select(p => (IPlayer)p).ToList(), manager.Players.First(p => p.Name == player.Name));

            Console.Write("Right ");
            CurrentResources((IGamePlayer)neighbors[NeighborsHelper.RIGHTDIRECTION], true);
            Console.Write("Left ");
            CurrentResources((IGamePlayer)neighbors[NeighborsHelper.LEFTDIRECTION], true);
            Console.WriteLine();
        }
Exemplo n.º 4
0
 public void GetRewards(IList <ITurnPlayer> players, IList <IStructureCard> discardedCards)
 {
     LoggerHelper.Info("Getting rewards for players.");
     foreach (var player in players)
     {
         var neighbors = NeighborsHelper.GetNeighbors(players.Select(p => (IPlayer)p).ToList(), player);
         if (player.ExecutedAction == TurnAction.BuyCard)
         {
             GetCardRewards(player, (IGamePlayer)neighbors[NeighborsHelper.RIGHTDIRECTION], (IGamePlayer)neighbors[NeighborsHelper.LEFTDIRECTION], discardedCards);
         }
         if (player.ExecutedAction == TurnAction.BuildWonderStage)
         {
             GetWonderRewards(player, (IGamePlayer)neighbors[NeighborsHelper.RIGHTDIRECTION], (IGamePlayer)neighbors[NeighborsHelper.LEFTDIRECTION], discardedCards);
         }
     }
 }
Exemplo n.º 5
0
        public void ResolveMilitaryConflicts(IList <IGamePlayer> players, Age age)
        {
            LoggerHelper.Info("Resolving military conflicts.");
            foreach (var player in players)
            {
                var neighbors   = NeighborsHelper.GetNeighbors(players.Select(p => (IPlayer)p).ToList(), player);
                var rightPlayer = (IGamePlayer)neighbors[NeighborsHelper.RIGHTDIRECTION];
                var leftPlayer  = (IGamePlayer)neighbors[NeighborsHelper.LEFTDIRECTION];

                if (CompareMilitaryPower(player, rightPlayer))
                {
                    CollectTokens(player, rightPlayer, age);
                }
                if (CompareMilitaryPower(player, leftPlayer))
                {
                    CollectTokens(player, leftPlayer, age);
                }
            }
        }
Exemplo n.º 6
0
        private static void ExtraChoicePlay()
        {
            foreach (ITurnPlayer player in manager.Players)
            {
                if (player.ExecutedAction == TurnAction.BuildWonderStage && player.Wonder.CurrentStage != null && player.Wonder.CurrentStage.Effects.Any(e => e.Type == EffectType.PlayOneDiscardedCard))
                {
                    Console.WriteLine("Please select one discarded card to play for free:");
                    for (int i = 0; i < manager.DiscardPile.Count; i++)
                    {
                        var card = manager.DiscardPile[i];
                        ShowCardOption(card, i + 1);
                    }
                    SelectAdditionalCard(player);
                }
                if (player.Wonder.EffectsAvailable.Any(e => e.Type == EffectType.CopyGuildFromNeighbor) && manager.CurrentTurn == 6 && manager.CurrentAge == Age.III)
                {
                    Console.WriteLine("Select guild to copy from your neighbor.");

                    var neighbors = NeighborsHelper.GetNeighbors(manager.Players.Select(p => (IPlayer)p).ToList(), player);
                    var options   = neighbors[NeighborsHelper.LEFTDIRECTION].Cards
                                    .Where(c => c.Type == StructureType.Guilds).ToList();
                    options.AddRange(neighbors[NeighborsHelper.RIGHTDIRECTION].Cards
                                     .Where(c => c.Type == StructureType.Guilds));

                    if (options.Any())
                    {
                        int i         = 0;
                        var cardNames = new List <CardName>();
                        foreach (var c in options)
                        {
                            ShowCardOption(c, ++i);
                            cardNames.Add(c.Name);
                        }
                        CopyGuildCard(player, cardNames);
                    }
                }
            }
        }
Exemplo n.º 7
0
        public void GetPostGameRewards(IList <IGamePlayer> players)
        {
            LoggerHelper.Info("Getting post game rewards for players.");
            foreach (var p in players)
            {
                foreach (var e in p.Wonder.EffectsAvailable)
                {
                    switch (e.Type)
                    {
                    case EffectType.CopyGuildFromNeighbor:
                        var neighbors = NeighborsHelper.GetNeighbors(players.Select(pl => (IPlayer)pl).ToList(), p);
                        if (e.Info == null)
                        {
                            break;
                        }
                        var selectedCard = (CardName)e.Info;
                        var card         = neighbors[NeighborsHelper.RIGHTDIRECTION].Cards.FirstOrDefault(c => c.Name == selectedCard);
                        if (card != null)
                        {
                            unitOfWork.AddEvent(new AddCardEvent(p, card));
                        }
                        else
                        {
                            card = neighbors[NeighborsHelper.LEFTDIRECTION].Cards.FirstOrDefault(c => c.Name == selectedCard);
                            if (card != null)
                            {
                                unitOfWork.AddEvent(new AddCardEvent(p, card));
                            }
                        }
                        LoggerHelper.DebugFormat("Player {0} copied {1} from neighbor as part of CopyGuildFromNeighbor effect.", p.Name, selectedCard);
                        break;

                    default:
                        break;
                    }
                }
            }
        }
Exemplo n.º 8
0
        protected override void Compute(IList <IPlayer> players)
        {
            LoggerHelper.DebugFormat("Starting to compute guild victory points");
            foreach (var p in players)
            {
                var cards         = p.Cards.Where(c => c.Type == BaseEntities.StructureType.Guilds).ToList();
                var neighbors     = NeighborsHelper.GetNeighbors(players, p);
                var rightNeighbor = neighbors[NeighborsHelper.RIGHTDIRECTION];
                var leftNeighbor  = neighbors[NeighborsHelper.LEFTDIRECTION];
                var sb            = new StringBuilder();

                foreach (var c in cards)
                {
                    foreach (var e in c.StandaloneEffect)
                    {
                        var pts = 0;
                        switch (e.Type)
                        {
                        case BaseEntities.EffectType.VictoryPointPerRawMaterialCard:
                            p.VictoryPoints += pts = VictoryPointsHelper.GetVictoryPointsByStructureType(p, e.Quantity, StructureType.RawMaterial, e.Direction, rightNeighbor, leftNeighbor);
                            break;

                        case BaseEntities.EffectType.VictoryPointPerManufacturedGoodCard:
                            p.VictoryPoints += pts = VictoryPointsHelper.GetVictoryPointsByStructureType(p, e.Quantity, StructureType.ManufacturedGood, e.Direction, rightNeighbor, leftNeighbor);
                            break;

                        case BaseEntities.EffectType.VictoryPointPerCommercialCard:
                            p.VictoryPoints += pts = VictoryPointsHelper.GetVictoryPointsByStructureType(p, e.Quantity, StructureType.Commercial, e.Direction, rightNeighbor, leftNeighbor);
                            break;

                        case BaseEntities.EffectType.VictoryPointPerScientificCard:
                            p.VictoryPoints += pts = VictoryPointsHelper.GetVictoryPointsByStructureType(p, e.Quantity, StructureType.Scientific, e.Direction, rightNeighbor, leftNeighbor);
                            break;

                        case BaseEntities.EffectType.VictoryPointPerMilitaryCard:
                            p.VictoryPoints += pts = VictoryPointsHelper.GetVictoryPointsByStructureType(p, e.Quantity, StructureType.Military, e.Direction, rightNeighbor, leftNeighbor);
                            break;

                        case BaseEntities.EffectType.VictoryPointPerConflictDefeat:
                            p.VictoryPoints += pts = VictoryPointsHelper.GetVictoryPointsByConflictDefeat(p, e.Quantity, StructureType.Military, e.Direction, rightNeighbor, leftNeighbor);
                            break;

                        case BaseEntities.EffectType.VictoryPointPerCivilianCard:
                            p.VictoryPoints += pts = VictoryPointsHelper.GetVictoryPointsByStructureType(p, e.Quantity, StructureType.Civilian, e.Direction, rightNeighbor, leftNeighbor);
                            break;

                        case BaseEntities.EffectType.VictoryPointPerWonderStageBuilt:
                            p.VictoryPoints += pts = VictoryPointsHelper.GetVictoryPointsByWonderStage(p, e.Quantity, e.Direction, rightNeighbor, leftNeighbor);
                            break;

                        case BaseEntities.EffectType.VictoryPointPerGuildCard:
                            p.VictoryPoints += pts = VictoryPointsHelper.GetVictoryPointsByStructureType(p, e.Quantity, StructureType.Guilds, e.Direction, rightNeighbor, leftNeighbor);
                            break;

                        default:
                            break;
                        }
                        if (pts > 0)
                        {
                            sb.AppendFormat("{0}({1}) ", c.Name, pts);
                        }
                    }
                }
                LoggerHelper.DebugFormat("{0} has now {1} victory points. {2}", p.Name, p.VictoryPoints, sb.ToString());
            }
        }