def step(self, action): ''' Assumes the correct player is making a move. Black goes first. return observation, reward, done, info ''' if action is None: action = self.size**2 elif isinstance(action, tuple) or isinstance( action, list) or isinstance(action, np.ndarray): assert action[0] >= 0 and action[1] >= 0 assert action[0] < self.size and action[1] < self.size action = action[0] * self.size + action[1] if self.children is not None: valid_moves = self.get_valid_moves() child_idx = int(np.sum(valid_moves[:action])) self.state, self.group_map = self.children[ child_idx], self.child_groupmaps[child_idx] else: self.state, self.group_map = GoGame.get_next_state(self.state, action, self.group_map, inplace=True) self.clear_cache() return np.copy(self.state), self.get_reward(), GoGame.get_game_ended( self.state), self.get_info()
def draw_info(batch, window_width, window_height, upper_grid_coord, state): turn = GoGame.get_turn(state) turn_str = 'B' if turn == BLACK else 'W' prev_player_passed = GoGame.get_prev_player_passed(state) game_ended = GoGame.get_game_ended(state) info_label = "Turn: {}\nPassed: {}\nGame: {}".format( turn_str, prev_player_passed, "OVER" if game_ended else "ONGOING") pyglet.text.Label(info_label, font_name='Helvetica', font_size=11, x=window_width - 20, y=window_height - 20, anchor_x='right', anchor_y='top', color=(0, 0, 0, 192), batch=batch, width=window_width / 2, align='right', multiline=True) # Areas black_area, white_area = GoGame.get_areas(state) pyglet.text.Label("{}B | {}W".format(black_area, white_area), font_name='Helvetica', font_size=16, x=window_width / 2, y=upper_grid_coord + 80, anchor_x='center', color=(0, 0, 0, 192), batch=batch, width=window_width, align='center')
def get_info(self): """ :return: Debugging info for the state """ return { 'prev_player_passed': GoGame.get_prev_player_passed(self.state), 'turn': 'b' if GoGame.get_turn(self.state) == GoEnv.govars.BLACK else 'w', 'game_ended': GoGame.get_game_ended(self.state) }
def step(self, action): ''' Assumes the correct player is making a move. Black goes first. return observation, reward, done, info ''' if action is None: action = self.size**2 elif isinstance(action, tuple) or isinstance( action, list) or isinstance(action, np.ndarray): assert action[0] >= 0 and action[1] >= 0 assert action[0] < self.size and action[1] < self.size action = action[0] * self.size + action[1] self.state = GoGame.get_next_state(self.state, action) return np.copy(self.state), self.get_reward(), GoGame.get_game_ended( self.state), self.get_info()
def step(self, action): ''' Assumes the correct player is making a move. Black goes first. return observation, reward, done, info ''' assert not self.done if isinstance(action, tuple) or isinstance(action, list) or isinstance(action, np.ndarray): assert 0 <= action[0] < self.size assert 0 <= action[1] < self.size action = self.size * action[0] + action[1] elif action is None: action = self.size ** 2 actions = np.array([action]) states, group_maps = GoGame.get_next_states(self.state, actions, self.group_map) self.state, self.group_map = states[0], group_maps[0] self.done = GoGame.get_game_ended(self.state) return np.copy(self.state), self.get_reward(), self.done, self.get_info()
def step_batch(self, state, action): ''' Assumes the correct player is making a move. Black goes first. return observation, reward, done, info But next step will not change the previous state ''' assert not self.done if isinstance(action, tuple) or isinstance(action, list) or isinstance( action, np.ndarray): assert 0 <= action[0] < self.size assert 0 <= action[1] < self.size action = self.size * action[0] + action[1] elif action is None: action = self.size**2 actions = np.array([action]) next_states, next_group_maps = GoGame.get_batch_next_states( state, actions, self.group_map) next_state, next_group_map = next_states[0], next_group_maps[0] next_done = GoGame.get_game_ended(next_state) return np.copy(next_state), self.get_reward_batch( next_state, next_done), next_done, self.get_info_batch(next_state)
def game_ended(self): return GoGame.get_game_ended(self.state)