51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
"""Basic example: play a random game of Blokus."""
|
|
import numpy as np
|
|
|
|
from blokus_gym import BlokusEnv
|
|
|
|
|
|
def main():
|
|
# Create environment with 4 players
|
|
env = BlokusEnv(num_players=4, board_size=20, render_mode="ansi")
|
|
|
|
obs, info = env.reset(seed=42)
|
|
print("=== Initial State ===")
|
|
print(env.render())
|
|
|
|
total_reward = 0
|
|
steps = 0
|
|
terminated = False
|
|
truncated = False
|
|
|
|
while not (terminated or truncated):
|
|
# Select a random valid action
|
|
valid_actions = np.where(info["action_mask"])[0]
|
|
if len(valid_actions) == 0:
|
|
print("No valid moves!")
|
|
break
|
|
|
|
action = np.random.choice(valid_actions)
|
|
obs, reward, terminated, truncated, info = env.step(action)
|
|
total_reward += reward
|
|
steps += 1
|
|
|
|
if steps % 10 == 0:
|
|
print(f"\n=== Step {steps} ===")
|
|
print(env.render())
|
|
print(f"Reward: {reward}, Total: {total_reward}")
|
|
|
|
print("\n=== Game Over ===")
|
|
print(f"Total steps: {steps}")
|
|
print(f"Total reward: {total_reward}")
|
|
print(f"Terminated: {terminated}, Truncated: {truncated}")
|
|
|
|
# Final state
|
|
print("\n=== Final Board ===")
|
|
print(env.render())
|
|
|
|
env.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|