/ examples / werewolf_game / start_game.py
start_game.py
 1  import asyncio
 2  
 3  import fire
 4  
 5  from metagpt.ext.werewolf.roles import Guard, Moderator, Seer, Villager, Werewolf, Witch
 6  from metagpt.ext.werewolf.roles.human_player import prepare_human_player
 7  from metagpt.ext.werewolf.werewolf_game import WerewolfGame
 8  from metagpt.logs import logger
 9  
10  
11  async def start_game(
12      investment: float = 3.0,
13      n_round: int = 5,
14      shuffle: bool = True,
15      add_human: bool = False,
16      use_reflection: bool = True,
17      use_experience: bool = False,
18      use_memory_selection: bool = False,
19      new_experience_version: str = "",
20  ):
21      game = WerewolfGame()
22      game_setup, players = game.env.init_game_setup(
23          role_uniq_objs=[Villager, Werewolf, Guard, Seer, Witch],
24          num_werewolf=2,
25          num_villager=2,
26          shuffle=shuffle,
27          add_human=add_human,
28          use_reflection=use_reflection,
29          use_experience=use_experience,
30          use_memory_selection=use_memory_selection,
31          new_experience_version=new_experience_version,
32          prepare_human_player=prepare_human_player,
33      )
34      logger.info(f"{game_setup}")
35  
36      players = [Moderator()] + players
37      game.hire(players)
38      game.invest(investment)
39      game.run_project(game_setup)
40      await game.run(n_round=n_round)
41  
42  
43  def main(
44      investment: float = 20.0,
45      n_round: int = 100,
46      shuffle: bool = True,
47      add_human: bool = False,
48      use_reflection: bool = True,
49      use_experience: bool = False,
50      use_memory_selection: bool = False,
51      new_experience_version: str = "",
52  ):
53      asyncio.run(
54          start_game(
55              investment,
56              n_round,
57              shuffle,
58              add_human,
59              use_reflection,
60              use_experience,
61              use_memory_selection,
62              new_experience_version,
63          )
64      )
65  
66  
67  if __name__ == "__main__":
68      fire.Fire(main)