- AF Discard AI will now also use discardNumTypeAI.

- Improved discardNumTypeAI.
This commit is contained in:
Sloth
2012-08-27 20:30:03 +00:00
parent 7caf0a35b8
commit ac515a6461
2 changed files with 37 additions and 16 deletions

View File

@@ -1373,8 +1373,9 @@ public class AbilityFactoryZoneAffecting {
dPHand = AbilityFactoryReveal.getRevealedList(p, dPHand, amount);
}
CardList dPChHand = new CardList(dPHand);
String[] dValid = null;
if (params.containsKey("DiscardValid")) { // Restrict card choices
final String[] dValid = params.get("DiscardValid").split(",");
dValid = params.get("DiscardValid").split(",");
dPChHand = dPHand.getValidCards(dValid, source.getController(), source);
}
Player chooser = p;
@@ -1386,12 +1387,24 @@ public class AbilityFactoryZoneAffecting {
if (chooser.isComputer()) {
// AI
if (p.isComputer()) { // discard AI cards
CardList list = ComputerUtil.discardNumTypeAI(numCards, dValid, sa);
if (mode.startsWith("Reveal")) {
GuiUtils.chooseOneOrNone("Computer has chosen", list.toArray());
}
discarded.addAll(list);
for (Card card : list) {
p.discard(card, sa);
}
continue;
}
// discard human cards
for (int i = 0; i < numCards; i++) {
if (dPChHand.size() > 0) {
final CardList dChoices = new CardList();
if (params.containsKey("DiscardValid")) {
final String dValid = params.get("DiscardValid");
if (dValid.contains("Creature") && !dValid.contains("nonCreature")) {
final String validString = params.get("DiscardValid");
if (validString.contains("Creature") && !validString.contains("nonCreature")) {
final Card c = CardFactoryUtil.getBestCreatureAI(dPChHand);
if (c != null) {
dChoices.add(CardFactoryUtil.getBestCreatureAI(dPChHand));

View File

@@ -1536,23 +1536,31 @@ public class ComputerUtil {
if (hand.size() <= 0) {
continue;
}
final CardList lands = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield).getType("Land");
final int numLandsInPlay = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield).getType("Land").size();
final CardList landsInHand = hand.getType("Land");
lands.addAll(landsInHand);
if (lands.size() > 5) {
if (landsInHand.size() > 0) { // discard lands
discardList.add(landsInHand.get(0));
hand.remove(landsInHand.get(0));
} else { // discard low costed stuff
CardListUtil.sortCMC(hand);
hand.reverse();
final int numLandsInHand = landsInHand.size();
// Discard a land
if (numLandsInHand > 3 || (numLandsInHand > 2 && numLandsInPlay > 0)
|| (numLandsInHand > 1 && numLandsInPlay > 2)
|| (numLandsInHand > 0 && numLandsInPlay > 5)) {
discardList.add(landsInHand.get(0));
hand.remove(landsInHand.get(0));
} else { // Discard other stuff
CardListUtil.sortCMC(hand);
int numLandsAvailable = numLandsInPlay;
if (numLandsInHand > 0) {
numLandsAvailable++;
}
//Discard unplayable card
if (hand.get(0).getCMC() > numLandsAvailable) {
discardList.add(hand.get(0));
hand.remove(hand.get(0));
} else { //Discard worst card
Card worst = CardFactoryUtil.getWorstAI(hand);
discardList.add(worst);
hand.remove(worst);
}
} else { // discard high costed stuff
CardListUtil.sortCMC(hand);
discardList.add(hand.get(0));
hand.remove(hand.get(0));
}
}