- Further work on random trades (experimental, disabled by default.)

This commit is contained in:
Agetian
2017-09-01 14:53:44 +00:00
parent 01e1c2ab0a
commit badf68b80a
6 changed files with 39 additions and 7 deletions

View File

@@ -545,12 +545,27 @@ public class AiBlockController {
boolean randomTradeIfBehindOnBoard = false; boolean randomTradeIfBehindOnBoard = false;
int minRandomTradeChance = 0; int minRandomTradeChance = 0;
int maxRandomTradeChance = 0; int maxRandomTradeChance = 0;
int maxCreatDiff = 0;
int aiCreatureCount = 0;
int oppCreatureCount = 0;
if (ai.getController().isAI()) { if (ai.getController().isAI()) {
AiController aic = ((PlayerControllerAi) ai.getController()).getAi(); AiController aic = ((PlayerControllerAi) ai.getController()).getAi();
enableRandomTrades = aic.getBooleanProperty(AiProps.ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK); enableRandomTrades = aic.getBooleanProperty(AiProps.ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK);
randomTradeIfBehindOnBoard = aic.getBooleanProperty(AiProps.RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS); randomTradeIfBehindOnBoard = aic.getBooleanProperty(AiProps.RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS);
minRandomTradeChance = aic.getIntProperty(AiProps.MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK); minRandomTradeChance = aic.getIntProperty(AiProps.MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK);
maxRandomTradeChance = aic.getIntProperty(AiProps.MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK); maxRandomTradeChance = aic.getIntProperty(AiProps.MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK);
maxCreatDiff = aic.getIntProperty(AiProps.MAX_DIFF_IN_CREATURE_COUNT_TO_TRADE);
}
if (enableRandomTrades) {
aiCreatureCount = ComputerUtil.countUsefulCreatures(ai);
if (randomTradeIfBehindOnBoard) {
aiCreatureCount += maxCreatDiff;
}
if (!attackersLeft.isEmpty()) {
oppCreatureCount = ComputerUtil.countUsefulCreatures(attackersLeft.get(0).getController());
}
} }
for (final Card attacker : attackersLeft) { for (final Card attacker : attackersLeft) {
@@ -586,11 +601,11 @@ public class AiBlockController {
int evalAtk = ComputerUtilCard.evaluateCreature(attacker, false, false); int evalAtk = ComputerUtilCard.evaluateCreature(attacker, false, false);
int evalBlk = ComputerUtilCard.evaluateCreature(blocker, false, false); int evalBlk = ComputerUtilCard.evaluateCreature(blocker, false, false);
boolean powerParityOrHigher = blocker.getNetPower() >= attacker.getNetPower(); boolean powerParityOrHigher = blocker.getNetPower() >= attacker.getNetPower();
boolean creatureParityOrHigher = ComputerUtil.countUsefulCreatures(ai) >= ComputerUtil.countUsefulCreatures(attacker.getController()); boolean creatureParityOrAllowedDiff = aiCreatureCount >= oppCreatureCount;
if (evalBlk <= evalAtk if (evalBlk <= evalAtk + 1 // "1" accounts for tapped. Maybe increase to 3 or 5 for higher tolerance?
&& powerParityOrHigher && powerParityOrHigher
&& (creatureParityOrHigher || randomTradeIfBehindOnBoard) && creatureParityOrAllowedDiff
&& MyRandom.percentTrue(chance)) { && MyRandom.percentTrue(chance)) {
doTrade = true; doTrade = true;
} }

View File

@@ -40,6 +40,7 @@ public enum AiProps { /** */
ATTACK_INTO_TRADE_WHEN_TAPPED_OUT ("false"), /** */ ATTACK_INTO_TRADE_WHEN_TAPPED_OUT ("false"), /** */
ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK ("false"), /** */ ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK ("false"), /** */
RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS ("false"), /** */ RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS ("false"), /** */
MAX_DIFF_IN_CREATURE_COUNT_TO_TRADE ("1"), /** */
MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK ("20"), /** */ MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK ("20"), /** */
MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK ("100"), /** */ MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK ("100"), /** */
MIN_SPELL_CMC_TO_COUNTER ("0"), MIN_SPELL_CMC_TO_COUNTER ("0"),

View File

@@ -16,10 +16,14 @@ ATTACK_INTO_TRADE_WHEN_TAPPED_OUT=false
USE_BERSERK_AGGRESSIVELY=false USE_BERSERK_AGGRESSIVELY=false
# Trade blocking preferences (enabling these will make the AI trade more aggressively when considering blocks, # Trade blocking preferences (enabling these will make the AI trade more aggressively when considering blocks,
# but only with creatures that are worse in abilities and have lower or the same power as the attacker) # but only with creatures that are worse in abilities and have lower or the same power as the attacker). Note
# that the first option serves as a master toggle. If it is disabled, the following related options have no effect.
ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK=false ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK=false
# If enabled, the AI will consider trade blocking even if its creature count is lower than the opponent's # If enabled, the AI will consider trade blocking even if its creature count is lower than the opponent's
RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS=false RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS=false
# If the previous option is enabled, then the next option controls how big of a handicap in creature count the AI
# is allowed to have to still decide to trade
MAX_DIFF_IN_CREATURE_COUNT_TO_TRADE=1
# Min and max chance to randomly aggressively trade when blocking (note that it will become 100 if the AI is in danger) # Min and max chance to randomly aggressively trade when blocking (note that it will become 100 if the AI is in danger)
MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=20 MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=20
MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=65 MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=65

View File

@@ -16,10 +16,14 @@ ATTACK_INTO_TRADE_WHEN_TAPPED_OUT=false
USE_BERSERK_AGGRESSIVELY=false USE_BERSERK_AGGRESSIVELY=false
# Trade blocking preferences (enabling these will make the AI trade more aggressively when considering blocks, # Trade blocking preferences (enabling these will make the AI trade more aggressively when considering blocks,
# but only with creatures that are worse in abilities and have lower or the same power as the attacker) # but only with creatures that are worse in abilities and have lower or the same power as the attacker). Note
# that the first option serves as a master toggle. If it is disabled, the following related options have no effect.
ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK=false ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK=false
# If enabled, the AI will consider trade blocking even if its creature count is lower than the opponent's # If enabled, the AI will consider trade blocking even if its creature count is lower than the opponent's
RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS=false RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS=false
# If the previous option is enabled, then the next option controls how big of a handicap in creature count the AI
# is allowed to have to still decide to trade
MAX_DIFF_IN_CREATURE_COUNT_TO_TRADE=1
# Min and max chance to randomly aggressively trade when blocking (note that it will become 100 if the AI is in danger) # Min and max chance to randomly aggressively trade when blocking (note that it will become 100 if the AI is in danger)
MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=20 MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=20
MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=65 MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=65

View File

@@ -16,10 +16,14 @@ ATTACK_INTO_TRADE_WHEN_TAPPED_OUT=false
USE_BERSERK_AGGRESSIVELY=true USE_BERSERK_AGGRESSIVELY=true
# Trade blocking preferences (enabling these will make the AI trade more aggressively when considering blocks, # Trade blocking preferences (enabling these will make the AI trade more aggressively when considering blocks,
# but only with creatures that are worse in abilities and have lower or the same power as the attacker) # but only with creatures that are worse in abilities and have lower or the same power as the attacker). Note
# that the first option serves as a master toggle. If it is disabled, the following related options have no effect.
ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK=true ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK=true
# If enabled, the AI will consider trade blocking even if its creature count is lower than the opponent's # If enabled, the AI will consider trade blocking even if its creature count is lower than the opponent's
RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS=true RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS=true
# If the previous option is enabled, then the next option controls how big of a handicap in creature count the AI
# is allowed to have to still decide to trade
MAX_DIFF_IN_CREATURE_COUNT_TO_TRADE=1
# Min and max chance to randomly aggressively trade when blocking (note that it will become 100 if the AI is in danger) # Min and max chance to randomly aggressively trade when blocking (note that it will become 100 if the AI is in danger)
MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=20 MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=20
MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=65 MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=65

View File

@@ -16,10 +16,14 @@ ATTACK_INTO_TRADE_WHEN_TAPPED_OUT=true
USE_BERSERK_AGGRESSIVELY=true USE_BERSERK_AGGRESSIVELY=true
# Trade blocking preferences (enabling these will make the AI trade more aggressively when considering blocks, # Trade blocking preferences (enabling these will make the AI trade more aggressively when considering blocks,
# but only with creatures that are worse in abilities and have lower or the same power as the attacker) # but only with creatures that are worse in abilities and have lower or the same power as the attacker). Note
# that the first option serves as a master toggle. If it is disabled, the following related options have no effect.
ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK=false ENABLE_RANDOM_FAVORABLE_TRADES_ON_BLOCK=false
# If enabled, the AI will consider trade blocking even if its creature count is lower than the opponent's # If enabled, the AI will consider trade blocking even if its creature count is lower than the opponent's
RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS=false RANDOMLY_TRADE_EVEN_WHEN_HAVE_LESS_CREATS=false
# If the previous option is enabled, then the next option controls how big of a handicap in creature count the AI
# is allowed to have to still decide to trade
MAX_DIFF_IN_CREATURE_COUNT_TO_TRADE=1
# Min and max chance to randomly aggressively trade when blocking (note that it will become 100 if the AI is in danger) # Min and max chance to randomly aggressively trade when blocking (note that it will become 100 if the AI is in danger)
MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=20 MIN_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=20
MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=65 MAX_CHANCE_TO_RANDOMLY_TRADE_ON_BLOCK=65