"""Example: multi-agent self-play with BlokusMultiAgentEnv.""" import numpy as np from blokus_gym import BlokusMultiAgentEnv, GreedyBot, RandomBot def main(): env = BlokusMultiAgentEnv(num_players=2, board_size=7) # Create bots for each player bots = { "player_0": RandomBot(player_idx=0, seed=42), "player_1": GreedyBot(player_idx=1), } obs, info = env.reset(seed=42) print("=== Multi-Agent Game ===") print(f"Agents: {env.agents}") steps = 0 while True: for agent in env.agents: obs, info = env.last() if hasattr(env, "last") else (obs.get(agent, {}), {}) mask = env.get_action_mask(agent) valid_actions = np.where(mask)[0] if len(valid_actions) > 0: bot = bots[agent] action = bot.select_action(env.game, mask) if action is not None: obs, rewards, terminations, truncations, infos = env.step(action) steps += 1 if terminations[agent]: print(f"Game over after {steps} steps") scores = env.game.get_scores() for i, score in enumerate(scores): print(f" Player {i}: {score}") env.close() return env.close() if __name__ == "__main__": main()