mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
implemented tron test and fix
This commit is contained in:
@@ -6,8 +6,11 @@ import forge.game.card.Card;
|
||||
import forge.game.card.CounterEnumType;
|
||||
import forge.game.phase.PhaseType;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import static java.lang.Math.max;
|
||||
|
||||
public class GameStateEvaluator {
|
||||
private boolean debugging = false;
|
||||
private SimulationCreatureEvaluator eval = new SimulationCreatureEvaluator();
|
||||
@@ -153,7 +156,16 @@ public class GameStateEvaluator {
|
||||
if (c.isCreature()) {
|
||||
return eval.evaluateCreature(c);
|
||||
} else if (c.isLand()) {
|
||||
return 100;
|
||||
int value = 100;
|
||||
// for each mana color a land generates for free, increase the value by one
|
||||
// for each mana a land can produce, add one hundred.
|
||||
int max_produced = 0;
|
||||
int possible_colors = 0;
|
||||
for (SpellAbility m: c.getManaAbilities()) {
|
||||
max_produced = max(max_produced, m.amountOfManaGenerated(false));
|
||||
}
|
||||
value = 100 * max_produced;
|
||||
return value;
|
||||
} else if (c.isEnchantingCard()) {
|
||||
// TODO: Should provide value in whatever it's enchanting?
|
||||
// Else the computer would think that casting a Lifelink enchantment
|
||||
|
||||
@@ -1657,7 +1657,16 @@ public class AbilityUtils {
|
||||
final String s2 = applyAbilityTextChangeEffects(s, ctb);
|
||||
final String[] l = s2.split("/");
|
||||
final String expr = CardFactoryUtil.extractOperators(s2);
|
||||
final Player player = ctb == null ? null : ctb instanceof SpellAbility ? ((SpellAbility)ctb).getActivatingPlayer() : ctb.getHostCard().getController();
|
||||
|
||||
Player player = null;
|
||||
if (ctb != null) {
|
||||
if (ctb instanceof SpellAbility) {
|
||||
player = ((SpellAbility)ctb).getActivatingPlayer();
|
||||
}
|
||||
if (player == null) {
|
||||
player = ctb.getHostCard().getController();
|
||||
}
|
||||
}
|
||||
|
||||
// accept straight numbers
|
||||
if (l[0].startsWith("Number$")) {
|
||||
|
||||
@@ -279,6 +279,7 @@ public class SpellAbilityPickerSimulationTest extends SimulationTest {
|
||||
Game game = initAndCreateGame();
|
||||
Player p = game.getPlayers().get(1);
|
||||
|
||||
// start with a hand with a basic, a tapland, and a card that can't be cast
|
||||
addCard("Forest", p);
|
||||
addCardToZone("Forest", p, ZoneType.Hand);
|
||||
Card guildgate = addCardToZone("Simic Guildgate", p, ZoneType.Hand);
|
||||
@@ -286,11 +287,33 @@ public class SpellAbilityPickerSimulationTest extends SimulationTest {
|
||||
game.getPhaseHandler().devModeSet(PhaseType.MAIN1, p);
|
||||
game.getAction().checkStateEffects(true);
|
||||
|
||||
// ensure that the tapland is paid
|
||||
SpellAbilityPicker picker = new SpellAbilityPicker(game, p);
|
||||
SpellAbility sa = picker.chooseSpellAbilityToPlay(null);
|
||||
AssertJUnit.assertEquals(guildgate, sa.getHostCard());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void playTronOverBasic() {
|
||||
Game game = initAndCreateGame();
|
||||
Player p = game.getPlayers().get(1);
|
||||
|
||||
// start with a hand with a basic, a Tron land, and a card that can't be cast
|
||||
addCard("Urza's Tower", p);
|
||||
addCard("Urza's Mine", p);
|
||||
addCardToZone("Forest", p, ZoneType.Hand);
|
||||
Card desired = addCardToZone("Urza's Power Plant", p, ZoneType.Hand);
|
||||
addCardToZone("Opt", p, ZoneType.Hand);
|
||||
game.getPhaseHandler().devModeSet(PhaseType.MAIN1, p);
|
||||
game.getAction().checkStateEffects(true);
|
||||
AssertJUnit.assertEquals(p, desired.getController());
|
||||
|
||||
// ensure that the tapland is paid
|
||||
SpellAbilityPicker picker = new SpellAbilityPicker(game, p);
|
||||
SpellAbility sa = picker.chooseSpellAbilityToPlay(null);
|
||||
AssertJUnit.assertEquals(desired, sa.getHostCard());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPlayRememberedCardsLand() {
|
||||
Game game = initAndCreateGame();
|
||||
|
||||
Reference in New Issue
Block a user