Spaces:
Runtime error
Runtime error
import streamlit as st | |
import random | |
import json | |
import os | |
# Cascadia Game Components | |
habitat_tiles = ['π²', 'ποΈ', 'π', 'π΅', 'π'] # Representing different habitats | |
wildlife_tokens = ['π»', 'π¦ ', 'π', 'π¦', 'πΏοΈ'] # Different wildlife | |
players = ['Player 1', 'Player 2', 'AI Player'] | |
save_file = 'cascadia_game_state.txt' | |
# Initialize or load game state | |
def initialize_game(): | |
st.session_state['habitat_stack'] = random.sample(habitat_tiles * 10, 50) | |
st.session_state['wildlife_stack'] = random.sample(wildlife_tokens * 10, 50) | |
st.session_state['players'] = {player: {'habitat': [], 'wildlife': [], 'nature_tokens': 0} for player in players} | |
st.session_state['current_player'] = 0 | |
st.session_state['game_history'] = [] | |
def load_game_state(): | |
if os.path.exists(save_file): | |
with open(save_file, 'r') as file: | |
state = json.load(file) | |
st.session_state.update(state) | |
def save_game_state(): | |
with open(save_file, 'w') as file: | |
state = {key: value for key, value in st.session_state.items() if key != 'current_player'} | |
json.dump(state, file) | |
if 'habitat_stack' not in st.session_state: | |
load_game_state() | |
if 'habitat_stack' not in st.session_state: | |
initialize_game() | |
# AI Player Logic (Placeholder for AI strategy) | |
def ai_player_turn(): | |
# AI logic to choose habitat and wildlife | |
return random.choice(habitat_tiles), random.choice(wildlife_tokens) | |
# Scoring Function (Placeholder for actual scoring logic) | |
def calculate_score(player): | |
# Implement scoring based on Cascadia rules | |
return random.randint(0, 50) # Placeholder score | |
# Gameplay Functions | |
def draw_habitat_and_wildlife(amount=1): | |
habitats, wildlife = [], [] | |
for _ in range(amount): | |
if st.session_state.habitat_stack and st.session_state.wildlife_stack: | |
habitats.append(st.session_state.habitat_stack.pop()) | |
wildlife.append(st.session_state.wildlife_stack.pop()) | |
return habitats, wildlife | |
# Streamlit Interface | |
st.title("π² Cascadia Lite π²") | |
# Display game board for each player | |
for player in players: | |
st.write(f"## {player}'s Play Area") | |
col1, col2 = st.columns(2) | |
with col1: | |
st.write("Habitat Tiles") | |
st.write(' '.join(st.session_state.players[player]['habitat'])) | |
with col2: | |
st.write("Wildlife Tokens") | |
st.write(' '.join(st.session_state.players[player]['wildlife'])) | |
# Drafting phase | |
st.write("## Drafting Phase") | |
current_player = players[st.session_state['current_player']] | |
if current_player != 'AI Player': | |
if st.button(f"{current_player}: Draw Habitat and Wildlife"): | |
habitats, wildlife = draw_habitat_and_wildlife(8) # Draw up to 8 tiles/tokens | |
st.session_state.players[current_player]['habitat'] += habitats | |
st.session_state.players[current_player]['wildlife'] += wildlife | |
st.write(f"{current_player} drew: {habitats}, {wildlife}") | |
st.session_state['current_player'] = (st.session_state['current_player'] + 1) % len(players) | |
else: | |
habitat, wildlife = ai_player_turn() | |
st.session_state.players['AI Player']['habitat'].append(habitat) | |
st.session_state.players['AI Player']['wildlife'].append(wildlife) | |
st.session_state['current_player'] = (st.session_state['current_player'] + 1) % len(players) | |
st.write(f"AI Player drew: {habitat}, {wildlife}") | |
# Display scoring for each player | |
st.write("## Scoring") | |
for player in players: | |
score = calculate_score(player) | |
st.write(f"{player}'s score: {score}") | |
# End of Game (Placeholder) | |
st.write("## End of Game") | |
st.write("Final scores and winner announcement will be displayed here.") | |
# Save game state | |
save_game_state() | |
# Display game history | |
st.write("## Game History") | |
st.write('\n'.join(st.session_state['game_history'])) | |
# Run the Streamlit app | |
st.write("## Game Controls") | |
st.write("Use the buttons and controls to play the game!") | |