Пример #1
0
        protected override void Activate(Player owner, Player opponent, int damageTaken, GameField game)
        {
            PokemonCard sourcePokemon = null;

            do
            {
                var response   = owner.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(new SelectFromYourPokemonMessage("Select a pokemon to move energy from").ToNetworkMessage(NetworkId.Generate()));
                var selectedId = response.Cards.First();

                sourcePokemon = game.Cards[selectedId] as PokemonCard;
            } while (sourcePokemon == null || sourcePokemon.Id.Equals(PokemonOwner.Id) || sourcePokemon.AttachedEnergy.Count(energy => EnergyType == EnergyTypes.All || EnergyType == energy.EnergyType) == 0);

            PokemonCard newPokemon;

            if (attachToSelf)
            {
                newPokemon = PokemonOwner;
            }
            else
            {
                var newPokemonResponse = owner.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(new SelectFromYourPokemonMessage("Select pokemon to receive the energy").ToNetworkMessage(NetworkId.Generate()));
                newPokemon = (PokemonCard)game.Cards[newPokemonResponse.Cards.First()];
            }

            if (sourcePokemon.AttachedEnergy.Count == 1)
            {
                var energyCard = sourcePokemon.AttachedEnergy.First();
                sourcePokemon.AttachedEnergy.Clear();

                game?.SendEventToPlayers(new AttachedEnergyDiscardedEvent
                {
                    FromPokemonId = sourcePokemon.Id,
                    DiscardedCard = energyCard
                });

                newPokemon.AttachEnergy(energyCard, game);
            }
            else
            {
                var selectedEnergyId = owner.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(new PickFromListMessage(sourcePokemon.AttachedEnergy.Where(energy => EnergyType == EnergyTypes.All || EnergyType == energy.EnergyType).OfType <Card>().ToList(), 1).ToNetworkMessage(owner.Id));
                var energyCard       = (EnergyCard)game.Cards[selectedEnergyId.Cards.First()];

                sourcePokemon.AttachedEnergy.Remove(energyCard);
                game?.SendEventToPlayers(new AttachedEnergyDiscardedEvent
                {
                    FromPokemonId = sourcePokemon.Id,
                    DiscardedCard = energyCard
                });
                newPokemon.AttachEnergy(energyCard, game);
            }
        }
        public void Blastoise_2_Extra()
        {
            var attack = new ExtraForUnusedEnergy()
            {
                Damage          = 40,
                MaxExtraDamage  = 20,
                AmountPerEnergy = 10,
                EnergyType      = EnergyTypes.Water,
                Cost            = new ObservableCollection <Energy>
                {
                    new Energy(EnergyTypes.Water, 3)
                }
            };

            var owner = new PokemonCard()
            {
                Attacks = new ObservableCollection <Attack>
                {
                    attack
                }
            };

            owner.AttachedEnergy.Add(new EnergyCard()
            {
                Amount = 1, EnergyType = EnergyTypes.Water
            });
            owner.AttachedEnergy.Add(new EnergyCard()
            {
                Amount = 1, EnergyType = EnergyTypes.Water
            });
            owner.AttachedEnergy.Add(new EnergyCard()
            {
                Amount = 1, EnergyType = EnergyTypes.Water
            });
            owner.AttachedEnergy.Add(new EnergyCard()
            {
                Amount = 1, EnergyType = EnergyTypes.Water
            });
            owner.AttachedEnergy.Add(new EnergyCard()
            {
                Amount = 1, EnergyType = EnergyTypes.Water
            });

            var player = new Player();

            player.ActivePokemonCard = owner;

            var damage = attack.GetDamage(player, null, null);

            Assert.Equal(60, damage.NormalDamage);
        }
        public void Bounce_EvolvedPokemon()
        {
            var effect = new BouncePokemonEffect()
            {
                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.Equal(2, opponent.Hand.Count);
        }
        public PokemonCardCreatorPage(PokemonCard card, INavigation navigation, bool canDelete)
        {
            InitializeComponent();
            ConfirmCommand    = new DelegateCommand(_Confirm);
            DeleteCommand     = new DelegateCommand(_Delete);
            TakePhotoCommand  = new DelegateCommand(_TakePhoto);
            ToggleCropCommand = new DelegateCommand(_ToggleOriginalPhoto);

            Card           = card;
            BindingContext = this;
            _tcs           = new TaskCompletionSource <bool>();

            CanDelete = canDelete;
        }
Пример #5
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            if (!CoinFlipConditional.IsOk(game, caster))
            {
                return;
            }

            game.TemporaryPassiveAbilities.Add(new StopTrainerCastsAbility(caster.ActivePokemonCard)
            {
                LimitedByTime = true,
                TurnsLeft     = 2,
                IsBuff        = true
            });
        }
Пример #6
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource, "Select Pokémon to move damage to");

            foreach (var pokemon in caster.GetAllPokemonCards())
            {
                if (pokemon.DamageCounters > 0)
                {
                    int damage = Math.Min(pokemon.DamageCounters, DamageToMove);
                    pokemon.Heal(damage, game);
                    target.DealDamage(damage, game, pokemon, false);
                }
            }
        }
Пример #7
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            if (RuleType == game.EnergyRule.GetType())
            {
                return;
            }

            if (OnlyReplaceIfOldAllows && !game.EnergyRule.CanPlayEnergyCard(new EnergyCard(), new PokemonCard()))
            {
                return;
            }

            game.EnergyRule = (IEnergyRule)Activator.CreateInstance(RuleType);
        }
Пример #8
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            if (game.FlipCoins(1) == 0)
            {
                return;
            }

            var damage = game.FlipCoins(1) == 1 ? 20 : 10;

            foreach (var pokemon in opponent.BenchedPokemon.ValidPokemonCards)
            {
                pokemon.DealDamage(damage, game, pokemonSource, false);
            }
        }
Пример #9
0
        public bool Remove(PokemonCard pokemon)
        {
            for (int i = 0; i < Pokemons.Length; i++)
            {
                if (Pokemons[i] == pokemon)
                {
                    Pokemons[i] = null;
                    allValidPokemons.Remove(pokemon);
                    return(true);
                }
            }

            return(false);
        }
Пример #10
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            var selector = OpponentPicks ? opponent : caster;
            var other    = OpponentPicks ? caster : opponent;

            if (!CoinflipConditional.IsOk(game, caster))
            {
                return;
            }

            PokemonCard target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, selector, other, selector.ActivePokemonCard);

            target?.Heal(Amount, game);
        }
Пример #11
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            if (CoinflipConditional.IsOk(game, caster))
            {
                return;
            }

            var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, caster.ActivePokemonCard);

            target?.TemporaryAbilities.Add(new RetreatStopper(target, Turns)
            {
                IsBuff = true
            });
        }
Пример #12
0
        public void Add(PokemonCard pokemon)
        {
            for (int i = 0; i < Pokemons.Length; i++)
            {
                if (Pokemons[i] != null)
                {
                    continue;
                }

                Pokemons[i] = pokemon;
                allValidPokemons.Add(pokemon);
                break;
            }
        }
        public int GetModifiedDamage(int damageTaken, PokemonCard damageSource, GameField game)
        {
            if (damageTaken < minimumDamageBeforePrevent)
            {
                return(damageTaken);
            }

            if (OnlyPreventFromBasic && damageSource != null && damageSource.Stage > 0)
            {
                return(damageTaken);
            }

            return(newDamage);
        }
Пример #14
0
        public void ScoopUp_TargetIsEvolved_AttachedToHand()
        {
            var effect = new BouncePokemonEffect
            {
                TargetingMode        = TargetingMode.YourPokemon,
                ReturnAttachedToHand = true,
                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,
                Hp             = 200,
                AttachedEnergy = new List <EnergyCard> {
                    new EnergyCard(), new EnergyCard()
                },
                Owner       = player,
                EvolvedFrom = basicPokemon
            };

            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.Empty(player.DiscardPile);
            Assert.Equal(4, player.Hand.Count);
        }
Пример #15
0
        public void KillActivePokemon_StageOne_NoEnergy()
        {
            var player  = new Player();
            var abra    = new PokemonCard(player);
            var kadabra = new PokemonCard(player);

            abra.Evolve(kadabra);

            player.ActivePokemonCard = kadabra;

            player.KillActivePokemon();

            Assert.Null(player.ActivePokemonCard);
            Assert.Equal(2, player.DiscardPile.Count);
        }
Пример #16
0
        public void ProcessEffectsTest_Poison()
        {
            var attack = new ApplyEffectTarget()
            {
                StatusEffect = StatusEffect.Poison
            };

            var target = new PokemonCard();

            attack.ProcessEffects(new GameField(), null, new Player {
                ActivePokemonCard = target
            });

            Assert.True(target.IsPoisoned);
        }
Пример #17
0
        private void TryEvolvePokemon(CardRenderer cardRenderer)
        {
            PokemonCard pokemon = cardRenderer.card as PokemonCard;

            if (pokemon == null)
            {
                return;
            }

            NetworkManager.Instance.gameService.EvolvePokemon(gameField.Id, pokemon.Id, currentEvolvingCard.Id);
            currentEvolvingCard = null;
            SpecialState        = SpecialGameState.None;
            infoText.text       = string.Empty;
            EnableButtons();
        }
Пример #18
0
        public void ForceRetreatActivePokemon_No_replacement()
        {
            var player  = new Player();
            var pokemon = new PokemonCard
            {
                Owner = player
            };

            player.ActivePokemonCard = pokemon;

            player.ForceRetreatActivePokemon(null, new GameField());

            Assert.Null(player.ActivePokemonCard);
            Assert.Equal(pokemon, player.BenchedPokemon.GetFirst());
        }
Пример #19
0
        public void ForceRetreatActivePokemon(PokemonCard replacementPokemon, GameField game)
        {
            var oldActivePokemon = ActivePokemonCard;

            ActivePokemonCard = replacementPokemon;
            BenchedPokemon.ReplaceWith(replacementPokemon, oldActivePokemon);
            ClearAbilitiesWhenBenched(oldActivePokemon);
            oldActivePokemon.ClearStatusEffects();

            game?.SendEventToPlayers(new PokemonBecameActiveEvent
            {
                NewActivePokemonId = replacementPokemon == null ? null : replacementPokemon.Id,
                ReplacedPokemonId  = oldActivePokemon.Id
            });
        }
        public void ProcessEffectsTest_Tails()
        {
            var attack = new FlipCoinApplyEffectTarget()
            {
                StatusEffect = StatusEffect.Poison
            };

            var target = new PokemonCard();

            attack.ProcessEffects(new GameField().WithFlips(CoinFlipper.TAILS), null, new Player {
                ActivePokemonCard = target
            });

            Assert.False(target.IsPoisoned);
        }
        public void ProcessEffectsTest_Burn()
        {
            var attack = new FlipCoinApplyEffectTarget()
            {
                StatusEffect = StatusEffect.Burn
            };

            var target = new PokemonCard();

            attack.ProcessEffects(new GameField().WithFlips(CoinFlipper.HEADS), null, new Player {
                ActivePokemonCard = target
            });

            Assert.True(target.IsBurned);
        }
Пример #22
0
        private void OnTryAttachEnergy(CardRenderer cardRenderer)
        {
            PokemonCard pokemon = cardRenderer.card as PokemonCard;

            if (pokemon == null || Player.Hand.Contains(pokemon) || !pokemon.Owner.Id.Equals(myId))
            {
                return;
            }

            NetworkManager.Instance.gameService.AttachEnergy(gameField.Id, pokemon.Id, currentEnergyCard.Id);
            currentEnergyCard = null;
            SpecialState      = SpecialGameState.None;
            infoText.text     = string.Empty;
            EnableButtons();
        }
Пример #23
0
 public PokemonViewModel(PokemonCard pokemon)
 {
     Card                        = pokemon;
     AddAttackCommand            = new RelayCommand(CanAddAttack, AddAttack);
     SetAbilityCommand           = new RelayCommand(CanAddAttack, SetAbility);
     AddEffectCommand            = new RelayCommand(CanAddEffect, AddEffect);
     AddAbilityEffectCommand     = new RelayCommand(CanAddAbilityEffect, AddAbilityEffect);
     DeleteSelectedAttack        = new RelayCommand(CanAddAttack, DeleteAttack);
     DeleteSelectedEffect        = new RelayCommand(CanAddAttack, DeleteEffect);
     MoveEffectUpCommand         = new RelayCommand(CanMoveEffectUp, MoveEffectUp);
     MoveEffectDownCommand       = new RelayCommand(CanMoveEffectDown, MoveEffectDown);
     MoveAttackUpCommand         = new RelayCommand(CanMoveAttackUp, MoveAttackUp);
     MoveAttackDownCommand       = new RelayCommand(CanMoveAttackDown, MoveAttackDown);
     DeleteAbilitySelectedEffect = new RelayCommand(CanAddAttack, DeleteAbilityEffect);
 }
Пример #24
0
        public void GetDamageTest_No_Damage()
        {
            var attack = new DamageMultipliedByDamage()
            {
                Damage = 10
            };

            var target = new PokemonCard();

            Assert.Equal(0, attack.GetDamage(new Player {
                ActivePokemonCard = new PokemonCard()
            }, new Player {
                ActivePokemonCard = target
            }, null).NormalDamage);
        }
Пример #25
0
        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);
        }
        /// <summary>
        /// Display pkmn info and Controls for back button
        /// </summary>
        /// <param name="e"></param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (e.Parameter is PokemonCard && e.Parameter != null)
            {
                SelectedCard = (PokemonCard)e.Parameter;
            }
            base.OnNavigatedTo(e);
            //Display back button
            SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
                AppViewBackButtonVisibility.Visible;
            //Call About_BackRequested function to navigate to Main Page
            SystemNavigationManager.GetForCurrentView().BackRequested += About_BackRequested;

            //Display info of the selected pkmn
            DescriptiontBox.Text = DescriptionString();
        }
Пример #27
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            int damage = 0;

            foreach (var energy in caster.ActivePokemonCard.AttachedEnergy)
            {
                if (EnergyType == EnergyTypes.All || energy.EnergyType == EnergyType)
                {
                    damage += Amount;
                }
            }

            var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource);

            target.DealDamage(damage, game, pokemonSource, true);
        }
        public void GetDamageTest_No_Damage()
        {
            var attack = new ExtraPerDamageOnTarget()
            {
                Damage = 10,
                ExtraPerDamageCounter = 10
            };

            var target = new PokemonCard();

            Assert.Equal(10, attack.GetDamage(new Player {
                ActivePokemonCard = new PokemonCard()
            }, new Player {
                ActivePokemonCard = target
            }, null).NormalDamage);
        }
Пример #29
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            var target = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource);

            var ability = Ability.Clone();

            ability.Source       = game.CurrentTrainerCard;
            ability.PokemonOwner = target;
            ability.IsBuff       = true;
            target.TemporaryAbilities.Add(ability);

            if (game.CurrentTrainerCard != null)
            {
                target.AttachedTools.Add(game.CurrentTrainerCard);
            }
        }
Пример #30
0
        public void DamageAppliedToSelf()
        {
            var effect = new DamageEffect()
            {
                Amount = 10
            };

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

            effect.OnAttachedTo(pokemon, true, null);

            Assert.Equal(10, pokemon.DamageCounters);
        }