File size: 2,971 Bytes
1b8a61e
08f6cf8
d3dc3f6
1b8a61e
f322fc1
 
 
 
 
 
 
 
1b8a61e
f322fc1
 
 
 
 
1b8a61e
f322fc1
d3dc3f6
1b8a61e
d3dc3f6
f322fc1
d3dc3f6
f322fc1
 
 
d3dc3f6
f322fc1
 
1b8a61e
f322fc1
08f6cf8
 
d3dc3f6
f322fc1
08f6cf8
f322fc1
 
1b8a61e
d3dc3f6
 
 
 
 
 
 
 
 
 
 
f322fc1
 
1b8a61e
f322fc1
d3dc3f6
 
f322fc1
 
 
 
 
 
 
 
d3dc3f6
 
f322fc1
d3dc3f6
f322fc1
1b8a61e
 
 
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
import streamlit as st
import numpy as np
import time

# Helper functions for number theory-based emoji placement
def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

def fib_sequence(n):
    fib_seq = [0, 1]
    while fib_seq[-1] + fib_seq[-2] <= n:
        fib_seq.append(fib_seq[-1] + fib_seq[-2])
    return fib_seq[2:]  # Exclude first two numbers for this use case

# Expanded set of emojis for landscape elements
emoji_set = ["🌲", "🌳", "πŸƒ", "🌲", "🌿", "πŸ„", "🏠", "🏰", "πŸ—Ό", "πŸ›€οΈ", "🌊", "🏞️", "🌁", "🌾", "🏜️", "🏝️", "πŸ›–", "πŸ›€οΈ", "πŸ›£οΈ", "πŸ•οΈ", "πŸŒ‹", "⛰️", "🧱", "🌡", "🍁", "🌼", "🌻", "🌺", "🏑", "πŸ—ΊοΈ", "β›Ί", "πŸŒ…", "πŸŒ„", "🌠", "πŸ‚", "πŸ€", "🌴", "πŸŽ„", "🌡", "πŸŒ™", "⭐", "🌀️", "πŸŒͺ"]

# Initialize locations with more varied and staggered emojis
def initialize_locations(size):
    np.random.seed(42)  # For reproducibility
    locations = {
        'forest edge': np.random.choice(emoji_set, (size, size)),
        'deep forest': np.random.choice(emoji_set, (size, size)),
        # Add other locations with corresponding maps as needed
    }
    return locations

# Directions for movement
directions = {"North": (-1, 0), "South": (1, 0), "West": (0, -1), "East": (0, 1)}

# Shift emojis based on direction with wrap-around
def move_emojis(locations, current_location, direction):
    dx, dy = directions[direction]
    locations[current_location] = np.roll(locations[current_location], shift=(dx, dy), axis=(0, 1))
    return locations

# WASD movement interface
def wasd_interface():
    direction = None
    with st.form("wasd_form", clear_on_submit=True):
        direction_input = st.text_input("Enter direction (WASD):", "")
        submitted = st.form_submit_button("Move")
        if submitted and direction_input.upper() in ['W', 'A', 'S', 'D']:
            direction = {'W': 'North', 'A': 'West', 'S': 'South', 'D': 'East'}[direction_input.upper()]
    return direction

# Main application
def main():
    st.title("Explore the Emoji World")

    size = st.sidebar.slider("Grid Size", 5, 40, 10)
    delay = st.sidebar.slider("Movement Delay (seconds)", 0.0, 1.0, 0.1)

    if 'locations' not in st.session_state:
        st.session_state.locations = initialize_locations(size)
    
    current_location = st.sidebar.selectbox("Select location", options=list(st.session_state.locations.keys()))
    emoji_map = st.session_state.locations[current_location]
    map_str = "\n".join(["".join(row) for row in emoji_map])
    st.text(map_str)

    direction = wasd_interface()
    if direction:
        st.session_state.locations = move_emojis(st.session_state.locations, current_location, direction)
        time.sleep(delay)  # Delay to adjust the speed of movement
        st.experimental_rerun()

if __name__ == "__main__":
    main()