File size: 2,706 Bytes
c11db43
ddb3454
4927d16
cc2268c
4927d16
818dd29
1f9a1e6
818dd29
cc2268c
bef0dab
1f9a1e6
cc2268c
 
bef0dab
1f9a1e6
cc2268c
 
4bccfbe
 
cc2268c
 
1f9a1e6
4bccfbe
 
 
1f9a1e6
818dd29
cc2268c
bef0dab
 
4bccfbe
 
 
bef0dab
cc2268c
4bccfbe
 
 
 
cc2268c
4bccfbe
bef0dab
 
4bccfbe
 
 
4927d16
818dd29
4927d16
818dd29
4927d16
818dd29
bef0dab
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
import streamlit as st
import numpy as np
import pandas as pd
import plotly.graph_objects as go
from datetime import datetime
from base64 import b64encode

EMOJI_LIST = {4: "πŸŽ‚", 6: "πŸ€", 8: "πŸ„", 10: "🍁", 12: "πŸ‚", 20: "πŸƒ", 50: "πŸ’", 100: "🌟"}
DICE_TYPES = [4, 6, 8, 10, 12, 20, 50, 100]
DEFAULT_ROLLS = 3

def roll_dice(num_rolls, dice_type):
    rolls = np.random.randint(1, dice_type + 1, size=num_rolls)
    return rolls

def plot_tokens(health_tokens, coin_tokens):
    fig = go.Figure()
    fig.add_trace(go.Scatter(x=list(range(1, len(health_tokens) + 1)), y=health_tokens, name="πŸ’– Health"))
    fig.add_trace(go.Scatter(x=list(range(1, len(coin_tokens) + 1)), y=coin_tokens, name="πŸ’° Coins"))
    fig.update_layout(title="Token Accumulation", xaxis_title="Rolls", yaxis_title="Tokens")
    st.plotly_chart(fig)

st.title("🎲 Dice Rolling Game")
username = st.text_input("πŸ‘€ Enter your username:")
num_rolls = st.slider("πŸ”’ Choose the number of rolls:", 1, 100, DEFAULT_ROLLS)

history = {"health_tokens": [0], "coin_tokens": [0]}
for dice_type in DICE_TYPES:
    rolls = roll_dice(num_rolls, dice_type)
    highest_rolls = sum(roll == dice_type for roll in rolls)
    coin_tokens_added = 0
    dice_results = [f"{EMOJI_LIST[dice_type]} {roll}" for roll in rolls]
    st.write(f"🎲 Results for {dice_type}-sided dice: {' | '.join(dice_results)}")
    for roll in rolls:
        if roll == dice_type:
            st.write(f"πŸŽ‰ Congratulations! You rolled the {EMOJI_LIST[dice_type]} highest value! πŸ’° Adding 3 coins.")
            coin_tokens_added += 3
        if roll == max(rolls):
            st.write(f"πŸŽ‰ Congratulations! You rolled the {EMOJI_LIST[dice_type]} maximum value! πŸ’– Adding 10 health tokens.")
            if dice_type == 100:
                history["health_tokens"].append(history["health_tokens"][-1] + 10)
    history[f"{dice_type}-sided dice high rolls"] = highest_rolls
    history["roll_history"] = {**history.get("roll_history", {}), dice_type: rolls}
    history["coin_tokens"].append(history["coin_tokens"][-1] + coin_tokens_added)
    
st.write("πŸ’°πŸ’– Token Accumulation:")
plot_tokens(history["health_tokens"], history["coin_tokens"])
df = pd.concat([pd.DataFrame(history["roll_history"]), pd.DataFrame(history["health_tokens"], columns=["Health Tokens"]), pd.DataFrame(history["coin_tokens"], columns=["Coin Tokens"])], axis=1)
timestamp = datetime.now().strftime("%m-%d-%Y-%H-%M-%S")
filename = f"{username}_{timestamp}.csv"
df.to_csv(filename, index=False)
st.markdown(f'<a href="data:file/csv;base64,{b64encode(open(filename, "rb").read()).decode()}" download="{filename}">Download CSV File</a>', unsafe_allow_html=True)