From 8de0472048f4fdead1762b2c5bcc6a7b45e9012e Mon Sep 17 00:00:00 2001 From: maustin Date: Mon, 11 Jun 2018 18:03:56 +0100 Subject: [PATCH] Improved deck generation code - ensure keycard is non-land for LDA deck generation and improve handling of basic lands to ensure no colour is missed. --- forge-gui/src/main/java/forge/deck/DeckgenUtil.java | 10 ++++++++-- .../java/forge/limited/CardThemedDeckBuilder.java | 12 ++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java index 7b1adcee24d..361e67673f0 100644 --- a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java +++ b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java @@ -230,7 +230,13 @@ public class DeckgenUtil { */ public static Deck buildLDACArchetypeDeck(Archetype archetype, GameFormat format, boolean isForAI){ List> preSelectedCardNames = archetype.getCardProbabilities(); - PaperCard card = StaticData.instance().getCommonCards().getUniqueByName(preSelectedCardNames.get(0).getLeft()); + PaperCard card = null; + for(Pair pair : preSelectedCardNames){ + card = StaticData.instance().getCommonCards().getUniqueByName(pair.getLeft()); + if(!card.getRules().getType().isLand()){ + break; + } + } List selectedCards = new ArrayList<>(); for(Pair pair:preSelectedCardNames){ String name = pair.getLeft(); @@ -248,7 +254,7 @@ public class DeckgenUtil { int removeCount=0; int i=0; for(PaperCard c:selectedCards){ - if(MyRandom.getRandom().nextInt(100)>70+(15-(i/selectedCards.size())*selectedCards.size()) && removeCount<4 //randomly remove some cards - more likely as distance increases + if( i > 4 && MyRandom.getRandom().nextInt(100)>70+(15-(i/selectedCards.size())*selectedCards.size()) && removeCount<4 //randomly remove some cards - more likely as distance increases &&!c.getName().contains("Urza")){ //avoid breaking Tron decks toRemove.add(c); removeCount++; diff --git a/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java b/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java index 371b2fd1489..54be9b097d0 100644 --- a/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java +++ b/forge-gui/src/main/java/forge/limited/CardThemedDeckBuilder.java @@ -99,7 +99,7 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { targetSize=deckFormat.getMainRange().getMinimum(); FullDeckColors deckColors = new FullDeckColors(); int cardCount=0; - int colourCheckAmount = 20; + int colourCheckAmount = 30; if (targetSize < 60){ colourCheckAmount = 10;//lower amount for planar decks } @@ -623,12 +623,20 @@ public class CardThemedDeckBuilder extends DeckGeneratorBase { numColors++; } } + // add one of each land required first so that any rounding errors do not remove the only land of a colour + for (int i = 0; i < 5; i++) { + if (clrCnts[i] > 0) { + deckList.add(getBasicLand(i)); + landsNeeded--; + } + } + // do not update landsNeeded until after the loop, because the // calculation involves landsNeeded for (int i = 0; i < 5; i++) { if (clrCnts[i] > 0) { - // calculate number of lands for each color + // calculate remaining number of lands for each color float p = (float) clrCnts[i] / (float) totalColor; int nLand = Math.round(landsNeeded * p); // desired truncation to int if (logToConsole) {