private static Combat makeGoodBlocks(Combat combat) {

        CardList currentAttackers = new CardList(getAttackersLeft().toArray());

        for (Card attacker : getAttackersLeft()) {

            Card blocker = new Card();

            CardList blockers = getPossibleBlockers(attacker, getBlockersLeft(), combat);

            CardList safeBlockers = getSafeBlockers(attacker, blockers, combat);
            CardList killingBlockers;

            if (safeBlockers.size() > 0) {
                // 1.Blockers that can destroy the attacker but won't get destroyed
                killingBlockers = getKillingBlockers(attacker, safeBlockers, combat);
                if (killingBlockers.size() > 0) blocker = CardFactoryUtil.AI_getWorstCreature(killingBlockers);

                    // 2.Blockers that won't get destroyed
                else {
                    blocker = CardFactoryUtil.AI_getWorstCreature(safeBlockers);
                    getBlockedButUnkilled().add(attacker);
                }
            } // no safe blockers
            else {
                killingBlockers = getKillingBlockers(attacker, blockers, combat);
                if (killingBlockers.size() > 0) {
                    // 3.Blockers that can destroy the attacker and are worth less
                    Card worst = CardFactoryUtil.AI_getWorstCreature(killingBlockers);

                    if (CardFactoryUtil.evaluateCreature(worst) + getDiff() < CardFactoryUtil.evaluateCreature(attacker)) {
                        blocker = worst;
                    }
                }
            }
            if (blocker.getName() != "") {
                currentAttackers.remove(attacker);
                getBlockersLeft().remove(blocker);
                combat.addBlocker(attacker, blocker);
            }
        }
        setAttackersLeft(new CardList(currentAttackers.toArray()));
        return combat;
    }