-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2584.py
80 lines (66 loc) · 2.27 KB
/
2584.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
#!/usr/bin/env python3
"""
Framework for 2048 & 2048-like Games (Python 3)
2048.py: Main file for the 2048 framework
Author: Hung Guei (moporgic)
Computer Games and Intelligence (CGI) Lab, NYCU, Taiwan
https://cgilab.nctu.edu.tw/
"""
from board import board
from action import action
from episode import episode
from statistic import statistic
from agent import player
from agent import rndenv
import sys
if __name__ == '__main__':
print('2048 Demo: ' + " ".join(sys.argv))
print()
total, block, limit = 1000, 0, 0
play_args, evil_args = "", ""
load, save = "", ""
summary = False
for para in sys.argv[1:]:
if "--total=" in para:
total = int(para[(para.index("=") + 1):])
elif "--block=" in para:
block = int(para[(para.index("=") + 1):])
elif "--limit=" in para:
limit = int(para[(para.index("=") + 1):])
elif "--play=" in para:
play_args = para[(para.index("=") + 1):]
elif "--evil=" in para:
evil_args = para[(para.index("=") + 1):]
elif "--load=" in para:
load = para[(para.index("=") + 1):]
elif "--save=" in para:
save = para[(para.index("=") + 1):]
elif "--summary" in para:
summary = True
stat = statistic(total, block, limit)
if load:
input = open(load, "r")
stat.load(input)
input.close()
summary |= stat.is_finished()
with player(play_args) as play, rndenv(evil_args) as evil:
while not stat.is_finished():
play.open_episode("~:" + evil.name())
evil.open_episode(play.name() + ":~")
stat.open_episode(play.name() + ":" + evil.name())
game = stat.back()
while True:
who = game.take_turns(play, evil)
move = who.take_action(game.state())
if not game.apply_action(move) or who.check_for_win(game.state()):
break
win = game.last_turns(play, evil)
stat.close_episode(win.name())
play.close_episode(win.name())
evil.close_episode(win.name())
if summary:
stat.summary()
if save:
output = open(save, "w")
stat.save(output)
output.close()