public void Execute(YugiohGamePlayer player, YugiohGamePlayer opponent)
        {
            try
            {
                Console.WriteLine($"{player.Name} entered Battle Phase");

                //var atkPosMonsters = player.Field.GetMonstersInAttackPosition();
                //foreach (var monster in atkPosMonsters)
                //{
                //    if (opponent.Field.GetMonsters().Count() == 0)
                //    {
                //        AttackDirectly(player, monster, opponent);
                //        continue;
                //    }

                //    var target = SelectTargetToAttack(monster, opponent);

                //    // There's nothing I can attack, everything is too big!
                //    if (target == null) continue;

                //    Attack(player, monster, opponent, target);
                //}
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 public void AttackDirectly(YugiohGamePlayer player, Monster monster,
                            YugiohGamePlayer opponent)
 {
     Console.WriteLine($"{monster.Name} attacks directly!");
     opponent.LifePoints -= monster.ATK;
     Console.WriteLine($"{opponent.Name} takes {monster.ATK} damage!");
 }
 public void SetupDuel(YugiohGamePlayer turnPlayer, Deck tpDeck, YugiohGamePlayer opponent, Deck oppDeck)
 {
     Game.P1         = turnPlayer;
     Game.P1.Deck    = tpDeck;
     Game.P2         = opponent;
     Game.P2.Deck    = oppDeck;
     Game.TurnPlayer = turnPlayer;
 }
Beispiel #4
0
 public void Execute(YugiohGamePlayer player, int turnOfGame)
 {
     Console.WriteLine($"{player.Name} entered Draw Phase");
     if (turnOfGame > 1)
     {
         var card = player.DrawCard();
         Console.WriteLine($"{player.Name} drew {card.Name}");
     }
 }
Beispiel #5
0
        public void Execute(YugiohGamePlayer player, YugiohGame game)
        {
            Console.WriteLine($"{player.Name} entered Main Phase 1");

            var hasFreeZone = player.Field.HasFreeMonsterZone();
            var normalSummonableMonsters = player.Hand.GetMonstersThatCanBeNormalSummoned();

            if (hasFreeZone && normalSummonableMonsters.Any())
            {
                var monsterToSummon = (Monster)normalSummonableMonsters[0];
                NormalSummonWithoutTribute(monsterToSummon);
            }
        }
        private Monster SelectTargetToAttack(Monster monster, YugiohGamePlayer opponent)
        {
            try
            {
                var offense          = monster.ATK;
                var monstersInAtkPos = opponent.Field.GetMonstersInAttackPosition();
                if (monstersInAtkPos.Any())
                {
                    var smallerMonsters = monstersInAtkPos
                                          .Where(m => m.ATK < offense);
                    if (smallerMonsters.Any())
                    {
                        var biggestOffenseOppMonster = smallerMonsters
                                                       .OrderBy(m => m.ATK)
                                                       .First();
                        if (biggestOffenseOppMonster != null)
                        {
                            return(biggestOffenseOppMonster);
                        }
                    }
                }

                var monstersInDefPos = opponent.Field.GetMonstersInDefensePosition();
                if (monstersInDefPos.Any())
                {
                    var smallerMonsters = monstersInDefPos
                                          .Where(m => m.DEF < offense);
                    if (smallerMonsters.Any())
                    {
                        var biggestDefenseOppMonster = smallerMonsters
                                                       .OrderBy(m => m.DEF)
                                                       .First();
                        if (biggestDefenseOppMonster != null)
                        {
                            return(biggestDefenseOppMonster);
                        }
                    }
                }

                return(null);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void Attack(YugiohGamePlayer player, Monster playerMonster,
                           YugiohGamePlayer opponent, Monster opponentMonster)
        {
            try
            {
                var pZoneIndex = player.Field.MonsterZones.ToList().FindIndex(m => m.Monster == playerMonster);
                var pZone      = player.Field.MonsterZones[pZoneIndex];

                var oZoneIndex = opponent.Field.MonsterZones.ToList().FindIndex(m => m.Monster == opponentMonster);
                var oZone      = opponent.Field.MonsterZones[oZoneIndex];

                var isOpposingMonsterInAttack = oZone.Monster.Position == CardPosition.FaceUpAttack;
                var difference = pZone.Monster.ATK - (isOpposingMonsterInAttack ?
                                                      oZone.Monster.ATK :
                                                      oZone.Monster.DEF);

                var offense = pZone.Monster.ATK;
                if (isOpposingMonsterInAttack)
                {
                    var opposingAtk = oZone.Monster.ATK;
                    if (offense < opposingAtk)
                    {
                        // player loses
                        Console.WriteLine($"{pZone.Monster.Name} was destroyed in battle by {oZone.Monster.Name}");
                        Console.WriteLine($"{player.Name} lost {(-1 * difference)} LP");
                        player.DiscardPile.Add(pZone.Monster);
                        pZone.Monster.Location = CardLocation.Graveyard;
                        player.Field.MonsterZones[pZoneIndex] = new MonsterZone();
                        player.LifePoints += difference;
                    }
                    else if (offense == opposingAtk)
                    {
                        // tie, they both lose
                        Console.WriteLine($"{pZone.Monster.Name} and {oZone.Monster.Name} destroyed each other in battle");
                        player.DiscardPile.Add(pZone.Monster);
                        pZone.Monster.Location = CardLocation.Graveyard;
                        player.Field.MonsterZones[pZoneIndex] = new MonsterZone();
                        opponent.DiscardPile.Add(oZone.Monster);
                        oZone.Monster.Location = CardLocation.Graveyard;
                        opponent.Field.MonsterZones[oZoneIndex] = new MonsterZone();
                    }
                    else
                    {
                        // player wins
                        Console.WriteLine($"{oZone.Monster.Name} was destroyed in battle by {pZone.Monster.Name}");
                        opponent.DiscardPile.Add(oZone.Monster);
                        oZone.Monster.Location = CardLocation.Graveyard;
                        opponent.Field.MonsterZones[oZoneIndex] = new MonsterZone();
                        opponent.LifePoints -= difference;
                        Console.WriteLine($"{opponent.Name} lost {difference} LP");
                    }
                }
                else
                {
                    if (oZone.Monster.Position == CardPosition.FaceDownDefense)
                    {
                        oZone.Monster.Position = CardPosition.FaceUpDefense;
                        if (oZone.Monster is EffectMonster effectMonster &&
                            effectMonster.HasFlipEffect)
                        {
                            effectMonster.FlipEffect.Invoke();
                        }
                    }
                    // opposing monster in defense
                    var opposingDef = oZone.Monster.DEF;
                    if (offense < opposingDef)
                    {
                        Console.WriteLine($"{pZone.Monster.Name} could not destroy {oZone.Monster.Name} in this battle");
                        Console.WriteLine($"{player.Name} lost {(-1 * difference)} LP");
                        player.LifePoints += difference;
                    }
                    else if (offense == opposingDef)
                    {
                        Console.WriteLine($"{pZone.Monster.Name} could not destroy {oZone.Monster.Name} in this battle");
                    }
                    else
                    {
                        Console.WriteLine($"{oZone.Monster.Name} was destroyed in battle by {pZone.Monster.Name}");
                        opponent.DiscardPile.Add(oZone.Monster);
                        oZone.Monster.Location = CardLocation.Graveyard;
                        opponent.Field.MonsterZones[oZoneIndex] = new MonsterZone();
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Beispiel #8
0
 public void Execute(YugiohGamePlayer player)
 {
     Console.WriteLine($"{player.Name} entered End Phase");
 }
Beispiel #9
0
        public void SetUp()
        {
            Game           = new YugiohGame();
            cardSvc        = new CardService(Game);
            AllCardsInGame = cardSvc.GetAllCards();

            BlueEyesDeck = new Deck()
            {
                MainDeckCards = new List <Card>()
                {
                    cardSvc.GetCardByName("Blue-Eyes White Dragon"),
                    cardSvc.GetCardByName("Blue-Eyes White Dragon"),
                    cardSvc.GetCardByName("Blue-Eyes White Dragon"),
                    cardSvc.GetCardByName("Lord of D."),
                    cardSvc.GetCardByName("Lord of D."),
                    cardSvc.GetCardByName("Lord of D."),
                    cardSvc.GetCardByName("Tyrant Dragon"),
                    cardSvc.GetCardByName("Tyrant Dragon"),
                    cardSvc.GetCardByName("Tyrant Dragon"),
                    cardSvc.GetCardByName("Red-Eyes B. Dragon"),
                    cardSvc.GetCardByName("Red-Eyes B. Dragon"),
                    cardSvc.GetCardByName("The Flute of Summoning Dragon"),
                    cardSvc.GetCardByName("The Flute of Summoning Dragon"),
                    cardSvc.GetCardByName("The Flute of Summoning Dragon"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Champion's Vigilance"),
                    cardSvc.GetCardByName("Champion's Vigilance"),
                    cardSvc.GetCardByName("Champion's Vigilance"),
                }
            };
            AmazonessDeck = new Deck()
            {
                MainDeckCards = new List <Card>()
                {
                    cardSvc.GetCardByName("Amazoness Swords Woman"),
                    cardSvc.GetCardByName("Amazoness Swords Woman"),
                    cardSvc.GetCardByName("Amazoness Swords Woman"),
                    cardSvc.GetCardByName("Amazoness Sage"),
                    cardSvc.GetCardByName("Amazoness Sage"),
                    cardSvc.GetCardByName("Amazoness Sage"),
                    cardSvc.GetCardByName("Amazoness Chain Master"),
                    cardSvc.GetCardByName("Amazoness Chain Master"),
                    cardSvc.GetCardByName("Amazoness Heirloom"),
                    cardSvc.GetCardByName("Amazoness Heirloom"),
                    cardSvc.GetCardByName("Amazoness Heirloom"),
                    cardSvc.GetCardByName("Amazoness Village"),
                    cardSvc.GetCardByName("Amazoness Village"),
                    cardSvc.GetCardByName("Amazoness Village"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Kunai With Chain"),
                    cardSvc.GetCardByName("Kunai With Chain"),
                    cardSvc.GetCardByName("Kunai With Chain"),
                }
            };
            HarpieDeck = new Deck()
            {
                MainDeckCards = new List <Card>()
                {
                    cardSvc.GetCardByName("Harpie Lady 1"),
                    cardSvc.GetCardByName("Harpie Lady 1"),
                    cardSvc.GetCardByName("Harpie Lady 1"),
                    cardSvc.GetCardByName("Harpie Lady Sisters"),
                    cardSvc.GetCardByName("Harpie Lady Sisters"),
                    cardSvc.GetCardByName("Harpie Lady Sisters"),
                    cardSvc.GetCardByName("Birdface"),
                    cardSvc.GetCardByName("Birdface"),
                    cardSvc.GetCardByName("Birdface"),
                    cardSvc.GetCardByName("Elegant Egotist"),
                    cardSvc.GetCardByName("Elegant Egotist"),
                    cardSvc.GetCardByName("Elegant Egotist"),
                    cardSvc.GetCardByName("Harpie's Hunting Ground"),
                    cardSvc.GetCardByName("Harpie's Hunting Ground"),
                    cardSvc.GetCardByName("Harpie's Hunting Ground"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Wild Tornado"),
                    cardSvc.GetCardByName("Wild Tornado"),
                }
            };
            ToonDeck = new Deck()
            {
                MainDeckCards = new List <Card>()
                {
                    cardSvc.GetCardByName("Toon Masked Sorcerer"),
                    cardSvc.GetCardByName("Toon Masked Sorcerer"),
                    cardSvc.GetCardByName("Toon Masked Sorcerer"),
                    cardSvc.GetCardByName("Toon Mermaid"),
                    cardSvc.GetCardByName("Toon Mermaid"),
                    cardSvc.GetCardByName("Toon Mermaid"),
                    cardSvc.GetCardByName("Toon Summoned Skull"),
                    cardSvc.GetCardByName("Toon Table of Contents"),
                    cardSvc.GetCardByName("Toon Table of Contents"),
                    cardSvc.GetCardByName("Toon Table of Contents"),
                    cardSvc.GetCardByName("Toon World"),
                    cardSvc.GetCardByName("Toon World"),
                    cardSvc.GetCardByName("Toon World"),
                    cardSvc.GetCardByName("Toon Rollback"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Kunai With Chain"),
                    cardSvc.GetCardByName("Kunai With Chain"),
                    cardSvc.GetCardByName("Kunai With Chain"),
                }
            };
            TribalSynergyDeck = new Deck()
            {
                MainDeckCards = new List <Card>()
                {
                    cardSvc.GetCardByName("Amazoness Swords Woman"),
                    cardSvc.GetCardByName("Amazoness Swords Woman"),
                    cardSvc.GetCardByName("Amazoness Swords Woman"),
                    cardSvc.GetCardByName("Amazoness Sage"),
                    cardSvc.GetCardByName("Amazoness Sage"),
                    cardSvc.GetCardByName("Amazoness Chain Master"),
                    cardSvc.GetCardByName("Amazoness Chain Master"),
                    cardSvc.GetCardByName("Harpie Lady 1"),
                    cardSvc.GetCardByName("Harpie Lady 1"),
                    cardSvc.GetCardByName("Harpie Lady 1"),
                    cardSvc.GetCardByName("Amazoness Heirloom"),
                    cardSvc.GetCardByName("Amazoness Heirloom"),
                    cardSvc.GetCardByName("Amazoness Village"),
                    cardSvc.GetCardByName("Amazoness Village"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Windstorm of Etaqua"),
                    cardSvc.GetCardByName("Kunai With Chain"),
                    cardSvc.GetCardByName("Kunai With Chain"),
                    cardSvc.GetCardByName("Kunai With Chain"),
                }
            };
            Kaiba = new YugiohGamePlayer()
            {
                Deck       = BlueEyesDeck,
                Name       = "Kaiba",
                LifePoints = 4000
            };
            Mai = new YugiohGamePlayer()
            {
                Deck       = AmazonessDeck,
                Name       = "Mai",
                LifePoints = 4000
            };
            Pegasus = new YugiohGamePlayer()
            {
                Deck       = ToonDeck,
                Name       = "Pegasus",
                LifePoints = 4000
            };
            Game.P1         = Kaiba;
            Game.P2         = Mai;
            Game.TurnPlayer = Kaiba;
            Kaiba.SetDeck(BlueEyesDeck);
            Mai.SetDeck(AmazonessDeck);
        }