|
""" |
|
Utilities for the game including random selections and prompts. |
|
""" |
|
import random |
|
import string |
|
import json |
|
from collections import Counter |
|
|
|
ALPHABET = string.ascii_lowercase + string.digits |
|
ID_LENGTH = 8 |
|
|
|
|
|
def game_id(): |
|
return ''.join(random.choices(ALPHABET, k=ID_LENGTH)) |
|
|
|
|
|
def random_animal(): |
|
return random.choice(available_animals) |
|
|
|
|
|
available_animals = ["Giraffe", "Elephant", "Lion", "Zebra", "Monkey", "Gorilla"] |
|
|
|
|
|
def random_names(number_of_samples: int, human_name: str = None) -> list[str]: |
|
"""Returns a list of random names, excluding the one of the human player (if provided)""" |
|
if human_name and human_name in available_names: |
|
available_names.remove(human_name) |
|
return random.sample(available_names, number_of_samples) |
|
|
|
|
|
available_names = ["Jack", "Jill", "Bob", "Courtney", "Fizz", "Mallory"] |
|
|
|
|
|
def random_index(number_of_players : int) -> int: |
|
return random.randint(0, number_of_players - 1) |
|
|
|
|
|
def count_chameleon_votes(player_votes: list[dict]) -> str | None: |
|
"""Counts the votes for each player.""" |
|
votes = [vote['voted_for_id'] for vote in player_votes] |
|
|
|
freq = Counter(votes) |
|
most_voted_player, number_of_votes = freq.most_common()[0] |
|
|
|
|
|
if number_of_votes / len(player_votes) >= 0.5: |
|
return most_voted_player |
|
else: |
|
return None |
|
|
|
|
|
def log(log_object, log_file): |
|
with open(log_file, "a+") as f: |
|
f.write(json.dumps(log_object) + "\n") |