File size: 3,669 Bytes
4632fbc
 
091bf0d
d99eafb
4632fbc
 
091bf0d
 
 
d99eafb
4632fbc
81ae0d1
 
4632fbc
 
80da3b8
d99eafb
 
 
 
 
80da3b8
d99eafb
 
 
 
 
 
 
 
 
 
 
 
 
80da3b8
 
 
 
d99eafb
 
81ae0d1
80da3b8
d99eafb
80da3b8
d99eafb
81ae0d1
 
4632fbc
81ae0d1
091bf0d
 
 
 
 
 
81ae0d1
091bf0d
81ae0d1
091bf0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81ae0d1
 
d99eafb
4632fbc
091bf0d
4632fbc
091bf0d
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
import streamlit as st
import random
import pandas as pd
import os

# Cascadia Game Components
habitat_tiles = ['🌲', '🏞️', '🌊', '🌡', 'πŸŒ„']
wildlife_tokens = ['🐻', 'πŸ¦…', '🐟', '🦌', '🐿️']
players = ['Player 1', 'Player 2']
save_file = 'cascadia_game_state.csv'

# 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': 3} for player in players}

def load_game_state():
    if os.path.exists(save_file):
        df = pd.read_csv(save_file)
        for player in players:
            st.session_state['players'][player] = {
                'habitat': df[player + '_habitat'].dropna().tolist(),
                'wildlife': df[player + '_wildlife'].dropna().tolist(),
                'nature_tokens': df[player + '_nature_tokens'][0]
            }
        st.session_state['habitat_stack'] = df['habitat_stack'].dropna().tolist()
        st.session_state['wildlife_stack'] = df['wildlife_stack'].dropna().tolist()

def save_game_state():
    data = {
        'habitat_stack': pd.Series(st.session_state['habitat_stack']),
        'wildlife_stack': pd.Series(st.session_state['wildlife_stack'])
    }
    for player in players:
        player_state = st.session_state['players'][player]
        data[player + '_habitat'] = pd.Series(player_state['habitat'])
        data[player + '_wildlife'] = pd.Series(player_state['wildlife'])
        data[player + '_nature_tokens'] = pd.Series([player_state['nature_tokens']])
    df = pd.DataFrame(data)
    df.to_csv(save_file, index=False)

if 'players' not in st.session_state:
    load_game_state()
    if 'players' not in st.session_state:
        initialize_game()

# Streamlit Interface
st.title("🌲 Cascadia Lite 🌲")

# Function to draw habitat and wildlife
def draw_habitat_and_wildlife(player):
    habitat = st.session_state['habitat_stack'].pop()
    wildlife = st.session_state['wildlife_stack'].pop()
    st.session_state['players'][player]['habitat'].append(habitat)
    st.session_state['players'][player]['wildlife'].append(wildlife)

# Display players' areas
for player in players:
    st.write(f"## {player}'s Play Area")
    player_data = pd.DataFrame({'Habitat Tiles': st.session_state['players'][player]['habitat'], 
                                'Wildlife Tokens': st.session_state['players'][player]['wildlife']})
    st.dataframe(player_data)

    # Drafting Phase
    if st.button(f"{player}: Draw Habitat and Wildlife"):
        draw_habitat_and_wildlife(player)

    # Tile Placement
    tile_placement = st.selectbox(f"{player}: Place Habitat Tile", options=['Select Position'] + list(range(1, len(st.session_state['players'][player]['habitat']) + 1)))
    
    # Wildlife Placement
    wildlife_placement = st.selectbox(f"{player}: Place Wildlife Token", options=['Select Habitat'] + list(range(1, len(st.session_state['players'][player]['wildlife']) + 1)))

    # Nature Tokens
    if st.session_state['players'][player]['nature_tokens'] > 0:
        if st.button(f"{player}: Use a Nature Token"):
            st.session_state['players'][player]['nature_tokens'] -= 1
            # Logic for swapping wildlife tokens or other actions
            st.write(f"{player} used a nature token. Remaining: {st.session_state['players'][player]['nature_tokens']}")

# Save game state
save_game_state()

# Game Controls and Instructions
st.write("## Game Controls")
st.write("Use the buttons and select boxes to play the game!")