public override void TakeTurn(IBoardGame gameBoard) { if (!this.CanTakeTurn) { return; } // hard code in specific abilities depending on the monster var cleanupTurn = new CleanupTurn(this); cleanupTurn.Cleanup(); // simply attack right now var humanPlayers = gameBoard.GetHumanPlayers().ToList(); var humanToAttack = new RandomPlayer().TargetPlayer(humanPlayers); if (humanToAttack < 0) { return; } var humanPlayer = humanPlayers[humanToAttack]; var attackAmount = new StaticAmount().AttackAmount(); var attackParameters = new AttackParameters { AdjustedAmount = attackAmount, OriginalAmount = attackAmount, PlayerAttacking = this, PlayerBeingAttacked = humanPlayer }; humanPlayer.TakeDamage(gameBoard, attackParameters); GameLogger.LogFormat("{0} gave {1} damage to {2}", this.Name, attackAmount, attackParameters.ReportPlayersBeingAttacked()); }
public override void TakeDamage(IBoardGame gameBoard, AttackParameters attackParameters) { var humanPlayers = gameBoard.GetHumanPlayers(); // all of them will play defensive cards foreach (var humanPlayer in humanPlayers) { var defensiveInstant = humanPlayer.CurrentCards.FirstOrDefault(card => card.IsDefensiveInstant); if (defensiveInstant != null && !humanPlayer.UsedInstantCard && defensiveInstant.CanUse(attackParameters)) { defensiveInstant.Use(attackParameters); humanPlayer.CurrentCards.Remove(defensiveInstant); } } // we'll take damage here base.TakeDamage(gameBoard, attackParameters); }