| import gradio as gr |
| import numpy as np |
| import matplotlib.pyplot as plt |
| from matplotlib.colors import LinearSegmentedColormap |
| import plotly.graph_objects as go |
| import random |
| import time |
|
|
| |
| class UniverseGenerator: |
| def __init__(self): |
| self.galaxy_map = {} |
| self.planet_types = ['Lava', 'Ocean', 'Desert', 'Ice', 'Jungle', 'Toxic', 'Radioactive'] |
| self.star_classes = ['O', 'B', 'A', 'F', 'G', 'K', 'M'] |
| self.resources = ['Titanium', 'Quartz', 'Hydrogen', 'Neutronium', 'Exotic Matter'] |
| |
| def generate_system(self, seed): |
| random.seed(seed) |
| system = { |
| 'name': f"{random.choice(self.star_classes)}-{random.randint(1000,9999)}", |
| 'planets': [], |
| 'position': (random.uniform(-100,100), random.uniform(-100,100), random.uniform(-100,100)) |
| } |
| |
| num_planets = random.randint(3, 8) |
| for i in range(num_planets): |
| planet_type = random.choice(self.planet_types) |
| planet = { |
| 'name': f"{system['name']}-{chr(97+i)}", |
| 'type': planet_type, |
| 'resources': random.sample(self.resources, random.randint(1, 3)), |
| 'fauna': random.randint(0, 15), |
| 'flora': random.randint(0, 15), |
| 'temperature': random.uniform(-200, 500), |
| 'gravity': random.uniform(0.2, 2.5), |
| 'size': random.uniform(0.5, 2.0) |
| } |
| system['planets'].append(planet) |
| |
| return system |
|
|
| def generate_galaxy(self, num_systems=100): |
| for i in range(num_systems): |
| self.galaxy_map[f"System-{i}"] = self.generate_system(i) |
| return self.galaxy_map |
|
|
| |
| class WebspaceEngine: |
| def __init__(self): |
| self.universe = UniverseGenerator() |
| self.galaxy = self.universe.generate_galaxy() |
| self.player = { |
| 'position': (0, 0, 0), |
| 'current_system': 'System-0', |
| 'resources': {'Titanium': 10, 'Quartz': 5}, |
| 'ship': 'Explorer-class', |
| 'credits': 1000 |
| } |
| self.discovered_systems = ['System-0'] |
| |
| def travel_to_system(self, system_name): |
| if system_name in self.galaxy: |
| self.player['current_system'] = system_name |
| if system_name not in self.discovered_systems: |
| self.discovered_systems.append(system_name) |
| return self.galaxy[system_name] |
| return None |
| |
| def scan_planet(self, planet_index): |
| system = self.galaxy[self.player['current_system']] |
| if 0 <= planet_index < len(system['planets']): |
| return system['planets'][planet_index] |
| return None |
| |
| def mine_resources(self, planet_index, resource): |
| planet = self.scan_planet(planet_index) |
| if planet and resource in planet['resources']: |
| amount = random.randint(1, 5) |
| self.player['resources'][resource] = self.player['resources'].get(resource, 0) + amount |
| return f"Mined {amount} units of {resource}" |
| return "Resource not found" |
|
|
| |
| def create_galaxy_map(discovered_systems, galaxy_map): |
| fig = go.Figure() |
| |
| for sys_name in discovered_systems: |
| system = galaxy_map[sys_name] |
| x, y, z = system['position'] |
| |
| |
| fig.add_trace(go.Scatter3d( |
| x=[x], y=[y], z=[z], |
| mode='markers', |
| marker=dict(size=8, color='yellow'), |
| name=sys_name |
| )) |
| |
| |
| for planet in system['planets']: |
| px = x + random.uniform(-3, 3) |
| py = y + random.uniform(-3, 3) |
| pz = z + random.uniform(-3, 3) |
| |
| colors = { |
| 'Lava': 'red', |
| 'Ocean': 'blue', |
| 'Desert': 'orange', |
| 'Ice': 'lightblue', |
| 'Jungle': 'green', |
| 'Toxic': 'purple', |
| 'Radioactive': 'greenyellow' |
| } |
| |
| fig.add_trace(go.Scatter3d( |
| x=[px], y=[py], z=[pz], |
| mode='markers', |
| marker=dict(size=4, color=colors.get(planet['type'], 'gray')), |
| name=planet['name'] |
| )) |
| |
| fig.update_layout( |
| scene=dict( |
| xaxis=dict(title='X'), |
| yaxis=dict(title='Y'), |
| zaxis=dict(title='Z') |
| ), |
| margin=dict(l=0, r=0, b=0, t=0), |
| height=500 |
| ) |
| return fig |
|
|
| def create_planet_surface(planet_type): |
| size = 100 |
| terrain = np.zeros((size, size)) |
| |
| |
| for i in range(size): |
| for j in range(size): |
| terrain[i][j] = ( |
| np.sin(i/5) + |
| np.cos(j/7) + |
| np.sin(np.sqrt((i - size/2)**2 + (j - size/2)**2)/3) |
| ) |
| |
| colormaps = { |
| 'Lava': ['black', 'darkred', 'red', 'orange'], |
| 'Ocean': ['darkblue', 'blue', 'cyan', 'white'], |
| 'Desert': ['saddlebrown', 'sandybrown', 'wheat', 'white'], |
| 'Ice': ['darkblue', 'lightblue', 'cyan', 'white'], |
| 'Jungle': ['darkgreen', 'green', 'lightgreen', 'yellow'], |
| 'Toxic': ['darkgreen', 'purple', 'fuchsia', 'pink'], |
| 'Radioactive': ['darkgreen', 'green', 'greenyellow', 'yellow'] |
| } |
| |
| cmap = LinearSegmentedColormap.from_list("custom", colormaps.get(planet_type, ['gray']), N=256) |
| |
| fig, ax = plt.subplots(figsize=(8, 8)) |
| ax.imshow(terrain, cmap=cmap) |
| ax.axis('off') |
| plt.tight_layout() |
| return fig |
|
|
| |
| engine = WebspaceEngine() |
|
|
| |
| with gr.Blocks(title="Webspace Network") as demo: |
| gr.Markdown("# 🚀 Webspace Network") |
| gr.Markdown("### Cosmic Exploration Simulator (No Man's Sky inspired)") |
| |
| with gr.Row(): |
| with gr.Column(scale=1): |
| current_system = gr.Textbox(label="Current System", value=engine.player['current_system']) |
| system_info = gr.JSON(label="System Data") |
| |
| planet_index = gr.Slider(0, 7, step=1, label="Planet Index") |
| scan_btn = gr.Button("🛰️ Scan Planet") |
| planet_info = gr.JSON(label="Planet Data") |
| |
| resource_select = gr.Dropdown(engine.universe.resources, label="Resource to Mine") |
| mine_btn = gr.Button("⛏️ Mine Resource") |
| mine_result = gr.Textbox(label="Mining Result") |
| |
| travel_target = gr.Dropdown(list(engine.galaxy.keys()), label="Select System") |
| travel_btn = gr.Button("🌌 Hyperjump") |
| |
| player_resources = gr.JSON(label="Your Resources", value=engine.player['resources']) |
| |
| with gr.Column(scale=2): |
| galaxy_map = gr.Plot(label="Galaxy Map") |
| planet_view = gr.Plot(label="Planet Surface") |
| |
| |
| def update_galaxy_map(): |
| return create_galaxy_map(engine.discovered_systems, engine.galaxy) |
| |
| |
| def update_system_info(): |
| system = engine.galaxy[engine.player['current_system']] |
| return { |
| "Name": system['name'], |
| "Position": [round(x, 2) for x in system['position']], |
| "Planets": len(system['planets']) |
| } |
| |
| |
| def scan_planet(idx): |
| planet = engine.scan_planet(int(idx)) |
| if planet: |
| fig = create_planet_surface(planet['type']) |
| return planet, fig |
| return {}, None |
| |
| |
| def mine_resource(resource, idx): |
| result = engine.mine_resources(int(idx), resource) |
| return result, engine.player['resources'] |
| |
| |
| def travel_to_system(system): |
| engine.travel_to_system(system) |
| return { |
| "current_system": system, |
| "system_info": update_system_info(), |
| "galaxy_map": update_galaxy_map() |
| } |
| |
| |
| demo.load( |
| fn=update_galaxy_map, |
| outputs=galaxy_map |
| ) |
| |
| demo.load( |
| fn=update_system_info, |
| outputs=system_info |
| ) |
| |
| scan_btn.click( |
| fn=scan_planet, |
| inputs=planet_index, |
| outputs=[planet_info, planet_view] |
| ) |
| |
| mine_btn.click( |
| fn=mine_resource, |
| inputs=[resource_select, planet_index], |
| outputs=[mine_result, player_resources] |
| ) |
| |
| travel_btn.click( |
| fn=travel_to_system, |
| inputs=travel_target, |
| outputs=[current_system, system_info, galaxy_map] |
| ) |
| |
| current_system.change( |
| fn=update_system_info, |
| outputs=system_info |
| ) |
|
|
| |
| if __name__ == "__main__": |
| demo.launch() |