From b73d3d5ccd1c5301e335152a028e6ce64128ff25 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sat, 7 Nov 2020 15:55:23 -0500 Subject: [PATCH] [CMR] Implemented Wheel of Misfortune --- .../src/mage/cards/w/WheelOfMisfortune.java | 93 +++++++++++++++++++ Mage.Sets/src/mage/sets/CommanderLegends.java | 1 + 2 files changed, 94 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/w/WheelOfMisfortune.java diff --git a/Mage.Sets/src/mage/cards/w/WheelOfMisfortune.java b/Mage.Sets/src/mage/cards/w/WheelOfMisfortune.java new file mode 100644 index 00000000000..a053f1f9fc1 --- /dev/null +++ b/Mage.Sets/src/mage/cards/w/WheelOfMisfortune.java @@ -0,0 +1,93 @@ +package mage.cards.w; + +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.game.Game; +import mage.players.Player; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class WheelOfMisfortune extends CardImpl { + + public WheelOfMisfortune(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}"); + + // Each player secretly chooses a number 0 or greater, then all players reveal those numbers simultaneously and determine the highest and lowest numbers revealed this way. Wheel of Misfortune deals damage equal to the highest number to each player who chose that number. Each player who didn't choose the lowest number discards their hand, then draws seven cards. + this.getSpellAbility().addEffect(new WheelOfMisfortuneEffect()); + } + + private WheelOfMisfortune(final WheelOfMisfortune card) { + super(card); + } + + @Override + public WheelOfMisfortune copy() { + return new WheelOfMisfortune(this); + } +} + +class WheelOfMisfortuneEffect extends OneShotEffect { + + WheelOfMisfortuneEffect() { + super(Outcome.Benefit); + staticText = "Each player secretly chooses a number 0 or greater, " + + "then all players reveal those numbers simultaneously " + + "and determine the highest and lowest numbers revealed this way. " + + "{this} deals damage equal to the highest number to each player who chose that number. " + + "Each player who didn't choose the lowest number discards their hand, then draws seven cards."; + } + + private WheelOfMisfortuneEffect(final WheelOfMisfortuneEffect effect) { + super(effect); + } + + @Override + public WheelOfMisfortuneEffect copy() { + return new WheelOfMisfortuneEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Map playerMap = new HashMap<>(); + for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { + Player player = game.getPlayer(playerId); + if (player == null) { + continue; + } + playerMap.put(playerId, player.getAmount(0, 1000, "Choose a number", game)); + } + for (Map.Entry entry : playerMap.entrySet()) { + Player player = game.getPlayer(entry.getKey()); + if (player == null) { + continue; + } + game.informPlayers(player.getName() + " chose " + playerMap); + } + int maxValue = playerMap.values().stream().mapToInt(x -> x).max().orElse(0); + game.informPlayers("The highest number chosen was " + maxValue); + int minValue = playerMap.values().stream().mapToInt(x -> x).min().orElse(0); + game.informPlayers("The lowest number chosen was " + maxValue); + for (Map.Entry entry : playerMap.entrySet()) { + Player player = game.getPlayer(entry.getKey()); + if (player == null) { + continue; + } + if (entry.getValue() >= maxValue) { + player.damage(maxValue, source.getSourceId(), game); + } else if (entry.getValue() > minValue) { + player.discard(player.getHand(), source, game); + player.drawCards(7, source.getSourceId(), game); + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/CommanderLegends.java b/Mage.Sets/src/mage/sets/CommanderLegends.java index 05b69f4704a..2785af3e6bc 100644 --- a/Mage.Sets/src/mage/sets/CommanderLegends.java +++ b/Mage.Sets/src/mage/sets/CommanderLegends.java @@ -514,6 +514,7 @@ public final class CommanderLegends extends ExpansionSet { cards.add(new SetCardInfo("Warden of Evos Isle", 106, Rarity.UNCOMMON, mage.cards.w.WardenOfEvosIsle.class)); cards.add(new SetCardInfo("Wear // Tear", 456, Rarity.UNCOMMON, mage.cards.w.WearTear.class)); cards.add(new SetCardInfo("Welding Sparks", 210, Rarity.COMMON, mage.cards.w.WeldingSparks.class)); + cards.add(new SetCardInfo("Wheel of Misfortune", 211, Rarity.RARE, mage.cards.w.WheelOfMisfortune.class)); cards.add(new SetCardInfo("Whelming Wave", 409, Rarity.RARE, mage.cards.w.WhelmingWave.class)); cards.add(new SetCardInfo("White Sun's Zenith", 391, Rarity.RARE, mage.cards.w.WhiteSunsZenith.class)); cards.add(new SetCardInfo("Wickerbough Elder", 440, Rarity.COMMON, mage.cards.w.WickerboughElder.class));