Spaces:
Runtime error
Runtime error
import streamlit as st | |
import random | |
import csv | |
import os | |
import base64 | |
# Define the player card attributes | |
player_cards = { | |
"Player 1": { | |
"sketch": "๐ฉ", | |
"character": "Nurse", | |
"player_board": "๐ฅ", | |
"action_dice": "๐ฒ", | |
"health_tokens": "โค๏ธ", | |
"coin": "๐ฐ", | |
"battle_tokens": "โ๏ธ", | |
"score": 0, | |
"trophy": "" | |
}, | |
"Player 2": { | |
"sketch": "๐จ", | |
"character": "Doctor", | |
"player_board": "๐ฅ", | |
"action_dice": "๐ฒ", | |
"health_tokens": "โค๏ธ", | |
"coin": "๐ฐ", | |
"battle_tokens": "โ๏ธ", | |
"score": 0, | |
"trophy": "" | |
} | |
} | |
# Define the health problems | |
health_problems = ["Flu", "COVID-19", "Diabetes", "Heart Disease", "Cancer"] | |
# Define the game rules | |
attack_range = (1, 20) | |
defense_range = (1, 10) | |
# Define the score, health tokens, and coin emoji sets | |
score_emojis = ["๐ฅ", "๐ฅ", "โก๏ธ", "๐", "๐ช", "๐๏ธ", "๐", "๐", "๐", "๐๏ธ", "๐ ", "๐ฅ", "๐ฅ", "๐ฅ"] | |
health_token_emojis = ["โค๏ธ", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "โฃ๏ธ", "๐ฉธ", "๐งก", "๐", "๐", "๐", "๐"] | |
coin_emojis = ["๐ฐ", "๐ธ", "๐ณ", "๐ค", "๐", "๐ท", "๐ต", "๐ฒ", "๐ฆ", "๐น", "๐", "๐", "๐น", "๐ค", "๐ฐ", "๐ต"] | |
def append_game_state_to_csv(game_state): | |
with open("game_state.csv", mode='a', newline='') as file: | |
writer = csv.writer(file) | |
writer.writerow(game_state) | |
def play_round(player_card, health_problem): | |
st.write(f"{player_card['sketch']} {player_card['character']} attacks {health_problem} with {player_card['action_dice']}...") | |
game_state = [f"{player_card['sketch']} {player_card['character']} attacks {health_problem} with {player_card['action_dice']}..."] | |
attack_score = random.randint(*attack_range) | |
defense_score = random.randint(*defense_range) | |
health_ferocity = random.randint(*attack_range) | |
health_resistance = random.randint(*defense_range) | |
if attack_score > health_resistance: | |
player_card["score"] += 1 | |
score_emoji = random.choice(score_emojis) | |
player_card["score_emoji"] = player_card.get("score_emoji", "") + score_emoji | |
st.write(f"{player_card['sketch']} {player_card['character']} deals {attack_score - health_resistance} damage to {health_problem}! {score_emoji}") | |
game_state.append(f"{player_card['sketch']} {player_card['character']} deals {attack_score - health_resistance} damage to {health_problem}! {score_emoji}") | |
player_card["health_tokens"] += 1 | |
health_token_emoji = random.choice(health_token_emojis) | |
player_card["health_token_emoji"] = player_card.get("health_token_emoji", "") + health_token_emoji | |
coin_emoji = random.choice(coin_emojis) | |
player_card["coin_emojis"] = player_card.get("coin_emojis", "") + coin_emoji | |
game_state.extend([player_card["score"], player_card["score_emoji"], player_card["health_tokens"], player_card["health_token_emoji"], player_card["coin_emojis"]]) | |
else: | |
st.write(f"{player_card['sketch']} {player_card['character']} misses the attack!") | |
game_state.append(f"{player_card['sketch']} {player_card['character']} misses the attack!") | |
if health_ferocity > defense_score: | |
player_card["health_tokens"] -= 1 | |
health_token_emoji = random.choice(health_token_emojis) | |
player_card["health_token_emoji"] = player_card.get("health_token_emoji", "") + health_token_emoji | |
st.write(f"{health_problem} deals {health_ferocity - defense_score} damage to {player_card['sketch']} {player_card['character']}! {health_token_emoji}") | |
game_state.append(f"{health_problem} deals {health_ferocity - defense_score} damage to {player_card['sketch']} {player_card['character']}! {health_token_emoji}") | |
else: | |
st.write(f"{health_problem} fails to attack!") | |
game_state.append(f"{health_problem} fails to attack!") | |
append_game_state_to_csv(game_state) | |
# Create a function to play multiple rounds of the game | |
def play_game(num_games): | |
# Initialize the game state | |
for player in player_cards: | |
player_cards[player]["health_tokens"] = 20 | |
health_problem_scores = {problem: 0 for problem in health_problems} | |
for i in range(num_games): | |
# Randomly select a player and health problem | |
player = random.choice(list(player_cards.keys())) | |
health_problem = random.choice(health_problems) | |
# Play the round | |
play_round(player_cards[player], health_problem) | |
# Update the scores | |
health_problem_scores[health_problem] += 1 | |
# Check for a player win | |
for player, attributes in player_cards.items(): | |
if attributes["health_tokens"] <= 0: | |
st.write(f"{attributes['sketch']} {attributes['character']} has lost the game!") | |
else: | |
if attributes["score"] >= num_games / 2: | |
st.write(f"{attributes['sketch']} {attributes['character']} has won the game!") | |
# Add a trophy emoji to the player card on the sidebar | |
if attributes["trophy"] == "": | |
attributes["trophy"] = "๐" | |
if st.session_state.get(player + "_win", False): | |
if attributes["trophy"] == "๐": | |
attributes["trophy"] = random.choice(["๐ฅ", "๐ฅ", "๐ฅ"]) | |
st.sidebar.write(f"{attributes['sketch']} {attributes['character']} {attributes['trophy']}") | |
# Save the game state to a CSV file | |
with open("game_state.csv", "a", newline="") as f: | |
writer = csv.writer(f) | |
if os.stat("game_state.csv").st_size == 0: | |
writer.writerow(["Player", "Sketch", "Character", "Player Board", "Action Dice", "Health Tokens", "Coin", "Battle Tokens", "Score", "Trophy"]) | |
for player, attributes in player_cards.items(): | |
row = [player, attributes["sketch"], attributes["character"], attributes["player_board"], attributes["action_dice"], attributes["health_tokens"], attributes["coin"], attributes["battle_tokens"], attributes["score"], attributes["trophy"]] | |
writer.writerow(row) | |
for problem in health_problems: | |
row = [problem, health_problem_scores[problem]] | |
writer.writerow(row) | |
# Display the game results | |
st.write("# Game Results") | |
for player, attributes in player_cards.items(): | |
st.write(f"{attributes['sketch']} {attributes['character']}: {attributes['score']} successful attacks, {attributes['health_tokens']} health tokens, {attributes['coin']} coins") | |
for problem, score in health_problem_scores.items(): | |
st.write(f"{problem}: {score} defeats") | |
# Display a link to download the game state CSV file | |
if os.path.exists("game_state.csv"): | |
st.write("# Download Game State") | |
files = [f for f in os.listdir(".") if os.path.isfile(f) and f.endswith(".csv")] | |
if "game_state.csv" in files: | |
files.remove("game_state.csv") | |
if len(files) > 0: | |
file_to_delete = st.selectbox("Select a file to delete", files) | |
if st.button("Delete File"): | |
os.remove(file_to_delete) | |
with open("game_state.csv", "r") as f: | |
csv_data = f.read() | |
st.markdown(f"<a href='data:text/csv;base64,{base64.b64encode(csv_data.encode()).decode()}' download='game_state.csv'>Download Game State</a>", unsafe_allow_html=True) | |
st.write("*Note: Downloaded files are saved in your browser's default download location*") | |
# Define the Streamlit app | |
def app(): | |
st.set_page_config(page_title="Health Care Game", page_icon="๐ฅ", layout="wide") | |
st.title("Health Care Game") | |
st.sidebar.write("# Game Settings") | |
num_games = st.sidebar.slider("Number of games to play", 1, 100, 10) | |
st.sidebar.write("# Player Cards") | |
for player, attributes in player_cards.items(): | |
st.sidebar.write(f"## {player}") | |
st.sidebar.write(f"Sketch: {attributes['sketch']}") | |
st.sidebar.write(f"Character: {attributes['character']}") | |
st.sidebar.write(f"Player Board: {attributes['player_board']}") | |
st.sidebar.write(f"Action Dice: {attributes['action_dice']}") | |
st.sidebar.write(f"Health Tokens: {attributes['health_tokens']}") | |
st.sidebar.write(f"Coin: {attributes['coin']}") | |
st.sidebar.write(f"Battle Tokens: {attributes['battle_tokens']}") | |
st.sidebar.write(f"Score: {attributes['score']}") | |
# Display a button to start the game | |
if st.sidebar.button("Start Game"): | |
# Play the game | |
play_game(num_games) | |
def showPressRelease(): | |
st.markdown(""" | |
title: ๐ค๐ง AI-RPG-Self-Play-RLML-Health-Battler-Game๐๐๐ฎ | |
emoji: ๐๏ธโโ๏ธ๐ช๐ฅ | |
# AI RPG Self-Play RL ML Health Battler Game Press Release | |
## Introduction | |
๐๐ฎ๐ค Attention all gamers and health enthusiasts! The ultimate weapon to battle health problems has arrived - the AI RPG Self-Play RL ML Health Battler Game! ๐ค๐ฎ๐ | |
## Gamified Health Battles | |
- ๐๏ธโโ๏ธ๐ช๐ฅ Sick of boring workouts and mundane health routines? Get ready to take on health problems like never before with our gamified approach. ๐๐น๏ธ | |
## Advanced AI Technology | |
- ๐ค๐ง ๐ฅ The AI technology behind our game is so advanced, you'll think you're battling a real-life disease! Let the personalized gameplay experience adapt to your style and keep you engaged for hours on end. ๐ป๐จโ๐ฌ | |
## Healthy Competition | |
- ๐๐๐ฎ Ready for some healthy competition? Compete against friends and other players around the world, earning rewards and achievements with our self-play reinforcement learning algorithms. ๐๐ | |
## Availability | |
- ๐จโ๐ป๐ฒ The AI RPG Self-Play RL ML Health Battler Game is now available for public open source use on all platforms, including iOS and Android devices, via the world's largest ML platform Huggingface! Download now and start fighting for your health. ๐ฒ๐ฅ | |
## Conclusion | |
- Don't let health problems get the best of you - join the fight with our AI RPG Self-Play RL ML Health Battler Game! ๐ฎ๐ช๐ฉบ | |
""") | |
# Define the Streamlit app | |
def app(): | |
st.set_page_config(page_title="Health Care Game", page_icon="๐ฅ", layout="wide") | |
st.title("Health Care Game") | |
st.sidebar.write("# Game Settings") | |
num_games = st.sidebar.slider("Number of games to play", 1, 100, 10) | |
st.sidebar.write("# Player Cards") | |
for player, attributes in player_cards.items(): | |
st.sidebar.write(f"## {player}") | |
st.sidebar.write(f"Sketch: {attributes['sketch']}") | |
st.sidebar.write(f"Character: {attributes['character']}") | |
st.sidebar.write(f"Player Board: {attributes['player_board']}") | |
st.sidebar.write(f"Action Dice: {attributes['action_dice']}") | |
st.sidebar.write(f"Health Tokens: {attributes['health_tokens']}") | |
st.sidebar.write(f"Coin: {attributes['coin']}") | |
st.sidebar.write(f"Battle Tokens: {attributes['battle_tokens']}") | |
st.sidebar.write("# Health Problems") | |
for problem in health_problems: | |
st.sidebar.write(f"- {problem}") | |
# Start the game when the user clicks the "Play Game" button | |
if st.button("Play Game"): | |
play_game(num_games) | |
showPressRelease() | |
if __name__ == "__main__": | |
app() | |