mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
shuffle => CardListUtil as static
This commit is contained in:
@@ -46,19 +46,6 @@ public class CardList extends ArrayList<Card> {
|
|||||||
public CardList(final Iterable<Card> al) { for(Card c : al) this.add(c); }
|
public CardList(final Iterable<Card> al) { for(Card c : al) this.add(c); }
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* shuffle.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
public final void shuffle() {
|
|
||||||
// reseed Random each time we want to Shuffle
|
|
||||||
// MyRandom.random = MyRandom.random;
|
|
||||||
Collections.shuffle(this, MyRandom.getRandom());
|
|
||||||
Collections.shuffle(this, MyRandom.getRandom());
|
|
||||||
Collections.shuffle(this, MyRandom.getRandom());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new list of cards by applying a filter to this one.
|
* Create a new list of cards by applying a filter to this one.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -19,11 +19,13 @@ package forge;
|
|||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
|
|
||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.util.Aggregates;
|
import forge.util.Aggregates;
|
||||||
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -275,10 +277,22 @@ public class CardListUtil {
|
|||||||
|
|
||||||
final CardList subList = new CardList();
|
final CardList subList = new CardList();
|
||||||
while (subList.size() < amount) {
|
while (subList.size() < amount) {
|
||||||
c.shuffle();
|
CardListUtil.shuffle(c);
|
||||||
subList.add(c.get(0));
|
subList.add(c.get(0));
|
||||||
c.remove(0);
|
c.remove(0);
|
||||||
}
|
}
|
||||||
return subList;
|
return subList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this method.
|
||||||
|
* @param cardList
|
||||||
|
*/
|
||||||
|
public static void shuffle(List<Card> list) {
|
||||||
|
// reseed Random each time we want to Shuffle
|
||||||
|
// MyRandom.random = MyRandom.random;
|
||||||
|
Collections.shuffle(list, MyRandom.getRandom());
|
||||||
|
Collections.shuffle(list, MyRandom.getRandom());
|
||||||
|
Collections.shuffle(list, MyRandom.getRandom());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ public final class GameActionUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
revealed.shuffle();
|
CardListUtil.shuffle(revealed);
|
||||||
for (final Card bottom : revealed) {
|
for (final Card bottom : revealed) {
|
||||||
Singletons.getModel().getGameAction().moveToBottomOfLibrary(bottom);
|
Singletons.getModel().getGameAction().moveToBottomOfLibrary(bottom);
|
||||||
}
|
}
|
||||||
@@ -323,7 +323,7 @@ public final class GameActionUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
revealed.shuffle();
|
CardListUtil.shuffle(revealed);
|
||||||
for (final Card bottom : revealed) {
|
for (final Card bottom : revealed) {
|
||||||
Singletons.getModel().getGameAction().moveToBottomOfLibrary(bottom);
|
Singletons.getModel().getGameAction().moveToBottomOfLibrary(bottom);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import forge.AllZone;
|
|||||||
import forge.AllZoneUtil;
|
import forge.AllZoneUtil;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
|
import forge.CardListUtil;
|
||||||
import forge.CardPredicates.Presets;
|
import forge.CardPredicates.Presets;
|
||||||
import forge.CardUtil;
|
import forge.CardUtil;
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
@@ -368,7 +369,7 @@ public class AbilityFactoryAttach {
|
|||||||
Card c = AbilityFactoryAttach.attachGeneralAI(sa, list, mandatory, attachSource, params.get("AILogic"));
|
Card c = AbilityFactoryAttach.attachGeneralAI(sa, list, mandatory, attachSource, params.get("AILogic"));
|
||||||
|
|
||||||
if ((c == null) && mandatory) {
|
if ((c == null) && mandatory) {
|
||||||
list.shuffle();
|
CardListUtil.shuffle(list);
|
||||||
c = list.get(0);
|
c = list.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1169,7 +1169,7 @@ public final class AbilityFactoryChangeZone {
|
|||||||
} else if (defined) {
|
} else if (defined) {
|
||||||
c = fetchList.get(0);
|
c = fetchList.get(0);
|
||||||
} else {
|
} else {
|
||||||
fetchList.shuffle();
|
CardListUtil.shuffle(fetchList);
|
||||||
// Save a card as a default, in case we can't find anything suitable.
|
// Save a card as a default, in case we can't find anything suitable.
|
||||||
Card first = fetchList.get(0);
|
Card first = fetchList.get(0);
|
||||||
if (ZoneType.Battlefield.equals(destination)) {
|
if (ZoneType.Battlefield.equals(destination)) {
|
||||||
@@ -1830,7 +1830,7 @@ public final class AbilityFactoryChangeZone {
|
|||||||
}
|
}
|
||||||
if (choice == null) {
|
if (choice == null) {
|
||||||
// No creatures or spells?
|
// No creatures or spells?
|
||||||
list.shuffle();
|
CardListUtil.shuffle(list);
|
||||||
choice = list.get(0);
|
choice = list.get(0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1943,7 +1943,7 @@ public final class AbilityFactoryChangeZone {
|
|||||||
}
|
}
|
||||||
if (choice == null) {
|
if (choice == null) {
|
||||||
// No creatures or spells?
|
// No creatures or spells?
|
||||||
list.shuffle();
|
CardListUtil.shuffle(list);
|
||||||
choice = list.get(0);
|
choice = list.get(0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import forge.AllZoneUtil;
|
|||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardCharacteristicName;
|
import forge.CardCharacteristicName;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
|
import forge.CardListUtil;
|
||||||
import forge.CardPredicates;
|
import forge.CardPredicates;
|
||||||
import forge.CardPredicates.Presets;
|
import forge.CardPredicates.Presets;
|
||||||
import forge.CardUtil;
|
import forge.CardUtil;
|
||||||
@@ -126,7 +127,7 @@ public class CardFactoryCreatures {
|
|||||||
return (c.sumAllCounters() > 0);
|
return (c.sumAllCounters() > 0);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
perms.shuffle();
|
CardListUtil.shuffle(perms);
|
||||||
this.setTargetCard(perms.get(0)); // TODO improve this.
|
this.setTargetCard(perms.get(0)); // TODO improve this.
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -653,14 +654,14 @@ public class CardFactoryCreatures {
|
|||||||
return c.hasKeyword("Indestructible");
|
return c.hasKeyword("Indestructible");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
indestructibles.shuffle();
|
CardListUtil.shuffle(indestructibles);
|
||||||
indestructibles.get(0).addDamage(1, target);
|
indestructibles.get(0).addDamage(1, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Then just add Damage randomnly
|
// Then just add Damage randomnly
|
||||||
|
|
||||||
else {
|
else {
|
||||||
damageableWolves.shuffle();
|
CardListUtil.shuffle(damageableWolves);
|
||||||
wolves.get(0).addDamage(1, target);
|
wolves.get(0).addDamage(1, target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -743,7 +744,7 @@ public class CardFactoryCreatures {
|
|||||||
this.setTargetPlayer(AllZone.getHumanPlayer());
|
this.setTargetPlayer(AllZone.getHumanPlayer());
|
||||||
} else {
|
} else {
|
||||||
final CardList list = this.getCreature();
|
final CardList list = this.getCreature();
|
||||||
list.shuffle();
|
CardListUtil.shuffle(list);
|
||||||
this.setTargetCard(list.get(0));
|
this.setTargetCard(list.get(0));
|
||||||
}
|
}
|
||||||
} // chooseTargetAI()
|
} // chooseTargetAI()
|
||||||
|
|||||||
@@ -619,7 +619,7 @@ public class CardFactorySorceries {
|
|||||||
final CardList compLand = AllZoneUtil.getPlayerLandsInPlay(AllZone.getComputerPlayer());
|
final CardList compLand = AllZoneUtil.getPlayerLandsInPlay(AllZone.getComputerPlayer());
|
||||||
|
|
||||||
if (compLand.size() > humLand.size()) {
|
if (compLand.size() > humLand.size()) {
|
||||||
compLand.shuffle();
|
CardListUtil.shuffle(compLand);
|
||||||
for (int i = 0; i < (compLand.size() - humLand.size()); i++) {
|
for (int i = 0; i < (compLand.size() - humLand.size()); i++) {
|
||||||
Singletons.getModel().getGameAction().sacrifice(compLand.get(i), this);
|
Singletons.getModel().getGameAction().sacrifice(compLand.get(i), this);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import forge.AllZone;
|
|||||||
import forge.AllZoneUtil;
|
import forge.AllZoneUtil;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
|
import forge.CardListUtil;
|
||||||
import forge.CardPredicates;
|
import forge.CardPredicates;
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
import forge.CommandReturn;
|
import forge.CommandReturn;
|
||||||
@@ -107,7 +108,7 @@ public class SpellPermanent extends Spell {
|
|||||||
computer = computer.getValidCards(SpellPermanent.this.championValid, controller, source);
|
computer = computer.getValidCards(SpellPermanent.this.championValid, controller, source);
|
||||||
computer.remove(source);
|
computer.remove(source);
|
||||||
|
|
||||||
computer.shuffle();
|
CardListUtil.shuffle(computer);
|
||||||
if (computer.size() != 0) {
|
if (computer.size() != 0) {
|
||||||
final Card c = computer.get(0);
|
final Card c = computer.get(0);
|
||||||
source.setChampionedCard(c);
|
source.setChampionedCard(c);
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import com.google.common.collect.Iterables;
|
|||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
|
import forge.CardListUtil;
|
||||||
import forge.CardPredicates.Presets;
|
import forge.CardPredicates.Presets;
|
||||||
import forge.CardPredicates;
|
import forge.CardPredicates;
|
||||||
import forge.CardUtil;
|
import forge.CardUtil;
|
||||||
@@ -375,7 +376,7 @@ public class GameNew {
|
|||||||
*/
|
*/
|
||||||
private static Iterable<Card> smoothComputerManaCurve(final Iterable<Card> in) {
|
private static Iterable<Card> smoothComputerManaCurve(final Iterable<Card> in) {
|
||||||
final CardList library = new CardList(in);
|
final CardList library = new CardList(in);
|
||||||
library.shuffle();
|
CardListUtil.shuffle(library);
|
||||||
|
|
||||||
// remove all land, keep non-basicland in there, shuffled
|
// remove all land, keep non-basicland in there, shuffled
|
||||||
CardList land = library.filter(CardPredicates.Presets.LANDS);
|
CardList land = library.filter(CardPredicates.Presets.LANDS);
|
||||||
|
|||||||
@@ -596,10 +596,10 @@ public class Upkeep extends Phase implements java.io.Serializable {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (humanCreatures.isEmpty()) {
|
if (humanCreatures.isEmpty()) {
|
||||||
options.shuffle();
|
CardListUtil.shuffle(options);
|
||||||
return options.get(0);
|
return options.get(0);
|
||||||
} else {
|
} else {
|
||||||
humanCreatures.shuffle();
|
CardListUtil.shuffle(humanCreatures);
|
||||||
return humanCreatures.get(0);
|
return humanCreatures.get(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ public class AIPlayer extends Player {
|
|||||||
|
|
||||||
// use dredge if there are more than one of them in your graveyard
|
// use dredge if there are more than one of them in your graveyard
|
||||||
if ((dredgers.size() > 1) || ((dredgers.size() == 1) && random.nextBoolean())) {
|
if ((dredgers.size() > 1) || ((dredgers.size() == 1) && random.nextBoolean())) {
|
||||||
dredgers.shuffle();
|
CardListUtil.shuffle(dredgers);
|
||||||
final Card c = dredgers.get(0);
|
final Card c = dredgers.get(0);
|
||||||
// rule 702.49a
|
// rule 702.49a
|
||||||
if (this.getDredgeNumber(c) <= this.getCardsIn(ZoneType.Library).size()) {
|
if (this.getDredgeNumber(c) <= this.getCardsIn(ZoneType.Library).size()) {
|
||||||
|
|||||||
@@ -1453,7 +1453,7 @@ public class ComputerUtil {
|
|||||||
final CardList prefList = typeList.getValidCards(prefValid[1].split(","), activate.getController(),
|
final CardList prefList = typeList.getValidCards(prefValid[1].split(","), activate.getController(),
|
||||||
activate);
|
activate);
|
||||||
if (prefList.size() != 0) {
|
if (prefList.size() != 0) {
|
||||||
prefList.shuffle();
|
CardListUtil.shuffle(prefList);
|
||||||
return prefList.get(0);
|
return prefList.get(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1469,7 +1469,7 @@ public class ComputerUtil {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (sacMeList.size() != 0) {
|
if (sacMeList.size() != 0) {
|
||||||
sacMeList.shuffle();
|
CardListUtil.shuffle(sacMeList);
|
||||||
return sacMeList.get(0);
|
return sacMeList.get(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -898,7 +898,7 @@ public class ComputerUtilBlock {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!chumpBlockers.isEmpty()) {
|
if (!chumpBlockers.isEmpty()) {
|
||||||
ComputerUtilBlock.getAttackers().shuffle();
|
CardListUtil.shuffle(ComputerUtilBlock.getAttackers());
|
||||||
for (final Card attacker : ComputerUtilBlock.getAttackers()) {
|
for (final Card attacker : ComputerUtilBlock.getAttackers()) {
|
||||||
blockers = ComputerUtilBlock.getPossibleBlockers(attacker, chumpBlockers, combat);
|
blockers = ComputerUtilBlock.getPossibleBlockers(attacker, chumpBlockers, combat);
|
||||||
for (final Card blocker : blockers) {
|
for (final Card blocker : blockers) {
|
||||||
|
|||||||
Reference in New Issue
Block a user