Eric Botti commited on
Commit
ab29f8e
·
1 Parent(s): 5de0b8a

basic game loop

Browse files
Files changed (4) hide show
  1. src/game.py +16 -8
  2. src/{prompts.py → game_utils.py} +21 -2
  3. src/main.py +10 -0
  4. src/player.py +1 -1
src/game.py CHANGED
@@ -1,4 +1,4 @@
1
- from prompts import fetch_prompt
2
  from player import Player
3
 
4
 
@@ -16,9 +16,9 @@ class Game:
16
  for player in self.players:
17
  player.add_message(message)
18
 
19
- def format_responses(self, responses: list[str]) -> str:
20
  """Formats the responses of the players into a single string."""
21
- return "\n".join(responses)
22
 
23
  def start(self):
24
  """Starts the game."""
@@ -28,27 +28,35 @@ class Game:
28
  print("Enter your name to begin")
29
  human_name = input()
30
 
 
 
 
 
 
 
 
 
31
  self.add_players([
32
  Player("Player 1", "ai", "herd"),
33
  Player("Player 2", "ai", "herd"),
34
- Player("human_name", "human", "chameleon"),
35
  Player("Player 4", "ai", "herd"),
36
  Player("Player 5", "ai", "herd")
37
  ])
38
 
39
  self.player_responses = []
40
- herd_animal = "Giraffe"
41
 
42
  # Collect Player Animal Descriptions
43
  for player in self.players:
44
  match player.role:
45
  case "herd":
46
  prompt_template = fetch_prompt("herd_animal")
47
- prompt = prompt_template.format(animal=herd_animal, player_responses=self.player_responses)
48
 
49
  case "chameleon":
50
  prompt_template = fetch_prompt("chameleon_animal")
51
- prompt = prompt_template.format(player_responses="")
52
 
53
  response = player.collect_input(prompt)
54
  self.player_responses.append(response)
@@ -58,7 +66,7 @@ class Game:
58
  # Collect Player Votes
59
  for player in self.players:
60
  prompt_template = fetch_prompt("vote")
61
- prompt = prompt_template.format(animal=herd_animal, player_responses=self.player_responses)
62
 
63
  response = player.collect_input(prompt)
64
  self.player_responses.append(response)
 
1
+ from game_utils import fetch_prompt, random_animal, random_names
2
  from player import Player
3
 
4
 
 
16
  for player in self.players:
17
  player.add_message(message)
18
 
19
+ def format_responses(self) -> str:
20
  """Formats the responses of the players into a single string."""
21
+ return "\n".join(self.player_responses)
22
 
23
  def start(self):
24
  """Starts the game."""
 
28
  print("Enter your name to begin")
29
  human_name = input()
30
 
31
+ player_names = random_names(4)
32
+
33
+
34
+ for name in player_names:
35
+ self.add_players([
36
+ Player(name, "ai", "herd")
37
+ ])
38
+
39
  self.add_players([
40
  Player("Player 1", "ai", "herd"),
41
  Player("Player 2", "ai", "herd"),
42
+ Player(human_name, "human", "chameleon"),
43
  Player("Player 4", "ai", "herd"),
44
  Player("Player 5", "ai", "herd")
45
  ])
46
 
47
  self.player_responses = []
48
+ herd_animal = random_animal()
49
 
50
  # Collect Player Animal Descriptions
51
  for player in self.players:
52
  match player.role:
53
  case "herd":
54
  prompt_template = fetch_prompt("herd_animal")
55
+ prompt = prompt_template.format(animal=herd_animal, player_responses=self.format_responses())
56
 
57
  case "chameleon":
58
  prompt_template = fetch_prompt("chameleon_animal")
59
+ prompt = prompt_template.format(player_responses=self.format_responses())
60
 
61
  response = player.collect_input(prompt)
62
  self.player_responses.append(response)
 
66
  # Collect Player Votes
67
  for player in self.players:
68
  prompt_template = fetch_prompt("vote")
69
+ prompt = prompt_template.format(players=self.players)
70
 
71
  response = player.collect_input(prompt)
72
  self.player_responses.append(response)
src/{prompts.py → game_utils.py} RENAMED
@@ -1,6 +1,25 @@
1
  """
2
- Prompts used for the game
3
  """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
 
6
  def fetch_prompt(prompt_name):
@@ -50,6 +69,6 @@ You are the Chameleon, vote for someone else to remove suspicion from yourself.
50
  prompts = {
51
  "herd_animal": game_rules + herd_animal,
52
  "chameleon_animal": game_rules + chameleon_animal,
53
- "vote_prompt": vote_prompt
54
  }
55
 
 
1
  """
2
+ Utilities for the game including random selections and prompts.
3
  """
4
+ import random
5
+
6
+
7
+ def random_animal():
8
+ return random.choice(available_animals)
9
+
10
+
11
+ available_animals = ["Giraffe", "Elephant", "Lion", "Zebra", "Monkey", "Gorilla"]
12
+
13
+
14
+ def random_names(number_of_samples : int) -> list[str]:
15
+ return random.sample(available_names, number_of_samples)
16
+
17
+
18
+ available_names = ["Jack", "Jill", "Bob", "Courtney", "Fizz", "Mallory"]
19
+
20
+
21
+ def random_index(number_of_players : int) -> int:
22
+ return random.randint(0, number_of_players - 1)
23
 
24
 
25
  def fetch_prompt(prompt_name):
 
69
  prompts = {
70
  "herd_animal": game_rules + herd_animal,
71
  "chameleon_animal": game_rules + chameleon_animal,
72
+ "vote": vote_prompt
73
  }
74
 
src/main.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ from game import Game
2
+ from player import Player
3
+
4
+ def main():
5
+ game = Game()
6
+ game.start()
7
+
8
+
9
+ if __name__ == "__main__":
10
+ main()
src/player.py CHANGED
@@ -1,4 +1,4 @@
1
- from prompts import fetch_prompt
2
 
3
  class Player:
4
  def __init__(self, name: str, controller: str, role: str):
 
1
+ from game_utils import fetch_prompt
2
 
3
  class Player:
4
  def __init__(self, name: str, controller: str, role: str):