-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtactics.py
104 lines (96 loc) · 3.2 KB
/
tactics.py
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
93
94
95
96
97
98
99
100
101
102
103
from tactics_data import TDATA
#
EMPTY_AGAINST_EMPTY_PIT_VALUE = 0
EMPTY_AGAINST_FULL_PIT_VALUE = 1
EASY_REPEAT_VALUE = 3
EMPTY_PIT = 0
FULL_PIT = 1
GENE_MAP = [
(EMPTY_AGAINST_EMPTY_PIT_VALUE, 0),
(EMPTY_AGAINST_EMPTY_PIT_VALUE, 1),
(EMPTY_AGAINST_EMPTY_PIT_VALUE, 2),
(EMPTY_AGAINST_EMPTY_PIT_VALUE, 3),
(EMPTY_AGAINST_EMPTY_PIT_VALUE, 4),
(EMPTY_AGAINST_EMPTY_PIT_VALUE, 5),
(EMPTY_AGAINST_FULL_PIT_VALUE, 0),
(EMPTY_AGAINST_FULL_PIT_VALUE, 1),
(EMPTY_AGAINST_FULL_PIT_VALUE, 2),
(EMPTY_AGAINST_FULL_PIT_VALUE, 3),
(EMPTY_AGAINST_FULL_PIT_VALUE, 4),
(EMPTY_AGAINST_FULL_PIT_VALUE, 5),
(EASY_REPEAT_VALUE, 0),
(EASY_REPEAT_VALUE, 1),
(EASY_REPEAT_VALUE, 2),
(EASY_REPEAT_VALUE, 3),
(EASY_REPEAT_VALUE, 4),
(EASY_REPEAT_VALUE, 5),
]
GENE_DESC = [
"EMPTY_AGAINST_EMPTY_PIT_VALUE 0",
"EMPTY_AGAINST_EMPTY_PIT_VALUE 1",
"EMPTY_AGAINST_EMPTY_PIT_VALUE 2",
"EMPTY_AGAINST_EMPTY_PIT_VALUE 3",
"EMPTY_AGAINST_EMPTY_PIT_VALUE 4",
"EMPTY_AGAINST_EMPTY_PIT_VALUE 5",
"EMPTY_AGAINST_FULL_PIT_VALUE 0",
"EMPTY_AGAINST_FULL_PIT_VALUE 1",
"EMPTY_AGAINST_FULL_PIT_VALUE 2",
"EMPTY_AGAINST_FULL_PIT_VALUE 3",
"EMPTY_AGAINST_FULL_PIT_VALUE 4",
"EMPTY_AGAINST_FULL_PIT_VALUE 5",
"EASY_REPEAT_VALUE 0",
"EASY_REPEAT_VALUE 1",
"EASY_REPEAT_VALUE 2",
"EASY_REPEAT_VALUE 3",
"EASY_REPEAT_VALUE 4",
"EASY_REPEAT_VALUE 5",
]
class Tactics(object):
def __init__(self):
self.empty_pit_value = [
[1, 1], # 0 = nearest to STORE, (empty/empty, empty/full)
[1, 1], # 1 first value is value for empty; second is multiplier
[1, 1], # 2
[1, 1], # 3
[1, 1], # 4
[1, 1], # 5
]
self.easy_repeat_value = [
1, # pit 0 from store
1, #
1, #
1, #
1, #
1, #
]
def remap(self, character, settings):
first_player = settings['first_player']
seed_count = settings['seeds_per_house']
turns_ahead = character['lookahead']
if turns_ahead > 1:
turns_ahead = 3
else:
turns_ahead = 0
capture_rule = settings['capture_rule']
eog_rule = settings['eog_rule']
tup = (first_player, seed_count, turns_ahead, capture_rule, eog_rule)
tl = TDATA[tup]
for index, gene in enumerate(tl):
place, pit = GENE_MAP[index]
if place == EMPTY_AGAINST_EMPTY_PIT_VALUE:
self.empty_pit_value[pit][EMPTY_PIT] = gene
elif place == EMPTY_AGAINST_FULL_PIT_VALUE:
self.empty_pit_value[pit][FULL_PIT] = gene
elif place == EASY_REPEAT_VALUE:
self.easy_repeat_value[pit] = gene
return
def build_tactics_from_list(t, tl):
for index, gene in enumerate(tl):
place, pit = GENE_MAP[index]
if place == EMPTY_AGAINST_EMPTY_PIT_VALUE:
t.empty_pit_value[pit][EMPTY_PIT] = gene
elif place == EMPTY_AGAINST_FULL_PIT_VALUE:
t.empty_pit_value[pit][FULL_PIT] = gene
elif place == EASY_REPEAT_VALUE:
t.easy_repeat_value[pit] = gene
return