commit 8540e3bcf61b1b7364bb8f3b4c1cecb9d25c9325 parent 5ae01a25fc677a474b3b9bf708e1b22ae7d76931 Author: Kevin Corvisier <git@kevincorvisier.fr> Date: Sun, 6 Oct 2024 21:53:45 +0900 Allow loading of opponents decks from several locations, add premodern decks to example1 configuration Diffstat:
29 files changed, 248 insertions(+), 25 deletions(-)
diff --git a/src/main/java/fr/kevincorvisier/mtg/gdb/evaluation/WinRatioEvaluation.java b/src/main/java/fr/kevincorvisier/mtg/gdb/evaluation/WinRatioEvaluation.java @@ -1,6 +1,7 @@ package fr.kevincorvisier.mtg.gdb.evaluation; import java.io.File; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -31,8 +32,8 @@ public class WinRatioEvaluation implements Evaluation private final MagicOnlineDeckLoader forgeUtils; - @Value("${evaluation.win-ratio.opponents-directory}") - private final File opponentsDirectory; + @Value("#{'${evaluation.win-ratio.opponents-directories}'.split(',')}") + private final File[] opponentsDirectories; @Value("${evaluation.win-ratio.initial.min-games}") private final int initialMinGames; @Value("${evaluation.win-ratio.subsequent.min-games}") @@ -51,14 +52,17 @@ public class WinRatioEvaluation implements Evaluation { try { - this.opponents = forgeUtils.loadDecks(opponentsDirectory); + final Collection<Deck> newOpponents = new ArrayList<>(); + for (final File opponentsDirectory : opponentsDirectories) + newOpponents.addAll(forgeUtils.loadDecks(opponentsDirectory)); + this.opponents = newOpponents; } catch (final Exception e) { if (opponents.isEmpty()) - throw new RuntimeException("Unable to load opponents from directory: " + opponentsDirectory); + throw new RuntimeException("Unable to load opponents from directories: " + opponentsDirectories); - log.warn("Unable to load opponents from directory: {}, keeping the previous ones", opponentsDirectory, e); + log.warn("Unable to load opponents from directories: {}, keeping the previous ones", opponentsDirectories, e); } } diff --git a/src/main/packaged-resources/cfg/evaluation.properties b/src/main/packaged-resources/cfg/evaluation.properties @@ -48,7 +48,7 @@ evaluation.win-ratio.subsequent.min-games=93 evaluation.win-ratio.timeout.seconds=120 evaluation.win-ratio.timeout.player-turns=12 -evaluation.win-ratio.opponents-directory=example1/opponents +evaluation.win-ratio.opponents-directories=example1/ms-opponents,example1/pm-opponents evaluation.win-ratio.player.ai-profile=Default evaluation.win-ratio.opponent.ai-profile=Default diff --git a/src/main/packaged-resources/cfg/example1/opponents/2021-11-27_OnodaHirhoshi_Stompy.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2021-11-27_OnodaHirhoshi_Stompy.txt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2021-12-31_AkaiSatoshi_BGAggro.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2021-12-31_AkaiSatoshi_BGAggro.txt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2022-04-29_AkaiSatoshi_TurboCycling.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2022-04-29_AkaiSatoshi_TurboCycling.txt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2022-12-30_WatanabeDaiki_BlueOrbMiddleSchool.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2022-12-30_WatanabeDaiki_BlueOrbMiddleSchool.txt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2023-03-25_SetoMasakazu_Burn.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2023-03-25_SetoMasakazu_Burn.txt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2023-06-17_OkauchiRyota_Rogue.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2023-06-17_OkauchiRyota_Rogue.txt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-01-20_OkauchiRyota_SnakeTongueMiddleSchool.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2024-01-20_OkauchiRyota_SnakeTongueMiddleSchool.txt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-02-25_YaitaDaisuke_URcontrolMiddleSchool.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2024-02-25_YaitaDaisuke_URcontrolMiddleSchool.txt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-06-15_SugiuraYuki_Survival.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2024-06-15_SugiuraYuki_Survival.txt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-08-18_TsujiNaoto_CanadianThresholdMiddleSchool.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2024-08-18_TsujiNaoto_CanadianThresholdMiddleSchool.txt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-09-14_SuzukiRyo_GoblinMiddleSchool.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2024-09-14_SuzukiRyo_Goblins.txt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-09-23_TamaruDaisuke_DeadguyAle.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2024-09-23_TamaruDaisuke_DeadguyAle.txt diff --git a/src/main/packaged-resources/cfg/example1/ms-opponents/2024-10-05_WatanabeDaiki_Steroid.txt b/src/main/packaged-resources/cfg/example1/ms-opponents/2024-10-05_WatanabeDaiki_Steroid.txt @@ -0,0 +1,17 @@ +4 Treetop Village +4 Wooded Foothills +1 Pendelhaven +3 Cursed Scroll +4 Grim Lavamancer +4 Mogg Fanatic +4 Seal of Fire +4 Rancor +4 Wasteland +4 Mountain +3 River Boa +3 Incinerate +4 Skyshroud Elite +2 Forest +4 Wild Mongrel +4 Karplusan Forest +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/opponents/2024-09-14_TsujiNaoto_Steroid.txt b/src/main/packaged-resources/cfg/example1/opponents/2024-09-14_TsujiNaoto_Steroid.txt @@ -1,16 +0,0 @@ -4 Treetop Village -1 Pendelhaven -4 Wooded Foothills -4 Cursed Scroll -4 Mishra's Factory -4 Grim Lavamancer -4 Mogg Fanatic -4 Seal of Fire -4 Rancor -4 Mountain -4 River Boa -4 Skyshroud Elite -4 Wild Mongrel -3 Forest -4 Karplusan Forest -4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2022-11-12_AndoniPerez_ThreeDeuce.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2022-11-12_AndoniPerez_ThreeDeuce.txt @@ -0,0 +1,20 @@ +4 City of Brass +4 Swords to Plowshares +4 Wooded Foothills +1 Cursed Scroll +3 Grim Lavamancer +4 Windswept Heath +1 Battlefield Forge +4 Jackal Pup +1 Plains +4 Mogg Fanatic +4 Wax +4 Rancor +4 Savannah Lions +2 Mountain +4 River Boa +3 Incinerate +2 Skyshroud Elite +2 Forest +2 Karplusan Forest +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2023-02-28_KalleKallur_Terrageddon.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2023-02-28_KalleKallur_Terrageddon.txt @@ -0,0 +1,21 @@ +1 Kor Haven +2 Treetop Village +4 Swords to Plowshares +2 Seal of Cleansing +4 Windswept Heath +4 Nimble Mongoose +1 Dust Bowl +3 Plains +3 Tranquil Thicket +1 Nantuko Monastery +4 Mox Diamond +3 Secluded Steppe +4 Wasteland +3 Weathered Wayfarer +3 Savannah Lions +4 Terravore +4 Werebear +2 Rith's Grove +2 Forest +3 Mulch +3 Armageddon diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2023-07-31_JulianFriedrich_Landstill.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2023-07-31_JulianFriedrich_Landstill.txt @@ -0,0 +1,4 @@ +4 Swords to Plowshares +4 Counterspell +26 Plains +26 Island diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2023-11-26_Ruudmaarten_TheSolution.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2023-11-26_Ruudmaarten_TheSolution.txt @@ -0,0 +1,20 @@ +3 Fact or Fiction +4 Swords to Plowshares +1 Dismantling Blow +2 Adarkar Wastes +2 Battlefield Forge +4 Flooded Strand +2 Plains +3 Island +4 Mother of Runes +4 Lightning Angel +2 Reflecting Pool +3 Exalted Angel +4 Meddling Mage +1 Mountain +2 Shivan Reef +4 Fire +4 Impulse +4 Mana Leak +3 Lightning Bolt +4 Grand Coliseum diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2023-11-30_FernandoPortelada_DeadguyAle.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2023-11-30_FernandoPortelada_DeadguyAle.txt @@ -0,0 +1,15 @@ +4 Hypnotic Specter +4 Swords to Plowshares +1 Disenchant +3 Tainted Field +3 Phyrexian Arena +4 Gerrard's Verdict +9 Swamp +4 Plains +4 Caves of Koilos +4 Duress +4 Vindicate +4 Nantuko Shade +4 Dark Ritual +4 Wasteland +4 Exalted Angel diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2024-01-07_KimKarlPfeiffer_Zoo.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2024-01-07_KimKarlPfeiffer_Zoo.txt @@ -0,0 +1,19 @@ +2 City of Brass +2 Treetop Village +4 Wooded Foothills +1 Bloodstained Mire +4 Call of the Herd +2 Cursed Scroll +1 Windswept Heath +4 Grim Lavamancer +4 Naturalize +4 Jackal Pup +4 Mogg Fanatic +4 Rancor +3 Mountain +4 River Boa +4 Incinerate +2 Skyshroud Elite +3 Forest +4 Karplusan Forest +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2024-05-26_Arnievoncalum_Fluctuator.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2024-05-26_Arnievoncalum_Fluctuator.txt @@ -0,0 +1,18 @@ +3 Slippery Karst +4 Pendrell Drake +4 Smoldering Crater +4 Remote Isle +4 Polluted Mire +1 Drain Life +4 Drifting Meadow +4 Cloud of Faeries +4 Miscalculation +4 Blasted Landscape +2 Drifting Djinn +1 Songs of the Damned +1 Dromar's Cavern +4 Keeneye Aven +4 Primoc Escapee +4 Sandbar Merfolk +4 Sandbar Serpent +4 Fluctuator diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2024-05-31_JohnJacobBjorgaard_Survival.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2024-05-31_JohnJacobBjorgaard_Survival.txt @@ -0,0 +1,31 @@ +2 Avalanche Riders +1 Gempalm Polluter +4 Recurring Nightmare +4 Llanowar Wastes +3 Swamp +4 Survival of the Fittest +1 Squee, Goblin Nabob +4 Wall of Roots +1 Mountain +1 Shard Phoenix +1 Withered Wretch +1 Sulfurous Springs +4 Karplusan Forest +1 Living Death +2 Wall of Blossoms +1 Anger +2 City of Brass +1 Wooded Foothills +1 Monk Realist +2 Rotlung Reanimator +2 Yavimaya Elder +1 Plains +1 Undiscovered Paradise +1 Uktabi Orangutan +4 Birds of Paradise +1 Phantom Nishoba +2 Priest of Gix +4 Forest +1 Bone Shredder +1 Akroma, Angel of Wrath +1 Radiant's Dragoons diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2024-05-31_SantiagoGongora_Goblins.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2024-05-31_SantiagoGongora_Goblins.txt @@ -0,0 +1,18 @@ +1 Goblin King +4 Wooded Foothills +2 Skirk Prospector +3 Siege-Gang Commander +4 Goblin Matron +4 Goblin Piledriver +4 Mogg Fanatic +1 Goblin Sharpshooter +4 Goblin Lackey +4 Wasteland +2 Hearth Charm +10 Mountain +4 Goblin Ringleader +1 Goblin Tinkerer +1 Forest +4 Karplusan Forest +3 Gempalm Incinerator +4 Goblin Warchief diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2024-09-01_Rain_Rogue.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2024-09-01_Rain_Rogue.txt @@ -0,0 +1,19 @@ +4 City of Brass +3 Seal of Cleansing +2 Swords to Plowshares +3 Cursed Scroll +2 Gemstone Mine +1 Mishra's Factory +4 Battlefield Forge +4 Jackal Pup +6 Plains +4 Tithe +4 Mox Diamond +4 Wasteland +1 Aura of Silence +4 Savannah Lions +4 Silver Knight +3 Whipcorder +2 Soltari Priest +4 Lightning Bolt +1 Armageddon diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2024-09-20_GaryRoth_WhiteWeenie.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2024-09-20_GaryRoth_WhiteWeenie.txt @@ -0,0 +1,21 @@ +2 City of Brass +2 Disenchant +1 Seal of Cleansing +4 Swords to Plowshares +3 Call of the Herd +4 Gemstone Mine +4 Windswept Heath +1 Treva's Ruins +7 Plains +4 Mother of Runes +2 Mox Diamond +3 Wasteland +1 Exalted Angel +4 Meddling Mage +4 Savannah Lions +4 Silver Knight +2 Dromar's Cavern +1 Forest +2 Whipcorder +4 Soltari Priest +1 Armageddon diff --git a/src/main/packaged-resources/cfg/example1/pm-opponents/2024-09-29_HARTL_Burn.txt b/src/main/packaged-resources/cfg/example1/pm-opponents/2024-09-29_HARTL_Burn.txt @@ -0,0 +1,15 @@ +4 Ball Lightning +4 Bloodstained Mire +4 Wooded Foothills +3 Cursed Scroll +4 Grim Lavamancer +2 Barbarian Ring +4 Jackal Pup +4 Mogg Fanatic +4 Fireblast +4 Seal of Fire +3 Sulfuric Vortex +2 Lava Dart +10 Mountain +4 Incinerate +4 Lightning Bolt diff --git a/src/main/packaged-resources/cfg/mutation.properties b/src/main/packaged-resources/cfg/mutation.properties @@ -1,5 +1,2 @@ # Type of mutation to perform, possible values: RANDOM, SWAP_SIDEBOARD mutation.type=RANDOM - -# For mutation.type=RANDOM, file containing the card pool to pick from -mutation.random.card-pool=example1/card-pool.txt