From 7f4575589f0d4e11d0aa79aa59c340d37947fba7 Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 04:14:37 +0000 Subject: [PATCH] 1) AllZoneUtil.java - add a function rearrangeTopOfLibrary(Player, numCards, shuffle?); 2) update Natural Selection to use this new function --- src/forge/AllZoneUtil.java | 45 ++++++++++++++++++++++++ src/forge/CardFactory.java | 70 ++++++++++++++------------------------ 2 files changed, 71 insertions(+), 44 deletions(-) diff --git a/src/forge/AllZoneUtil.java b/src/forge/AllZoneUtil.java index ad9eb56748e..c466f393e53 100644 --- a/src/forge/AllZoneUtil.java +++ b/src/forge/AllZoneUtil.java @@ -284,4 +284,49 @@ public class AllZoneUtil { return c.isArtifact(); } }; + + //zone manipulation, maybe be better off in GameAction.java... + /** + * use this when you need to rearrange the top X cards in a player's library. You + * may also specify a shuffle when done + * + * @param player the player to target (currently *cannot* be Computer - no effect) + * @param numCards the number of cards from the top to rearrange + * @param shuffle true if a shuffle is desired at the end, false otherwise + */ + public static void rearrangeTopOfLibrary(final String player, final int numCards, boolean shuffle) { + if(player.equals(Constant.Player.Human)) { + PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player); + int maxCards = lib.size(); + maxCards = Math.min(maxCards, numCards); + if(maxCards == 0) return; + CardList topCards = new CardList(); + //show top n cards: + for(int j = 0; j < maxCards; j++ ) { + topCards.add(lib.get(j)); + } + for(int i = 1; i <= maxCards; i++) { + String suffix = ""; + switch(i) { + case 1: suffix="st"; break; + case 2: suffix="nd"; break; + case 3: suffix="rd"; break; + default: suffix="th"; + } + String title = "Put "+i+suffix+" in Library: "; + Object o = AllZone.Display.getChoiceOptional(title, topCards.toArray()); + if(o == null) break; + Card c_1 = (Card) o; + topCards.remove(c_1); + lib.remove(c_1); + lib.add(c_1, i - 1); + } + if(shuffle) { + AllZone.GameAction.shuffle(player); + } + } + else { + //this does not and is not expected to work for the AI at this time + } + } } \ No newline at end of file diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index e99de6da080..c1f8976cc01 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -17767,52 +17767,34 @@ public class CardFactory implements NewConstants { //*************** START *********** START ************************** - else if(cardName.equals("Natural Selection")) { - /* Look at the top 3 cards of target player's library and put them - * back in any order. You may have that player shuffle his or - * her library */ + /* Look at the top 3 cards of target player's library and put them + * back in any order. You may have that player shuffle his or + * her library */ - final SpellAbility spell = new Spell(card) { - private static final long serialVersionUID = 8649520296192617609L; - - @Override - public void resolve() { - String player = getTargetPlayer(); - PlayerZone lib = AllZone.getZone(Constant.Zone.Library, player); - if(lib.size() < 3) return; - CardList topThree = new CardList(); - //show top 3 cards: - topThree.add(lib.get(0)); - topThree.add(lib.get(1)); - topThree.add(lib.get(2)); - for(int i = 1; i <= 3; i++) { - String Title = "Put on top: "; - if(i == 2) Title = "Put second from top: "; - if(i == 3) Title = "Put third from top: "; - Object o = AllZone.Display.getChoiceOptional(Title, topThree.toArray()); - if(o == null) break; - Card c_1 = (Card) o; - topThree.remove(c_1); - lib.remove(c_1); - lib.add(c_1, i - 1); - } - String[] choices = new String[] {"Yes", "No"}; - Object o = AllZone.Display.getChoice("Shuffle target player's library?", choices); - String myChoice = (String) o; - if(myChoice.equals("Yes")) { - AllZone.GameAction.shuffle(getTargetPlayer()); - } - } - @Override - public boolean canPlayAI() { - //basically the same reason as Sensei's Diving Top - return false; - } - };//spell - card.clearSpellAbility(); - card.addSpellAbility(spell); - spell.setBeforePayMana(CardFactoryUtil.input_targetPlayer(spell)); + final SpellAbility spell = new Spell(card) { + private static final long serialVersionUID = 8649520296192617609L; + + @Override + public void resolve() { + String player = getTargetPlayer(); + AllZoneUtil.rearrangeTopOfLibrary(player, 3, false); + String[] choices = new String[] {"Yes", "No"}; + Object o = AllZone.Display.getChoice("Shuffle target player's library?", choices); + String myChoice = (String) o; + if(myChoice.equals("Yes")) { + AllZone.GameAction.shuffle(player); + } + } + @Override + public boolean canPlayAI() { + //basically the same reason as Sensei's Diving Top + return false; + } + };//spell + card.clearSpellAbility(); + card.addSpellAbility(spell); + spell.setBeforePayMana(CardFactoryUtil.input_targetPlayer(spell)); } //*************** END ************ END **************************