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):
|