code: def __init__(self, env_config):
      super().__init__()
      self.action_space = Discrete(2)
      self.state = None
      self.agent_1 = 0
      self.agent_2 = 1
      self._skip_env_checking = True
      # MADDPG emits action logits instead of actual discrete actions
      self.actions_are_logits = env_config.get(
          "actions_are_logits", False
      )
      self.one_hot_state_encoding = env_config.get(
          "one_hot_state_encoding", False
      )
      self.with_state = env_config.get("separate_state_space", False)
      self._agent_ids = {0, 1}
      if not self.one_hot_state_encoding:
          self.observation_space = Discrete(6)
          self.with_state = False
      else:
          # Each agent gets the full state (one-hot encoding of which of the
          # three states are active) as input with the receiving agent's
          # ID (1 or 2) concatenated onto the end.
          if self.with_state:
              self.observation_space = Dict(
                  {
                      "obs": MultiDiscrete([2, 2, 2, 3]),
                      ENV_STATE: MultiDiscrete([2, 2, 2]),
                  }
              )
          else:
              self.observation_space = MultiDiscrete([2, 2, 2, 3])
  
file_path: ray/python/ray/rllib/examples/env/two_step_game.py
imports: from gymnasium.spaces import Dict, Discrete, MultiDiscrete, Tuple
  import numpy
  from ray.rllib.env.multi_agent_env import MultiAgentEnv, ENV_STATE
label_desc: Use image node_id 1 to create a new TwoStepGame object from inherited base classes: MultiAgentEnv with example: obj = TwoStepGame(env_config)