コード例 #1
0
        public Card ConvertJsonCardToCard(JSONCard jsonCard)
        {
            Card    c         = null;
            dynamic cardValue = jsonCard.value;
            Color   cardColor = Color.UNDEFINED;

            if (jsonCard.color != "")
            {
                cardColor = (Color)Enum.Parse(typeof(Color), jsonCard.color, true);
            }
            switch (jsonCard.type)
            {
            case "number_card":
                c = new NumberCard(Convert.ToInt32(cardValue), cardColor);
                break;

            case "plus":
                c = new PlusCard(cardColor);
                break;

            case "plus_2":
                c = new TwoPlusCard(cardColor);
                break;

            case "stop":
                c = new StopCard(cardColor);
                break;

            case "change_direction":
                c = new ChangeDirectionCard(cardColor);
                break;

            case "change_color":
                c = new ChangeColorCard();
                break;

            case "taki":
                c = new TakiCard(cardColor);
                break;

            case "super_taki":
                c = new SuperTakiCard();
                break;
            }
            return(c);
        }
コード例 #2
0
ファイル: Bot.cs プロジェクト: omerk2511/TakiClient
        public void DoTurn(List <Card> cardsToAdd)
        {
            Card lastUsedCard = null;

            if (game.usedCards.Count == 0)
            {
                List <Card> cards = new List <Card>();
                Tuple <int, List <Color> > commonColors = player.GetCommonColor();
                lastUsedCard      = player.GetAllCardsOfColor(commonColors.Item2[0])[0];
                game.CurrentColor = commonColors.Item2[0];
            }
            else
            {
                lastUsedCard = game.usedCards.Last();
            }

            if (lastUsedCard is TwoPlusCard && game.IsTwoPlusActive)
            {
                HandlePlusTwo();
                return;
            }

            List <Card> takiCards = player.GetCardWithTypeOrNumber(new TakiCard(Color.UNDEFINED));
            int         takiIndex = takiCards.FindIndex(card => ((ColorCard)card).Color == game.CurrentColor);

            if (takiIndex != -1)
            {
                cardsToAdd.Add(takiCards[takiIndex]);
                HandleTakiSuperTaki(cardsToAdd, takiCards[takiIndex], Color.UNDEFINED);
                return;
            }

            List <Card> validCardsColor = player.GetAllCardsOfColor(game.CurrentColor);

            if (cardsToAdd.Count == 0)
            {
                foreach (Card card in validCardsColor)
                {
                    if (card is PlusCard)
                    {
                        cardsToAdd.Add(card);
                        HandlePlus(cardsToAdd);
                        break;
                    }
                }
            }
            if (cardsToAdd.Count == 0)
            {
                foreach (Card card in validCardsColor)
                {
                    if (card is NumberCard || card is StopCard || card is ChangeDirectionCard)
                    {
                        cardsToAdd.Add(card);
                        break;
                    }
                }
            }


            if (cardsToAdd.Count == 0)
            {
                foreach (Card card in validCardsColor)
                {
                    if (card is TwoPlusCard)
                    {
                        cardsToAdd.Add(card);
                        break;
                    }
                }
            }


            if (cardsToAdd.Count == 0)
            {
                foreach (Card card in player.GetCardWithTypeOrNumber(lastUsedCard))
                {
                    if (card is PlusCard)
                    {
                        cardsToAdd.Add(card);
                        HandlePlus(cardsToAdd);
                        break;
                    }
                    else if (card is TakiCard)
                    {
                        cardsToAdd.Add(card);
                        HandleTakiSuperTaki(cardsToAdd, card, Color.UNDEFINED);
                        return;
                    }
                    cardsToAdd.Add(card);
                    break;
                }
            }


            if (cardsToAdd.Count == 0)
            {
                // Try to use SuperTaki or ChangeColor
                SuperTakiCard superTaki = player.GetCardOfType <SuperTakiCard>();
                if (superTaki != null)
                {
                    cardsToAdd.Add(superTaki);
                    HandleTakiSuperTaki(cardsToAdd, superTaki, player.GetCommonColor().Item2[0]);
                    return;
                }
                else
                {
                    ChangeColorCard chageColorCard = player.GetCardOfType <ChangeColorCard>();
                    if (chageColorCard != null)
                    {
                        cardsToAdd.Add(chageColorCard);
                        PlayCards(cardsToAdd, player.GetCommonColor().Item2[0]);
                        return;
                    }
                }
            }

            if (cardsToAdd.Count == 0)
            {
                DrawCards();
            }
            else
            {
                PlayCards(cardsToAdd, Color.UNDEFINED);
            }
        }