private void DrawCards() { /* DRAW PHASE * The Slayer player draws 3 cards from the Slayer Deck. * The Dragon player draws 3 cards from the Dragon Deck. * If a deck runs out shuffle the discard and draw from it. * Maximum hand size is 7 cards. Discard excess cards. */ SlayerDeck.DrawFromDeck(_slayerDrawsLess ? ReducedDrawNumber : NormalDrawNumber, Slayer.Hand, DiscardExtraSlayer); SlayerCheckArtifacts(); DragonDeck.DrawFromDeck(_dragonDrawsLess ? ReducedDrawNumber : NormalDrawNumber, Dragon.Hand, DiscardExtraDragon); }
private void PlayDragon() { /* DRAGON PHASE * The Dragon may attack the party. * To make an attack, an attack card must be discarded from the players hand. * The Dragon may make multiple attacks. * The Dragon may only use one attack type once per turn. * For example: The Dragon may not make 2 Firebreath attacks in one turn. * The Dragon may only use one body part to make one attack type once per turn. * For example: The Bite and Firebreath attacks are both ‘Mouth’ attacks so * only one may be used. * The Slayer player may block an attack by discarding a Blocking Card that * matches the target type. * For example: The Slayer may discard a ‘Shield’ card to negate an attack vs a * Warrior or a Man-at-Arms. * Each attack targets one party member. * Dragons must attack Men-at-Arms first. * After all the Men-at-Arms are killed the Dragon may attack Warriors next. * After all the Warriors are killed the Dragon may attack Archers & Wizards. */ var typesPlayed = new List <EAttackType>(); BaseCard playCard; SlayerRecruit playTarget; do { GameMessage("Please choose a card to play..."); playCard = GetDragonPlayCard(); if (playCard == null) { GameMessage("Ok, your turn is over."); break; } switch (playCard.CardAction) { case ECardAction.Attack: if (typesPlayed.Contains(playCard.AttackType)) { GameMessage("Sorry, you've already attacked with that type! Please choose again..."); continue; } typesPlayed.Add(playCard.AttackType); playTarget = GetDragonAttackTarget(); if (playTarget == null) { GameMessage("Sorry, you have to choose a target for that attack! Please try again..."); continue; } if (!_dragonCanAttackAnyHero && playTarget.Type != ERecruitType.MenAtArms && Slayer.Party.Any(_ => _.Type == ERecruitType.MenAtArms)) { GameMessage("Wait, you must first attack a Man-at-Arms target while they are up! Please try again..."); continue; } if (!_dragonCanAttackAnyHero && playTarget.Type != ERecruitType.Warrior && Slayer.Party.Any(_ => _.Type == ERecruitType.Warrior)) { GameMessage("Wait, you must first attack a Warrior target while they are up! Please try again..."); continue; } var blockingCard = GetSlayerBlockingCard(); if (blockingCard == null) { if (!playTarget.Artifact.DamageReduced()) { // Damage Applied! Slayer.DamageParty(playCard, playTarget); GameMessage("You successfully attacked the Slayer's party! Do you want to play another card?"); } else { GameMessage("Sorry, the Slayer blocked your attack. Do you want to play another card?"); } } else { // Damage Blocked! SlayerDeck.DiscardCard(blockingCard, Slayer.Hand); GameMessage("Sorry, the Slayer blocked your attack. Do you want to play another card?"); } _dragonCanAttackAnyHero = false; DragonDeck.DiscardCard(playCard, Dragon.Hand); break; case ECardAction.DiscardToDraw: DragonDeck.DiscardCard(playCard, Dragon.Hand); DragonDeck.DrawFromDeck(_dragonDrawsLess ? ReducedDrawNumber : NormalDrawNumber, Dragon.Hand, DiscardExtraDragon); GameMessage("You have drawn more cards. Do you want to play another card?"); break; case ECardAction.AttackAnyHero: DragonDeck.DiscardCard(playCard, Dragon.Hand); _dragonCanAttackAnyHero = true; GameMessage("You can now attack any hero! Do you want to play another card?"); break; case ECardAction.EnemyDrawsLess: DragonDeck.DiscardCard(playCard, Dragon.Hand); _slayerDrawsLess = true; GameMessage("You have hindered the Slayer's next draw. Do you want to play another card?"); break; case ECardAction.Regenerate: if (Dragon.HitPoints < DragonPlayer.MaxHealth) { DragonDeck.DiscardCard(playCard, Dragon.Hand); Dragon.HitPoints++; GameMessage("You have regenerated some health. Do you want to play another card?"); } else { GameMessage("You are already at max health! Do you want to play another card?"); } break; } if (Slayer.Party.Count == 0) { // YOU WIN! GameMessage("Well done, you have defeated the Slayer's party!"); GameOver(Dragon); } } while (playCard != null); }