-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame_ui.py
More file actions
57 lines (47 loc) · 1.59 KB
/
Copy pathgame_ui.py
File metadata and controls
57 lines (47 loc) · 1.59 KB
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
"""
Game UI module
"""
from typing import Optional
import torch
from ai_agent import Player
from arguments import Arguments
from mcts import MCTS
from model import Model
from piece import Turn
from game import GameState
from temperature_scheduler import AlphazeroScheduler
class GameUI:
def __init__(self, screen, turn: Turn):
self.current_state = GameState(turn)
self.init_state = turn
self.screen = screen
self.winner = None
self.init_player()
if turn == Turn.RED:
self.play_player()
def play_player(self, prev_action: Optional[int] = None):
action = self.ai.run(self.current_state, prev_action)
self.act_select(action)
def init_player(self):
state_dict = torch.load("./checkpoints/brain_weights")
args = Arguments()
model = Model(args)
model.load_state_dict(state_dict["state_dict"])
model.eval()
self.ai = Player(Turn.RED, MCTS(model, args), AlphazeroScheduler(args.temperature_limit))
def _init(self):
self.init_state = Turn(not self.init_state.value)
self.current_state = GameState(self.init_state)
self.winner = None
def update(self):
self.current_state.board.draw(self.screen)
def reset(self):
self._init()
def act_select(self, col):
self.current_state = self.current_state.move(col)
winner = self.current_state.is_winning()
if winner is not None:
self.winner = winner
def select(self, col):
self.current_state = self.current_state.move(col)
self.play_player(col)