示例#1
0
        public void ProcessEffects_Flip_Tails()
        {
            var pokemon = new PokemonCard()
            {
                Hp = 100
            };
            var attack = new ApplyAttackPrevention()
            {
                CoinFlip = true
            };

            pokemon.Attacks.Add(attack);

            var player = new Player()
            {
                ActivePokemonCard = pokemon
            };
            var opponent = new Player
            {
                ActivePokemonCard = new PokemonCard()
                {
                    Hp = 100
                }
            };

            var game = new GameField().WithFlips(CoinFlipper.TAILS);

            game.AddPlayer(player);
            game.AddPlayer(opponent);
            game.ActivePlayerIndex = 0;

            attack.ProcessEffects(game, player, opponent);

            Assert.Empty(player.ActivePokemonCard.TemporaryAbilities);
        }
示例#2
0
        public void RetreatActivePokemon_Energy_Removed()
        {
            var p          = new Player();
            var card       = new PokemonCard(p);
            var card2      = new PokemonCard(p);
            var energyCard = new EnergyCard()
            {
                Amount = 1
            };

            p.Hand.Add(energyCard);

            p.SetActivePokemon(card);
            p.SetBenchedPokemon(card2);

            var game = new GameField()
            {
                ActivePlayerIndex = 0
            };

            game.AddPlayer(p);
            game.AddPlayer(new Player());
            game.PlayEnergyCard(energyCard, p.ActivePokemonCard);

            p.RetreatActivePokemon(p.BenchedPokemon.ValidPokemonCards.First(), new List <EnergyCard>(p.ActivePokemonCard.AttachedEnergy), new GameField());

            Assert.Equal(card2.Id, p.ActivePokemonCard.Id);
            Assert.False(card.AttachedEnergy.Any());
        }
示例#3
0
        public void ProcessEffectsTest_Heads()
        {
            var pokemon = new PokemonCard()
            {
                Hp = 100
            };
            var attack = new ApplyAttackFailOnTails();

            pokemon.Attacks.Add(attack);

            var player = new Player()
            {
                ActivePokemonCard = pokemon
            };
            var opponent = new Player
            {
                ActivePokemonCard = new PokemonCard()
                {
                    Hp = 100
                }
            };

            var game = new GameField();

            game.AddPlayer(player);
            game.AddPlayer(opponent);
            game.ActivePlayerIndex = 0;

            attack.ProcessEffects(game, player, opponent);

            Assert.Single(opponent.ActivePokemonCard.TemporaryAbilities);
        }
示例#4
0
        public void SwapActivePlayerTest()
        {
            Player p1   = new Player();
            Player p2   = new Player();
            var    game = new GameField();

            game.AddPlayer(p1);
            game.AddPlayer(p2);
            game.ActivePlayerIndex = 0;

            Assert.Equal(0, game.ActivePlayerIndex);
            Assert.Equal(p1, game.ActivePlayer);
            Assert.Equal(p2, game.NonActivePlayer);

            game.SwapActivePlayer();

            Assert.Equal(1, game.ActivePlayerIndex);
            Assert.Equal(p1, game.NonActivePlayer);
            Assert.Equal(p2, game.ActivePlayer);

            game.SwapActivePlayer();

            Assert.Equal(0, game.ActivePlayerIndex);
            Assert.Equal(p1, game.ActivePlayer);
            Assert.Equal(p2, game.NonActivePlayer);
        }
        public void Bounce_EvolvedPokemon_OnlyBasic()
        {
            var effect = new BouncePokemonEffect()
            {
                OnlyBasic            = true,
                ShuffleIntoDeck      = false,
                ReturnAttachedToHand = true,
                TargetingMode        = TargetingMode.OpponentActive
            };

            var opponent = new Player();

            var pokemon = new PokemonCard(opponent)
            {
                Name = "Pokemon1", Stage = 0, Hp = 100
            };
            var evolution = new PokemonCard(opponent)
            {
                Name = "Evo", Stage = 1, EvolvesFrom = "Pokemon1", Hp = 100
            };

            opponent.ActivePokemonCard = evolution;

            pokemon.Evolve(evolution);
            var other = new PokemonCard(opponent);

            opponent.BenchedPokemon.Add(other);

            var sub = Substitute.For <INetworkPlayer>();

            sub.SendAndWaitForResponse <CardListMessage>(Arg.Any <NetworkMessage>()).ReturnsForAnyArgs(new CardListMessage
            {
                Cards = new List <NetworkId> {
                    other.Id
                }
            });
            opponent.SetNetworkPlayer(sub);

            var game = new GameField();

            game.AddPlayer(new Player()
            {
                Id = NetworkId.Generate()
            });
            game.AddPlayer(opponent);
            opponent.Id = NetworkId.Generate();

            effect.Process(game, game.Players[0], opponent, null);

            Assert.Single(opponent.Hand);
            Assert.Equal(pokemon.Id, opponent.Hand[0].Id);

            Assert.Single(opponent.DiscardPile);
            Assert.Equal(evolution.Id, opponent.DiscardPile[0].Id);
        }
 public void Setup()
 {
     game.AddPlayer(new Player()
     {
         Id = NetworkId.Generate()
     });
     game.AddPlayer(new Player()
     {
         Id = NetworkId.Generate()
     });
     player1 = game.Players[0];
 }
        public void ScoopUp_TargetIsEvolved()
        {
            var effect = new BouncePokemonEffect
            {
                OnlyBasic            = true,
                TargetingMode        = TargetingMode.YourPokemon,
                ReturnAttachedToHand = false,
                ShuffleIntoDeck      = false
            };

            var player = new Player();

            var activePokemon = new PokemonCard()
            {
                Stage = 1, Owner = player, Hp = 100
            };
            var basicPokemon  = new PokemonCard();
            var targetPokemon = new PokemonCard()
            {
                Stage          = 1,
                AttachedEnergy = new List <EnergyCard> {
                    new EnergyCard(), new EnergyCard()
                },
                Owner       = player,
                EvolvedFrom = basicPokemon,
                Hp          = 100
            };

            var sub = Substitute.For <INetworkPlayer>();

            sub.SendAndWaitForResponse <CardListMessage>(Arg.Any <NetworkMessage>()).ReturnsForAnyArgs(new CardListMessage {
                Cards = new List <NetworkId> {
                    targetPokemon.Id
                }
            });
            player.SetNetworkPlayer(sub);
            player.ActivePokemonCard = activePokemon;
            player.BenchedPokemon.Add(targetPokemon);

            var game = new GameField();

            game.AddPlayer(player);
            game.AddPlayer(new Player());
            game.ActivePlayerIndex = 0;

            effect.Process(game, player, game.NonActivePlayer, null);

            Assert.Equal(0, player.BenchedPokemon.Count);
            Assert.Equal(3, player.DiscardPile.Count);
            Assert.Single(player.Hand);
            Assert.Equal(basicPokemon.Id, player.Hand[0].Id);
        }
示例#8
0
        public void ProcessEffectsTest()
        {
            var attack = new DamageManyAttack
            {
                Damage           = 20,
                EnemyBenchDamage = 10,
                SelfDamage       = 30,
                TeamBenchDamage  = 40
            };

            var player = new Player()
            {
                Id = NetworkId.Generate()
            };

            player.ActivePokemonCard = new PokemonCard()
            {
                Hp = 100, Owner = player
            };
            player.BenchedPokemon.Add(new PokemonCard()
            {
                Hp = 100, Owner = player
            });

            var opponent = new Player()
            {
                Id = NetworkId.Generate()
            };

            opponent.ActivePokemonCard = new PokemonCard()
            {
                Hp = 100, Owner = opponent
            };
            opponent.BenchedPokemon.Add(new PokemonCard()
            {
                Hp = 100, Owner = opponent
            });

            var game = new GameField();

            game.AddPlayer(player);
            game.AddPlayer(opponent);
            game.ActivePlayerIndex = 0;

            attack.ProcessEffects(game, player, opponent);

            Assert.Equal(10, opponent.BenchedPokemon.GetFirst().DamageCounters);
            Assert.Equal(40, player.BenchedPokemon.GetFirst().DamageCounters);
            Assert.Equal(30, player.ActivePokemonCard.DamageCounters);
            Assert.Equal(20, attack.GetDamage(null, null, new GameField()).NormalDamage);
        }
        public void CardShuffledIntoDeck()
        {
            var effect = new BouncePokemonEffect()
            {
                ShuffleIntoDeck = true,
                TargetingMode   = TargetingMode.OpponentActive
            };

            var opponent = new Player();
            var pokemon  = new PokemonCard(opponent)
            {
                AttachedEnergy = new List <EnergyCard>
                {
                    new EnergyCard()
                },
                Hp = 100
            };

            opponent.ActivePokemonCard = pokemon;
            var other = new PokemonCard(opponent);

            opponent.BenchedPokemon.Add(other);

            var sub = Substitute.For <INetworkPlayer>();

            sub.SendAndWaitForResponse <CardListMessage>(Arg.Any <NetworkMessage>()).ReturnsForAnyArgs(new CardListMessage
            {
                Cards = new List <NetworkId> {
                    other.Id
                }
            });
            opponent.SetNetworkPlayer(sub);

            var game = new GameField();

            game.AddPlayer(new Player()
            {
                Id = NetworkId.Generate()
            });
            game.AddPlayer(opponent);
            opponent.Id = NetworkId.Generate();


            effect.Process(game, game.Players[0], opponent, null);

            Assert.Equal(2, opponent.Deck.Cards.Count);
            Assert.Equal(other, opponent.ActivePokemonCard);
        }
示例#10
0
        public void TestWithValues(float modifier, int damage, int expected, bool roundDown = false)
        {
            var game = new GameField();

            var player = new Player()
            {
                Id = NetworkId.Generate()
            };
            var opponent = new Player()
            {
                Id = NetworkId.Generate()
            };

            game.AddPlayer(player);
            game.AddPlayer(opponent);

            opponent.ActivePokemonCard = new PokemonCard()
            {
                Owner = opponent
            };

            game.ActivePlayerIndex = 0;

            var pokemon = new PokemonCard()
            {
                Owner = player
            };

            var effect = new AttachmentEffect()
            {
                Ability = new DamageTakenModifier()
                {
                    Modifer   = modifier,
                    RoundDown = roundDown
                },
                TargetingMode = TargetingMode.YourActive
            };

            player.ActivePokemonCard = pokemon;

            effect.Process(game, player, opponent, player.ActivePokemonCard);

            pokemon.DealDamage(damage, game, opponent.ActivePokemonCard, true);

            Assert.Equal(expected, pokemon.DamageCounters);
        }
示例#11
0
        public void DealDamage_Redirect_Higher_Than_Taken()
        {
            var game = new GameField();

            var player = new Player()
            {
                Id = NetworkId.Generate()
            };

            var active = new PokemonCard()
            {
                Hp    = 100,
                Owner = player
            };

            game.AddPlayer(player);
            game.AddPlayer(new Player()
            {
                ActivePokemonCard = new PokemonCard()
                {
                    Hp = 100
                }, Id = NetworkId.Generate()
            });
            game.ActivePlayerIndex = 0;
            game.NonActivePlayer.ActivePokemonCard.Owner = game.NonActivePlayer;

            player.ActivePokemonCard = active;

            var benched = new PokemonCard()
            {
                Hp    = 100,
                Owner = player
            };

            benched.Ability = new DamageRedirectorAbility(benched)
            {
                AskYesNo         = false,
                AmountToRedirect = 50
            };
            player.BenchedPokemon.Add(benched);

            game.ActivePlayer.ActivePokemonCard.DealDamage(20, game, game.NonActivePlayer.ActivePokemonCard, true);

            Assert.Equal(0, active.DamageCounters);
            Assert.Equal(20, benched.DamageCounters);
        }
示例#12
0
        private GameField createTestGame()
        {
            var game = new GameField();

            game.FirstTurn = false;

            game.AddPlayer(new Player()
            {
                Id = NetworkId.Generate()
            });
            game.AddPlayer(new Player()
            {
                Id = NetworkId.Generate()
            });
            game.ActivePlayerIndex = 0;

            game.ActivePlayer.ActivePokemonCard    = new TestPokemon(game.ActivePlayer);
            game.NonActivePlayer.ActivePokemonCard = new TestPokemon(game.NonActivePlayer);

            return(game);
        }
        public void ProcessEffectsTest_PreventionLimit_HighDamage()
        {
            var pokemon = new PokemonCard()
            {
                Hp = 100
            };
            var attack = new ApplyDamagePreventionEffect()
            {
                CoinFlip        = true,
                OnlyProtectSelf = false,
                MaxDamage       = 20
            };

            pokemon.Attacks.Add(attack);

            var player = new Player()
            {
                ActivePokemonCard = pokemon
            };
            var opponent = new Player
            {
                ActivePokemonCard = new PokemonCard()
                {
                    Hp = 100
                }
            };

            var game = new GameField().WithFlips(CoinFlipper.HEADS);

            game.AddPlayer(player);
            game.AddPlayer(opponent);
            game.ActivePlayerIndex = 0;

            attack.ProcessEffects(game, player, opponent);

            Assert.Empty(player.ActivePokemonCard.DamageStoppers);
            Assert.Single(game.DamageStoppers);
            Assert.False(game.DamageStoppers[0].IsDamageIgnored(410));
        }
示例#14
0
        public void ProcessEffects_All()
        {
            var pokemon = new PokemonCard()
            {
                Hp = 100
            };
            var attack = new ApplyAttackPrevention()
            {
                OnlySelf = false
            };

            pokemon.Attacks.Add(attack);

            var player = new Player()
            {
                ActivePokemonCard = pokemon
            };
            var opponent = new Player
            {
                ActivePokemonCard = new PokemonCard()
                {
                    Hp = 100
                }
            };

            var game = new GameField();

            game.AddPlayer(player);
            game.AddPlayer(opponent);
            game.ActivePlayerIndex = 0;

            attack.ProcessEffects(game, player, opponent);

            Assert.Single(player.ActivePokemonCard.TemporaryAbilities.OfType <PreventStatusEffects>());
            Assert.Single(player.ActivePokemonCard.TemporaryAbilities.OfType <DamageTakenModifier>());
        }
        public void ProcessEffectsTest_Flip_Heads()
        {
            var pokemon = new PokemonCard()
            {
                Hp = 100
            };
            var attack = new ApplyDamagePreventionEffect()
            {
                CoinFlip        = true,
                OnlyProtectSelf = true
            };

            pokemon.Attacks.Add(attack);

            var player = new Player()
            {
                ActivePokemonCard = pokemon
            };
            var opponent = new Player
            {
                ActivePokemonCard = new PokemonCard()
                {
                    Hp = 100
                }
            };

            var game = new GameField().WithFlips(CoinFlipper.HEADS);

            game.AddPlayer(player);
            game.AddPlayer(opponent);
            game.ActivePlayerIndex = 0;

            attack.ProcessEffects(game, player, opponent);

            Assert.Single(player.ActivePokemonCard.DamageStoppers);
        }
示例#16
0
        public GameField HostGame(NetworkId hostPlayer, Deck deckInfo)
        {
            RemoveCompletedGames();
            var player = new Player(MasterServer.Instance.Clients[hostPlayer]);
            var game   = new GameField();

            game.Format = deckInfo.FormatId;

            var cardService = (CardService)MasterServer.Instance.Services[typeof(CardService).Name];

            foreach (var id in deckInfo.Cards.Select(x => x.CardId))
            {
                var card = cardService.CreateCardById(id);
                card.Owner = player;

                var pokemonCard = card as PokemonCard;
                if (pokemonCard != null && pokemonCard.Ability != null)
                {
                    pokemonCard.Ability.Id           = NetworkId.Generate();
                    pokemonCard.Ability.PokemonOwner = pokemonCard;
                }
                if (pokemonCard != null)
                {
                    foreach (var attack in pokemonCard.Attacks)
                    {
                        attack.Id = NetworkId.Generate();
                    }
                    pokemonCard.ReInitLists();
                }
                if (card is TrainerCard)
                {
                    var trainerCard = (TrainerCard)card;

                    if (trainerCard.Ability != null)
                    {
                        trainerCard.Ability.Id = NetworkId.Generate();
                    }
                }

                player.Deck.Cards.Push(card);
            }

            game.AddPlayer(player);
            ActiveGames.TryAdd(game.Id, game);

            return(game);
        }
        public void DeckSearched()
        {
            var effect = new SearchDeckForCardEffect()
            {
                CardType = CardType.Any
            };

            var player = new Player();

            player.Id = NetworkId.Generate();
            var target = new EnergyCard();

            player.Deck.Cards.Push(target);
            player.Deck.Cards.Push(new EnergyCard());
            player.Deck.Cards.Push(new EnergyCard());
            player.Deck.Cards.Push(new EnergyCard());
            player.Deck.Cards.Push(new EnergyCard());

            var sub = Substitute.For <INetworkPlayer>();

            sub.SendAndWaitForResponse <CardListMessage>(Arg.Any <NetworkMessage>()).ReturnsForAnyArgs(new CardListMessage {
                Cards = new List <NetworkId> {
                    target.Id
                }
            });
            player.SetNetworkPlayer(sub);

            var game = new GameField();

            game.AddPlayer(player);
            effect.Process(game, player, null, null);

            Assert.Single(player.Hand);
            Assert.Equal(4, player.Deck.Cards.Count);
            Assert.Equal(target.Id, player.Hand[0].Id);
        }