import streamlit as st import plotly.express as px import pandas as pd import numpy as np import base64 def generate_values(n): return {"HealthPoints": np.random.randint(50, 100, size=n), "Coins": np.random.randint(10, 50, size=n)} def app(): st.title("Game Mechanics Treemap Chart") st.write("This app displays a Treemap chart of game mechanics.") n = len(game_mechanics := ["Action Queue โฑ๏ธ", "Action Retrieval ๐Ÿ”", "Campaign / Battle Card Driven ๐Ÿ—ƒ๏ธ", "Card Play Conflict Resolution ๐Ÿ’ณ๐Ÿค", "Communication Limits ๐Ÿ™Š", "Cooperative Game ๐Ÿค๐Ÿ‘ฅ", "Critical Hits and Failures ๐Ÿ’ฅ๐Ÿ’”", "Deck Construction ๐ŸŽด๐Ÿ› ๏ธ", "Grid Movement ๐Ÿ—บ๏ธ", "Hand Management ๐Ÿ–๏ธ๐Ÿ“Š", "Hexagon Grid ๐Ÿ”ณ", "Legacy Game ๐ŸŽ“๐ŸŽฎ", "Line of Sight ๐Ÿ‘€", "Modular Board ๐Ÿงฉ", "Once-Per-Game Abilities ๐ŸŒŸ", "Role Playing ๐ŸŽญ", "Scenario / Mission / Campaign Game ๐ŸŽฏ", "Simultaneous Action Selection ๐Ÿคœ๐Ÿค›", "Solo / Solitaire Game ๐Ÿ•บ", "Storytelling ๐Ÿ“–", "Variable Player Powers ๐Ÿฆธโ€โ™‚๏ธ๐Ÿฆนโ€โ™€๏ธ"]) values = generate_values(n) data = pd.DataFrame({"category": ["Category 1"] * n, "mechanic": game_mechanics, "value": list(values.values()), "HealthPoints": values["HealthPoints"], "Coins": values["Coins"], "description": ["Description"] * n}) data["value"] = data["value"].apply(lambda x: sum(x)) fig = px.treemap(data, path=["category", "mechanic"], values="value", color="HealthPoints", hover_data=["Coins"]) st.plotly_chart(fig) csv = data.to_csv(index=False) b64 = base64.b64encode(csv.encode()).decode() href = f'Download CSV' st.markdown(href, unsafe_allow_html=True) if __name__ == '__main__': app()