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