示例#1
0
        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());
        }
示例#2
0
        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);
        }