-
Notifications
You must be signed in to change notification settings - Fork 0
/
tsim
executable file
·92 lines (75 loc) · 3.39 KB
/
tsim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python
import argparse
import re
from tyrant.card_collection import CardCollection
from tyrant.deck import Deck
from tyrant.deck_pool import DeckPool
from tyrant.deck_versus_deck_test import DeckVersusDeckTest
from tyrant.deck_versus_pool_test import DeckVersusPoolTest
from tyrant.pool_versus_deck_test import PoolVersusDeckTest
from tyrant.pool_versus_pool_test import PoolVersusPoolTest
from tyrant.log import set_logging
def process_arguments():
parser = argparse.ArgumentParser(description='Simulate tyrant battles.')
parser.add_argument('off_deck', metavar='OFF_DECK', type=str, nargs=1,
help='offense deck or deck pool to test')
parser.add_argument('def_deck', metavar='DEF_DECK', type=str, nargs=1,
help='defense deck or deck pool to test')
parser.add_argument('-s --surge-only', dest='surge_only', action='store_const',
const=True, default=False,
help='test only using Surge (default: test both Fight and Surge)')
parser.add_argument('-f --fight-only', dest='fight_only', action='store_const',
const=True, default=False,
help='test only using Fight (default: test both Fight and Surge)')
parser.add_argument('-r --rounds', metavar='R', dest='rounds', type=int,
default=1000,
help='test each matchup for R rounds (default: 1000)')
parser.add_argument('-l --logging', dest='logging', action='store_const',
const=True, default=False,
help='enable detailed combat logging')
return parser.parse_args()
def main():
args = process_arguments()
print "Tyrant Combat Simulator v0.0"
collection = CardCollection("cards.xml")
collection.dump_short_summary()
if args.logging:
print "== Logging enabled. =="
set_logging(True)
offense_is_pool = re.search("\.deckpool$", args.off_deck[0])
defense_is_pool = re.search("\.deckpool$", args.def_deck[0])
if offense_is_pool:
offense = DeckPool(args.off_deck[0], collection)
else:
offense = Deck(args.off_deck[0], collection)
if defense_is_pool:
defense = DeckPool(args.def_deck[0], collection)
else:
defense = Deck(args.def_deck[0], collection)
print "\nOffense: " + offense.name()
print " " + re.sub("\n", "\n ", offense.contents_summary())
print "\nDefense: " + defense.name()
print " " + re.sub("\n", "\n ", defense.contents_summary())
print ""
if offense_is_pool and defense_is_pool:
test_kind = PoolVersusPoolTest
elif offense_is_pool:
test_kind = PoolVersusDeckTest
elif defense_is_pool:
test_kind = DeckVersusPoolTest
else:
test_kind = DeckVersusDeckTest
if not args.surge_only:
fight_test = test_kind(offense, defense, False, args.rounds)
fight_test.run()
fight_test.print_results()
if not args.fight_only and not args.surge_only:
print ""
if not args.fight_only:
surge_test = test_kind(offense, defense, True, args.rounds)
surge_test.run()
surge_test.print_results()
if not args.fight_only and not args.surge_only and offense_is_pool and defense_is_pool:
print ""
fight_test.print_best_overall_defenses(surge_test)
main()