|
import streamlit as st |
|
import numpy as np |
|
from emoji import emojize |
|
|
|
|
|
MAX_DICE = 5 |
|
MAX_PLAYERS = 4 |
|
DICE_SIDES = 6 |
|
|
|
|
|
player_names = ["Mick π€", "Rick π", "Nick π§", "Vick πΏ"] |
|
|
|
|
|
def roll_dice(n): |
|
return np.random.randint(1, DICE_SIDES + 1, n) |
|
|
|
def display_dice(dice_rolls): |
|
|
|
return " ".join(emojize(":game_die:") * roll for roll in dice_rolls) |
|
|
|
def display_total(total): |
|
|
|
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): |
|
|
|
max_score = max(scores) |
|
winners = [i for i, score in enumerate(scores) if score == max_score] |
|
return winners |
|
|
|
|
|
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!") |
|
|
|
|
|
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) |
|
|
|
|
|
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]]} π") |
|
|
|
|
|
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]]} π") |
|
|