import streamlit as st import numpy as np from emoji import emojize # Game constants MAX_DICE = 5 MAX_PLAYERS = 4 DICE_SIDES = 6 # Player names and emojis player_names = ["Mick 🎤", "Rick 🚀", "Nick 🧊", "Vick 🌿"] # Game functions def roll_dice(n): return np.random.randint(1, DICE_SIDES + 1, n) def display_dice(dice_rolls): # Display the correct number of emojis for each dice roll return " ".join(emojize(":game_die:") * roll for roll in dice_rolls) def display_total(total): # Display the total of dice rolls with an emoji return f"Total: {total} " + emojize(":trophy:") def update_scores(scores, dice_rolls): for i in range(len(scores)): scores[i] = sum(dice_rolls[i]) return scores def determine_winner(scores): # Determine the player with the highest score max_score = max(scores) winners = [i for i, score in enumerate(scores) if score == max_score] return winners # Streamlit app setup st.set_page_config(page_title="Multiplayer Emoji Dice Game", page_icon="🎲", layout="centered") st.title("Multiplayer Emoji Dice Game") st.write("Roll the dice and try to get as many sixes as possible!") # Game settings players = st.slider("Number of players", 1, MAX_PLAYERS, 2, step=1) dice_count = st.slider("Number of dice per player", 1, MAX_DICE, 2, step=1) # Game logic scores = [0 for _ in range(players)] dice_rolls = [roll_dice(dice_count) for _ in range(players)] scores = update_scores(scores, dice_rolls) winners = determine_winner(scores) # Display game board for all players with names, rolls, and totals for player in range(players): player_rolls = dice_rolls[player] player_total = scores[player] st.write(f"{player_names[player]} rolled: {display_dice(player_rolls)}") st.write(display_total(player_total)) # Display winner(s) if len(winners) > 1: st.write("It's a tie between: " + " and ".join(player_names[winner] for winner in winners)) else: st.write(f"Winner: {player_names[winners[0]]} 🏆") # Update game state if st.button("Roll again"): scores = [0 for _ in range(players)] dice_rolls = [roll_dice(dice_count) for _ in range(players)] scores = update_scores(scores, dice_rolls) winners = determine_winner(scores) for player in range(players): player_rolls = dice_rolls[player] player_total = scores[player] st.write(f"{player_names[player]} rolled: {display_dice(player_rolls)}") st.write(display_total(player_total)) if len(winners) > 1: st.write("It's a tie between: " + " and ".join(player_names[winner] for winner in winners)) else: st.write(f"Winner: {player_names[winners[0]]} 🏆")