Spaces:
Runtime error
Runtime error
File size: 10,807 Bytes
863e252 1e9baf6 863e252 a073cd0 f13dac5 1e9baf6 f13dac5 |
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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
import streamlit as st
import pandas as pd
import random
import base64
import csv
import os
st.markdown("""
๐ฒ: This is the standard die used in many games, with each face showing a different number from 1 to 6.
๐ฏ: This emoji represents a dart board, but it can also be used to refer to a 6-sided die in which each face shows a different number from 1 to 6.
๐ด: This is a Japanese flower card game, but can also be used to represent a 6-sided die in which each face shows a different number from 1 to 6.
๐ฐ: This emoji represents a slot machine, but it can also be used to refer to a 6-sided die in which each face shows a different number from 1 to 6.
๐ณ: This emoji represents a bowling game, but it can also be used to refer to a 10-sided die in which each face shows a different number from 0 to 9.
๐ฎ: This emoji represents a video game controller, but it can also be used to refer to a 20-sided die often used in role-playing games, with each face showing a different number from 1 to 20.
๐ด: This is a Japanese flower card game, but it can also be used to represent a 6-sided die in which each face shows a different number from 1 to 6.
๐: This is a mahjong tile representing the one of circles, but it can also be used to represent a 6-sided die in which each face shows a different number from 1 to 6.
""")
# 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 = ["๐ฐ", "๐ธ", "๐ณ", "๐ค", "๐", "๐ท", "๐ต", "๐ฒ", "๐ฆ", "๐น", "๐", "๐", "๐น", "๐ค", "๐ฐ", "๐ต"]
# Create a function to play a single round of the game
def play_round(player_card, health_problem):
st.write(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}")
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
#player_card["coin"] += 10
#player_card["coin"] += 10
coin_emoji = random.choice(coin_emojis)
player_card["coin_emojis"] = player_card.get("coin_emojis", "") + coin_emoji
coin_emoji = random.choice(coin_emojis)
player_card["coin_emoji"] = player_card.get("coin_emoji", "") + coin_emoji
else:
st.write(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}")
else:
st.write(f"{health_problem} fails to attack!")
# 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 button 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)
if st.button("Download Game State"):
with open("game_state.csv", "r") as f:
csv_data = f.read()
st.download_button("game_state.csv", csv_data, file_name="game_state.csv", mime="text/csv")
st.write("*Note: Downloaded files are saved in your browser's default download location*")
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.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()
|