File size: 3,456 Bytes
f2d0a0e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import numpy as np
import time  # Ensure this import is included for the delay functionality

# Streamlit caching for faster location initialization
@st.cache(allow_output_mutation=True)
def initialize_locations(size):
    """Initialize different locations with unique emoji grids."""
    np.random.seed(42)  # Ensure reproducibility
    # Expanded emoji set for diverse landscapes
    emoji_set = ["🌲", "🌳", "πŸƒ", "πŸ„", "🏠", "🏰", "πŸ—Ό", "πŸ›€οΈ", "🌊", "🏞️", 
                 "🌁", "🌾", "🏜️", "🏝️", "πŸ›–", "πŸ›£οΈ", "πŸ•οΈ", "πŸŒ‹", "⛰️", "🧱", 
                 "🌡", "🍁", "🌼", "🌻", "🌺", "🏑", "πŸ—ΊοΈ", "πŸͺ¨", "πŸŒ…", "πŸŒ„", 
                 "🌠", "🌌", "🏞️", "πŸŒ‰", "πŸŒ‡", "πŸ”οΈ", "β›Ί", "🌲", "🌳", "πŸ‚"]
    # Randomize emoji placement for each location
    locations = {
        'forest edge': np.random.choice(emoji_set, (size, size)),
        'deep forest': np.random.choice(emoji_set, (size, size)),
        # Additional locations with their unique emoji maps can be added here
    }
    return locations

def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(np.sqrt(n)) + 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

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

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

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

    size = st.sidebar.slider("Grid Size", 5, 40, 10)
    delay = st.sidebar.slider("Update Delay (ms)", 0, 1000, 100)
    
    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)

    # Sidebar selectbox for movement
    direction = st.sidebar.selectbox("Move direction", ["None", "North", "South", "East", "West"])
    if direction != "None":
        st.session_state.locations = move_emojis(st.session_state.locations, current_location, direction)

    # WASD-like controls using Streamlit buttons
    cols = st.columns([1, 1, 1, 1, 1])
    with cols[1]:
        if st.button('W'):
            direction = "North"
    with cols[0]:
        if st.button('A'):
            direction = "West"
    with cols[2]:
        if st.button('D'):
            direction = "East"
    with cols[4]:
        if st.button('S'):
            direction = "South"
    
    if direction:
        st.session_state.locations = move_emojis(st.session_state.locations, current_location, direction)
        # Delay implementation
        time.sleep(delay / 1000.0)  # Convert ms to seconds
        st.experimental_rerun()

    st.sidebar.text("Controls: Use WASD buttons or the dropdown to navigate.")
    st.sidebar.text("Delay controls the speed of updates to help with motion sensitivity.")

if __name__ == "__main__":