Eric Botti
commited on
Commit
·
ab29f8e
1
Parent(s):
5de0b8a
basic game loop
Browse files- src/game.py +16 -8
- src/{prompts.py → game_utils.py} +21 -2
- src/main.py +10 -0
- src/player.py +1 -1
src/game.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
from
|
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
|
20 |
"""Formats the responses of the players into a single string."""
|
21 |
-
return "\n".join(
|
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(
|
35 |
Player("Player 4", "ai", "herd"),
|
36 |
Player("Player 5", "ai", "herd")
|
37 |
])
|
38 |
|
39 |
self.player_responses = []
|
40 |
-
herd_animal =
|
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.
|
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(
|
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 |
-
|
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 |
-
"
|
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
|
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):
|