예제 #1
0
    /// <summary>
    /// Adds a card to the deck.
    /// </summary>
    /// <param name="attacker">The attacker putting the card into the deck.</param>
    /// <param name="value">The card's value.</param>
    public void PutCardInDeck(Transform attacker, int value)
    {
        attackerDeck.AddCard(new Card(value));
        List <Card> remainingCards = attackerDeck.RemainingCards();

        cardsInDeck.text = UpdateCardsInDeckUI(remainingCards);
        Services.UI.AddCardToDeck(attacker, value);
    }
        public void CanAddCardToTop()
        {
            var card = new Card {
                Value = 42
            };

            _cardDeck.AddCard(card, CardDeckPosition.Top);
            var drawnCard = _cardDeck.DrawTop();

            Assert.Equal(42, drawnCard.Value);
        }
예제 #3
0
        public void TestGetRandomCardFromDeck()
        {
            CardStack stack = new CardStack();
            CardDeck  deck  = new CardDeck();

            stack.AddPackage(_package);
            deck.AddCard(stack.CardCollection[0]);
            deck.AddCard(stack.CardCollection[1]);
            deck.AddCard(stack.CardCollection[2]);
            deck.AddCard(stack.CardCollection[3]);
            Card randomCard = deck.GetRandomCard();

            Assert.NotNull(randomCard);
            Console.WriteLine("The name of the random Monster/Spell is: " + randomCard.Name);
        }
예제 #4
0
        public void TestCardDeckGetsMaximumFourCards()
        {
            CardStack stack = new CardStack();
            CardDeck  deck  = new CardDeck();

            stack.AddPackage(_package);
            stack.AddPackage(_package);
            deck.AddCard(stack.CardCollection[0]);
            deck.AddCard(stack.CardCollection[1]);
            deck.AddCard(stack.CardCollection[2]);
            deck.AddCard(stack.CardCollection[3]);

            deck.RemoveCard(deck.CardCollection[2]);
            deck.AddCard(stack.CardCollection[4]);

            Assert.AreEqual(4, deck.CardCollection.Count);
        }
 public CardDeckTests()
 {
     _cardDeck = new CardDeck <Card>();
     for (var card = 1; card <= 24; card++)
     {
         _cardDeck.AddCard(new Card {
             Value = card
         });
     }
 }
예제 #6
0
 // Use this for initialization
 public GameInformation()
 {
     Players      = new Dictionary <string, string>();
     roomTileDeck = new CardDeck();
     gameBoard    = new Board();
     //Add generic cards some cards to the deck
     for (int i = 0; i < 50; i++)
     {
         roomTileDeck.AddCard(new BoardGameScripting.BGSScript());
     }
 }
예제 #7
0
    public void StartGame()
    {
        //Add cards to deck
        for (int i = 0; i < 5; i++)
        {
            Deck.AddCard(StartingDeck.AttackCard());
        }
        for (int i = 0; i < 5; i++)
        {
            Deck.AddCard(StartingDeck.BlockCard());
        }
        if (includeSpecialCards)
        {
            Deck.AddCard(StartingDeck.SpecialCard1());
            Deck.AddCard(StartingDeck.SpecialCard2());
        }
        // Shuffle Deck
        Deck.ShuffleDeck();

        StartCoroutine(DrawCardsForNewTurn());

        // Ready player for game
        playerManager.ResetPlayerForNewTurn();
    }
예제 #8
0
        public void TestDeck_AddCardInEmptyDeck()
        {
            // arrange
            var mockedA = new Mock <ICard>();
            var deck    = new CardDeck();
            var cards   = new List <ICard> {
                mockedA.Object
            };

            // act
            var erg = deck.AddCard(mockedA.Object);

            // assert
            Assert.IsTrue(erg);
            Assert.AreEqual(cards, deck.Cards);
        }
예제 #9
0
        public void TestDeck_AddCardInFullDeckAndThrowException()
        {
            // arrange
            var mockedA = new Mock <ICard>();
            var mockedB = new Mock <ICard>();
            var mockedC = new Mock <ICard>();
            var mockedD = new Mock <ICard>();
            var mockedE = new Mock <ICard>();

            var cards = new List <ICard> {
                mockedA.Object, mockedB.Object, mockedC.Object, mockedD.Object
            };
            var deck = new CardDeck(cards, 4);

            // act and assert
            Assert.Throws <ArgumentException>(() => deck.AddCard(mockedE.Object));
        }
예제 #10
0
    /// <summary>
    /// Adds a card to a given part of the player's inventory
    /// </summary>
    /// <param name="type">Part of inventory to add card to</param>
    /// <param name="used">true if cards should be added to used part of inventory</param>
    /// <param name="card">Card to add</param>
    public void AddCard(Card.ScriptType type, bool used, /*CSL.Script*/ Card card)
    {
        //TODO: Automatically detect which part of inventory to put card in
        if (!used)
        {
            switch (type)
            {
            case Card.ScriptType.Item:
                playerItems.AddCard(card);
                break;

            case Card.ScriptType.Artifact:
                playerArtifacts.AddCard(card);
                break;

            case Card.ScriptType.Event:
                playerEvents.AddCard(card);
                break;

            case Card.ScriptType.Effect:
                playerEffects.AddCard(card);
                break;
            }
        }
        else
        {
            switch (type)
            {
            case Card.ScriptType.Item:
                playerItemsUsed.AddCard(card);
                break;

            case Card.ScriptType.Artifact:
                playerArtifactsUsed.AddCard(card);
                break;

            case Card.ScriptType.Event:
                playerEventsUsed.AddCard(card);
                break;

            case Card.ScriptType.Effect:
                playerEffectsUsed.AddCard(card);
                break;
            }
        }
    }
예제 #11
0
    public void DebugKeys()
    {
        if (Input.GetKeyDown("1"))
        {
            int min      = 0;
            int max      = (int)CardType.BuildTavern;
            int typeRoll = UnityEngine.Random.Range(min, max);

            Card    debugCard = Generate((CardType)typeRoll);
            Vector2 spawnPos  = new Vector2(deck.transform.position.x - 20f, deck.transform.position.y - 50f);
            debugCard.transform.position = spawnPos;
            debugCard.transform.rotation = Quaternion.Euler(0, 0, -40);
            debugCard.TargetRot          = Quaternion.Euler(0, 0, 0);
            debugCard.deck    = this.deck;
            debugCard.hand    = this.hand;
            debugCard.discard = this.discard;
            debugCard.state   = Card.CardState.deck;
            debugCard.SetCardSide(Card.Side.Back);

            deck.notificationCanvas.AddNotification(Notification.Type.userAction, $"Adding card to deck.");
            deck.AddCard(debugCard, true, true);
        }
    }
예제 #12
0
        public Tuple <int, string> Battle(User user1, User user2)
        {
            CardDeck deck1 = new CardDeck();

            foreach (var card in user1.Deck.CardCollection)
            {
                deck1.AddCard(card);
            }
            CardDeck deck2 = new CardDeck();

            foreach (var card in user2.Deck.CardCollection)
            {
                deck2.AddCard(card);
            }

            Random random = new Random();
            int    roundNumber;
            bool   roundsStartAtZero = false;

            if (random.Next(0, 2) == 0)
            {
                roundNumber       = 0;
                roundsStartAtZero = true;
            }
            else
            {
                roundNumber = 1;
            }

            Dictionary <string, string> battleLog = new Dictionary <string, string>();

            battleLog.Add("Result", "");
            while (deck1.CardCollection.Count > 0 && deck2.CardCollection.Count > 0 && roundNumber < 100)
            {
                string roundLog = "";
                if (roundNumber % 2 == 0)
                {
                    roundLog += Round(ref deck1, ref deck2, user1.Username, user2.Username);
                }
                else
                {
                    roundLog += Round(ref deck2, ref deck1, user2.Username, user1.Username);
                }

                if (roundsStartAtZero)
                {
                    battleLog.Add("Round " + (roundNumber + 1), roundLog);
                }
                else
                {
                    battleLog.Add("Round " + roundNumber, roundLog);
                }

                roundNumber++;
            }

            if ((roundNumber == 100 && !roundsStartAtZero) || (roundNumber == 99 && roundsStartAtZero))
            {
                battleLog["Result"] = "DRAW";
                return(Tuple.Create(0, JsonSerializer.Serialize(battleLog)));
            }

            if (deck1.CardCollection.Count > deck2.CardCollection.Count)
            {
                battleLog["Result"] = user1.Username + " won against " + user2.Username;
                return(Tuple.Create(1, JsonSerializer.Serialize(battleLog)));
            }
            else
            {
                battleLog["Result"] = user2.Username + " won against " + user1.Username;
                return(Tuple.Create(-1, JsonSerializer.Serialize(battleLog)));
            }
        }
예제 #13
0
        private string Round(ref CardDeck deck1, ref CardDeck deck2, string username1, string username2)
        {
            Card card1Deck = deck1.GetRandomCard();
            Card card2Deck = deck2.GetRandomCard();

            // create new cards instead of references
            Card card1 = card1Deck switch
            {
                Dragon d => new Dragon(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Elve e => new Elve(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Goblin g => new Goblin(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Knight k => new Knight(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Kraken k => new Kraken(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Orc o => new Orc(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Wizard w => new Wizard(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                FireSpell f => new FireSpell(card1Deck.ID, card1Deck.Name, card1Deck.Damage),
                NormalSpell n => new NormalSpell(card1Deck.ID, card1Deck.Name, card1Deck.Damage),
                WaterSpell w => new WaterSpell(card1Deck.ID, card1Deck.Name, card1Deck.Damage),
            };
            Card card2 = card2Deck switch
            {
                Dragon d => new Dragon(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Elve e => new Elve(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Goblin g => new Goblin(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Knight k => new Knight(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Kraken k => new Kraken(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Orc o => new Orc(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Wizard w => new Wizard(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                FireSpell f => new FireSpell(card2Deck.ID, card2Deck.Name, card2Deck.Damage),
                NormalSpell n => new NormalSpell(card2Deck.ID, card2Deck.Name, card2Deck.Damage),
                WaterSpell w => new WaterSpell(card2Deck.ID, card2Deck.Name, card2Deck.Damage),
            };

            //card1.Damage = card1.Damage * _elementEffectivenessService.CompareElements(card1.Type, card2.Type);
            //card2.Damage = card2.Damage * _elementEffectivenessService.CompareElements(card2.Type, card1.Type);
            card1.EnhanceDamage(_elementEffectivenessService.CompareElements(card1.Type, card2.Type));
            card2.EnhanceDamage(_elementEffectivenessService.CompareElements(card2.Type, card1.Type));

            // without special abilities

            /*int card1wins = card1 switch
             * {
             *  IMonster monster => monster.CompareDamage(card2.Damage) ? 1 : -1,
             *  ISpell spell => spell.CompareDamage(card2.Damage) ? 1 : -1,
             *  _ => 0
             * };*/

            Random random       = new Random();
            bool   boosterCard1 = (random.Next(1, 21) == 20);

            if (boosterCard1)
            {
                //card1.Damage = card1.Damage * 10;
                card1.EnhanceDamage(10);
            }

            int card1wins = card1 switch
            {
                IMonster _ when card2 is IMonster => FightMonsterMonster(card1, card2),
                IMonster _ when card1 is ISpell => FightMonsterSpell(card1, card2),
                ISpell _ when card2 is IMonster => FightSpellMonster(card2, card1),
                _ => FightSpellSpell(card1, card2)
            };

            string roundLog;

            if (card1wins == 1)
            {
                deck1.AddCard(card2Deck, true);
                deck2.RemoveCard(card2Deck);
                if (boosterCard1)
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") won with a booster against " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
                else
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") won against " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
            }
            else if (card1wins == -1)
            {
                deck2.AddCard(card1Deck, true);
                deck1.RemoveCard(card1Deck);
                if (boosterCard1)
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") lost although a booster to " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
                else
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") lost to " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
            }
            else
            {
                if (boosterCard1)
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") drew although a booster with " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
                else
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") drew with " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
            }

            return(roundLog);
        }