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()