class_docstr: Controller.`
  Keep Track of each ship and shipyard
docstr: Update the state of the current player
  Args:
      board (envs.halite.helpers.Board): the environment
docstr_tok: ["Update","the","state","of","the","current","player","Args",":","board","(","envs.halite.helpers.Board",")",":","the","environment"]
code: def update_state(self, board):
      """Update the state of the current player
      Args:
          board (envs.halite.helpers.Board): the environment
      """
  
      me = board.current_player
  
      # fail the game or not
      alive = [is_alive(board.step, me)]
  
      # the status of opponents
      terminals = [
          is_alive(board.step, opponent) for opponent in board.opponents
      ]
  
      alive.extend(terminals)
  
      # whether the status of the environment is over
      env_done = (
          True
          if not all(alive) or sum(alive) == len(alive) - 1
          else False
      )
  
      self.update_ship_state(board, alive[0], env_done)
  
imports: import numpy
  from config import config
  from zerosum_env.envs.halite.helpers import *
  from .agent import Agent
  from .model import Model
  from .algorithm import PPO
  from .obs_parser import get_ship_feature
  from .replay_memory import ReplayMemory
  from .utils import is_alive, check_nearby_ship, nearest_shipyard_position, mahattan_distance
  from .policy import do_nothing_policy, move_up_policy, move_down_policy, move_left_policy, move_right_policy, spawn_policy, return_to_base_policy, mine_policy, convert_policy
label_desc: Use image node_id 9 for calling the Controller obj's underlying member method code with example usage: obj.update_state(board) without return types