support discarding at random pattern

master
melvin 2013-12-03 15:09:52 +08:00
parent 0b110d6459
commit bf7ff31ed2
1 changed files with 7 additions and 2 deletions

View File

@ -269,7 +269,7 @@ public enum MagicRuleEventAction {
} }
}, },
DiscardChosen( DiscardChosen(
"(?<choice>[^\\.]*) discards (?<amount2>[a-z]+) card(s)?.", "(?<choice>[^\\.]*) discards (?<amount2>[a-z]+) card(s)?(?<random> at random)?.",
MagicTargetHint.Negative, MagicTargetHint.Negative,
MagicTiming.Draw, MagicTiming.Draw,
"Discard" "Discard"
@ -277,13 +277,18 @@ public enum MagicRuleEventAction {
public MagicEventAction getAction(final String rule) { public MagicEventAction getAction(final String rule) {
final Matcher matcher = matched(rule); final Matcher matcher = matched(rule);
final int amount = MagicRuleEventAction.englishToInt(matcher.group("amount")); final int amount = MagicRuleEventAction.englishToInt(matcher.group("amount"));
final boolean isRandom = matcher.group("random").isEmpty() == false;
return new MagicEventAction() { return new MagicEventAction() {
@Override @Override
public void executeEvent(final MagicGame game, final MagicEvent event) { public void executeEvent(final MagicGame game, final MagicEvent event) {
event.processTargetPlayer(game,new MagicPlayerAction() { event.processTargetPlayer(game,new MagicPlayerAction() {
public void doAction(final MagicPlayer player) { public void doAction(final MagicPlayer player) {
if (isRandom) {
game.addEvent(MagicDiscardEvent.Random(event.getSource(), player, amount));
} else {
game.addEvent(new MagicDiscardEvent(event.getSource(), player, amount)); game.addEvent(new MagicDiscardEvent(event.getSource(), player, amount));
} }
}
}); });
} }
}; };