Beispiel #1
0
        private void PlayCards()
        {
            if (GamePlayerReference.Team != PlayerInvite.NoTeam && Players.Values.Any(o => o.ID != PlayerID && !o.IsAIOrHumanTurnedIntoAI && o.Team == this.GamePlayerReference.Team && o.State == GamePlayerState.Playing && !o.HasCommittedOrders))
            {
                return; //If there are any humans on our team that have yet to take their turn, do not play cards.
            }
            //For now, just play all reinforcement cards, and discard if we must use any others.

            var cardsPlayedByTeammate =
                TeammatesSubmittedOrders.OfType <GameOrderPlayCard>().Select(o => o.CardInstanceID)
                .Concat(TeammatesSubmittedOrders.OfType <GameOrderDiscard>().Select(o => o.CardInstanceID))
                .ToHashSet(true);

            int numMustPlay = this.CardsMustPlay;

            foreach (var card in Cards)
            {
                if (cardsPlayedByTeammate.Contains(card.ID))
                {
                    continue; //Teammate played it
                }
                if (card is ReinforcementCardInstance)
                {
                    AddOrder(GameOrderPlayCardReinforcement.Create(card.ID, PlayerID));
                    Income.FreeArmies += card.As <ReinforcementCardInstance>().Armies;
                    numMustPlay--;
                }
                else if (numMustPlay > 0) //For now, just discard all non-reinforcement cards if we must use the card
                {
                    AddOrder(GameOrderDiscard.Create(PlayerID, card.ID));
                    numMustPlay--;
                }
            }
        }
Beispiel #2
0
        public static void PlayCards(BotMain state, Moves moves)
        {
            if (state.Me.Team != PlayerInvite.NoTeam && state.Players.Values.Any(o => state.IsTeammate(o.ID) && !o.IsAIOrHumanTurnedIntoAI && o.State == GamePlayerState.Playing && !o.HasCommittedOrders))
            {
                return; //If there are any humans on our team that have yet to take their turn, do not play cards.
            }
            //For now, just play all reinforcement cards, and discard if we must use any others.
            var teammatesOrders       = state.TeammatesOrders.Values.Where(o => o.Orders != null).SelectMany(o => o.Orders);
            var cardsPlayedByTeammate = teammatesOrders.OfType <GameOrderPlayCard>().Select(o => o.CardInstanceID).Concat(teammatesOrders.OfType <GameOrderDiscard>().Select(o => o.CardInstanceID)).ToHashSet(true);

            int numMustPlay = state.CardsMustPlay;

            foreach (var card in state.Cards)
            {
                if (cardsPlayedByTeammate.Contains(card.ID))
                {
                    continue;
                }

                if (card is ReinforcementCardInstance)
                {
                    moves.AddOrder(new BotOrderGeneric(GameOrderPlayCardReinforcement.Create(card.ID, state.Me.ID)));
                    state.MyIncome.FreeArmies += card.As <ReinforcementCardInstance>().Armies;
                    numMustPlay--;
                }
                else if (numMustPlay > 0) //For now, just discard all non-reinforcement cards if we must use the card
                {
                    moves.AddOrder(new BotOrderGeneric(GameOrderDiscard.Create(state.Me.ID, card.ID)));
                    numMustPlay--;
                }
            }
        }
Beispiel #3
0
        private static bool PlayReinforcementCard(BotMain bot, CardInstance card)
        {
            var numArmies = card.As <ReinforcementCardInstance>().Armies;

            AILog.Log("PlayCards", "Playing reinforcement card for " + numArmies);
            bot.Orders.AddOrder(GameOrderPlayCardReinforcement.Create(card.ID, bot.PlayerID));
            bot.EffectiveIncome.FreeArmies += numArmies;
            return(true);
        }
Beispiel #4
0
        public static void PlayCardsBeginTurn(BotMain state, Moves moves)
        {
            //If there are any humans on our team that have yet to take their turn, do not play cards.
            if (state.Me.Team != PlayerInvite.NoTeam && state.Players.Values.Any(o => state.IsTeammate(o.ID) && !o.IsAIOrHumanTurnedIntoAI && o.State == GamePlayerState.Playing && !o.HasCommittedOrders))
            {
                return;
            }

            foreach (var reinforcementCard in state.CardsHandler.GetCards(CardTypes.Reinforcement))
            {
                var numArmies = reinforcementCard.As <ReinforcementCard>().Armies;
                AILog.Log("PlayCardsTask", "Playing reinforcement card " + reinforcementCard.CardInstanceId + " for " + numArmies + " armies");
                moves.AddOrder(new BotOrderGeneric(GameOrderPlayCardReinforcement.Create(reinforcementCard.CardInstanceId, state.Me.ID)));
                state.MyIncome.FreeArmies += numArmies;
            }
        }