import gradio as gr
import json
import random
import math
import numpy as np
# ================== ГЛОБАЛЬНЫЕ НАСТРОЙКИ ==================
UNIVERSE_SEED = 42
RESOURCE_TYPES = ['Iron', 'Copper', 'Gold', 'Water', 'Oxygen', 'Hydrogen', 'Silicon', 'Titanium']
CIVILIZATION_STAGES = [
{"title": "I. Биологический", "color": "#00cc44", "desc": "Углеродно-водные формы жизни..."},
{"title": "II. Техногенный", "color": "#00aaff", "desc": "Промышленная и цифровая революция..."},
{"title": "III. Постбиологический", "color": "#ff7700", "desc": "Переход к цифровому существованию..."},
{"title": "IV. Космический", "color": "#aa55ff", "desc": "Межзвездные путешествия..."},
{"title": "V. Универсальный", "color": "#ffff00", "desc": "Слияние с космическим разумом..."}
]
# ================== ГЕНЕРАТОР ВСЕЛЕННОЙ ==================
class UniverseGenerator:
def __init__(self, seed=UNIVERSE_SEED):
self.rng = random.Random(seed)
self.planet_types = ['Lava', 'Ocean', 'Desert', 'Ice', 'Jungle']
def generate_planet(self, index):
return {
'name': f"Planet-{chr(65 + index)}",
'type': self.rng.choice(self.planet_types),
'resources': self.rng.sample(RESOURCE_TYPES, self.rng.randint(2, 5)),
'size': self.rng.uniform(0.8, 1.5),
'habitability': round(self.rng.uniform(0.1, 0.9), 2)
}
def generate_system(self, index):
return {
'name': f"System-{index}",
'planets': [self.generate_planet(i) for i in range(self.rng.randint(3, 6))]
}
def generate_universe(self):
return {
'systems': [self.generate_system(i) for i in range(3)],
'civilization_stages': CIVILIZATION_STAGES
}
# ================== THREE.JS ШАБЛОНЫ ==================
CIVILIZATION_TEMPLATE = """
Эволюция Цивилизаций
ЭВОЛЮЦИЯ ЦИВИЛИЗАЦИЙ ВО ВСЕЛЕННОЙ
"""
SPACE_EXPLORER_TEMPLATE = """
Космический Исследователь
Космический Корабль
Здоровье: 100/100
Топливо: 100/100
"""
# ================== GRADIO ИНТЕРФЕЙС ==================
def create_civilization_demo():
universe = UniverseGenerator().generate_universe()
template = CIVILIZATION_TEMPLATE.replace("{civilization_stages}", json.dumps(universe["civilization_stages"]))
return template
def create_space_explorer_demo():
universe = UniverseGenerator().generate_universe()
template = SPACE_EXPLORER_TEMPLATE.replace("{universe_data}", json.dumps(universe))
return template
with gr.Blocks(title="Космические Игры", css=".gradio-container {background: #000033;}") as demo:
gr.Markdown("# 🌌 Две Космические Игры")
gr.Markdown("### Исследуйте эволюцию цивилизаций и космические просторы")
with gr.Tabs():
with gr.TabItem("Эволюция Цивилизаций"):
civ_html = gr.HTML(create_civilization_demo())
gr.Markdown("""
**Инструкции:**
- Кликните на сферы, чтобы узнать о стадиях развития цивилизаций
- Используйте мышь для вращения камеры
""")
with gr.TabItem("Космический Исследователь"):
space_html = gr.HTML(create_space_explorer_demo())
gr.Markdown("""
**Управление:**
- W/S: Движение вперед/назад
- A/D: Движение влево/вправо
- Мышь: Управление камерой
""")
gr.Markdown("### Общие игровые системы:")
with gr.Accordion("Технические детали", open=False):
gr.Markdown("""
**Общие компоненты:**
1. **Генерация вселенной**: Процедурное создание планет и систем
2. **Three.js рендеринг**: Реалистичное 3D отображение космоса
3. **Интерактивные элементы**: Взаимодействие с объектами через UI
4. **Физика движения**: Реалистичное управление космическим кораблем
""")
if __name__ == "__main__":
demo.launch()