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); } }
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); } } }
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(); }
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); } } }
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); } } }
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); } } } }
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; } } } }
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()); } }