File size: 2,699 Bytes
f861b99
 
 
 
 
 
 
 
 
522f1af
 
f6ea017
f861b99
 
 
 
f6ea017
522f1af
 
f6ea017
522f1af
 
 
 
 
 
 
f861b99
 
522f1af
 
 
 
 
f861b99
522f1af
 
f861b99
 
 
 
 
 
 
 
 
522f1af
 
 
f861b99
522f1af
ae70b08
522f1af
 
 
 
f861b99
522f1af
 
 
 
 
f861b99
 
 
 
522f1af
 
 
 
ae70b08
522f1af
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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]]} πŸ†")