|
import streamlit as st |
|
import numpy as np |
|
from emoji import emojize |
|
|
|
|
|
MAX_DICE = 5 |
|
MAX_PLAYERS = 4 |
|
DICE_SIDES = 6 |
|
|
|
|
|
def roll_dice(n): |
|
return np.random.randint(1, DICE_SIDES + 1, n) |
|
|
|
def display_dice(dice): |
|
|
|
|
|
return " ".join([emojize(":game_die:") for _ in range(dice.flatten())]) |
|
|
|
def update_scores(scores, dice): |
|
for i, score in enumerate(scores): |
|
if dice[i] == DICE_SIDES: |
|
scores[i] += 1 |
|
else: |
|
scores[i] = 0 |
|
return scores |
|
|
|
|
|
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)] |
|
rolled_dice = roll_dice(players * dice_count) |
|
scores = update_scores(scores, rolled_dice) |
|
|
|
|
|
st.write(f"Player 1 rolled: {display_dice(rolled_dice[:dice_count])}") |
|
if players > 1: |
|
st.write(f"Player 2 rolled: {display_dice(rolled_dice[dice_count:])}") |
|
|
|
st.write(f"Scores: {scores}") |
|
|
|
|
|
if st.button("Roll again"): |
|
scores = [0 for _ in range(players)] |
|
rolled_dice = roll_dice(players * dice_count) |
|
scores = update_scores(scores, rolled_dice) |
|
st.write(f"Player 1 rolled: {display_dice(rolled_dice[:dice_count])}") |
|
if players > 1: |
|
st.write(f"Player 2 rolled: {display_dice(rolled_dice[dice_count:])}") |
|
st.write(f"Scores: {scores}") |