Download app.py from testrro/REAVT2: direct link, hf CLI and curl.
- Browser
- Download file 7.37 kB
-
https://huggingface.co/spaces/testrro/REAVT2/resolve/main/app.py
- Command line
-
hf download hf://spaces/testrro/REAVT2/app.py
-
curl -L -o app.py https://huggingface.co/spaces/testrro/REAVT2/resolve/main/app.py
7.37 kB
| import gradio as gr | |
| import time | |
| import threading | |
| from datetime import datetime | |
| import numpy as np | |
| from rng_system import get_rng, RandomBufferMonitor | |
| from alien_system import AlienSpawner, AlienPatternLibrary | |
| # গ্লোবাল ইন্সট্যান্স | |
| rng = get_rng() | |
| buffer_monitor = RandomBufferMonitor(rng) | |
| pattern_library = AlienPatternLibrary() | |
| spawner = AlienSpawner(pattern_library) | |
| # ব্যাকগ্রাউন্ড আপডেট থ্রেড | |
| running = True | |
| def background_updater(): | |
| """পটভূমিতে গেম স্টেট আপডেট করে""" | |
| last_time = time.time() | |
| while running: | |
| current_time = time.time() | |
| dt = current_time - last_time | |
| # এলিয়েন আপডেট | |
| spawner.update(dt) | |
| # বাফার মনিটর | |
| if int(current_time) % 5 == 0: # প্রতি ৫ সেকেন্ডে | |
| buffer_monitor.log_status() | |
| last_time = current_time | |
| time.sleep(0.016) # ~60 FPS | |
| # ব্যাকগ্রাউন্ড থ্রেড স্টার্ট | |
| thread = threading.Thread(target=background_updater, daemon=True) | |
| thread.start() | |
| # ==================== UI ফাংশন ==================== | |
| def get_rng_status(): | |
| """RNG স্ট্যাটাস""" | |
| stats = rng.get_stats() | |
| health = buffer_monitor.check_health() | |
| return f""" | |
| **র্যান্ডম বাফার স্ট্যাটাস**: | |
| - বাফার লেভেল: {stats.buffer_size}/1000 | |
| - খালি পড়া: {stats.empty_reads} | |
| - গড় পড়ার সময়: {stats.average_read_time*1000:.3f}ms | |
| - স্বাস্থ্য স্কোর: {health['health_score']}/100 | |
| - স্ট্যাটাস: {health['status']} | |
| """ | |
| def get_aliens_status(): | |
| """এলিয়েন স্ট্যাটাস""" | |
| aliens = spawner.get_aliens_data() | |
| stats = spawner.get_stats() | |
| history = spawner.get_spawn_history(10) | |
| alien_lines = [] | |
| for alien in aliens[:5]: # প্রথম ৫টি দেখায় | |
| alien_lines.append(f"ID:{alien['id']} {alien['type']} @({alien['x']},{alien['y']}) HP:{alien['health']}") | |
| history_lines = [] | |
| for h in history: | |
| history_lines.append(f"{h['time']} - {h['type']} at {h['position']}") | |
| return f""" | |
| **এলিয়েন স্ট্যাটাস**: | |
| - সক্রিয় এলিয়েন: {stats['active_aliens']} | |
| - মোট স্পন: {stats['total_spawned']} | |
| - মোট নিহত: {stats['total_killed']} | |
| **সক্রিয় এলিয়েন**: | |
| {chr(10).join(alien_lines) if alien_lines else 'কোন এলিয়েন নেই'} | |
| **সাম্প্রতিক স্পন**: | |
| {chr(10).join(history_lines) if history_lines else 'কোন স্পন নেই'} | |
| """ | |
| def spawn_alien_manually(): | |
| """ম্যানুয়ালি এলিয়েন স্পন""" | |
| alien_type = spawner._select_alien_type() | |
| x, y = spawner._get_random_spawn_position() | |
| alien = spawner._create_alien(alien_type, x, y) | |
| spawner.aliens.append(alien) | |
| return get_aliens_status() | |
| def reset_system(): | |
| """সবকিছু রিসেট""" | |
| global spawner | |
| rng.reset() | |
| spawner = AlienSpawner(pattern_library) | |
| return get_rng_status(), get_aliens_status() | |
| def get_next_random(): | |
| """পরবর্তী র্যান্ডম ভ্যালু""" | |
| value = rng.next_random() | |
| return f"পরবর্তী র্যান্ডম ভ্যালু: {value}" | |
| def refresh_all(): | |
| """সব ডাটা রিফ্রেশ""" | |
| return get_rng_status(), get_aliens_status() | |
| # ==================== কাস্টম CSS ==================== | |
| CUSTOM_CSS = """ | |
| .gradio-container { | |
| background: #0a0a0f !important; | |
| color: #ffffff !important; | |
| font-family: 'Inter', sans-serif !important; | |
| } | |
| footer {visibility: hidden} | |
| h1 { | |
| color: #00d4ff !important; | |
| text-align: center; | |
| margin-bottom: 20px; | |
| text-shadow: 0 0 10px #00d4ff; | |
| } | |
| .gr-box { | |
| border: 1px solid #333 !important; | |
| background: rgba(255,255,255,0.05) !important; | |
| } | |
| .gr-button-primary { | |
| background: linear-gradient(135deg, #00d4ff, #0088ff) !important; | |
| border: none !important; | |
| } | |
| .gr-button-secondary { | |
| background: rgba(255,255,255,0.1) !important; | |
| border: 1px solid #00d4ff !important; | |
| } | |
| """ | |
| # ==================== Gradio UI (Gradio 6.0+ কম্প্যাটিবল) ==================== | |
| with gr.Blocks(title="AVOLD - Aviator Engine") as demo: | |
| gr.HTML(""" | |
| <div style="text-align: center; margin-bottom: 20px;"> | |
| <h1 style="color: #00d4ff; font-size: 48px; margin: 0;">✈️ AVOLD ENGINE</h1> | |
| <p style="color: #888; font-size: 14px;">টাইমার-ভিত্তিক RNG + এলিয়েন স্পনিং সিস্টেম</p> | |
| </div> | |
| """) | |
| with gr.Tabs(): | |
| with gr.TabItem("RNG সিস্টেম"): | |
| rng_status = gr.Markdown(value=get_rng_status()) | |
| with gr.Row(): | |
| random_btn = gr.Button("🎲 পরবর্তী র্যান্ডম ভ্যালু", variant="primary") | |
| random_value = gr.Textbox(label="র্যান্ডম ভ্যালু", interactive=False) | |
| random_btn.click(fn=get_next_random, outputs=random_value) | |
| with gr.TabItem("এলিয়েন সিস্টেম"): | |
| alien_status = gr.Markdown(value=get_aliens_status()) | |
| with gr.Row(): | |
| spawn_btn = gr.Button("👾 ম্যানুয়াল এলিয়েন স্পন", variant="primary") | |
| refresh_btn = gr.Button("🔄 রিফ্রেশ", variant="secondary") | |
| spawn_btn.click(fn=spawn_alien_manually, outputs=alien_status) | |
| refresh_btn.click(fn=get_aliens_status, outputs=alien_status) | |
| with gr.TabItem("মনিটরিং"): | |
| monitor_status = gr.Markdown(value=get_rng_status()) | |
| refresh_monitor = gr.Button("🔄 রিফ্রেশ মনিটর") | |
| refresh_monitor.click(fn=get_rng_status, outputs=monitor_status) | |
| with gr.Row(): | |
| reset_btn = gr.Button("🔄 সম্পূর্ণ সিস্টেম রিসেট", variant="secondary") | |
| reset_btn.click( | |
| fn=reset_system, | |
| outputs=[rng_status, alien_status] | |
| ) | |
| # Gradio 6.0-এ 'every' প্যারামিটার কাজ করে না | |
| # তাই আমরা JavaScript দিয়ে auto-refresh করব | |
| demo.load( | |
| fn=refresh_all, | |
| outputs=[rng_status, alien_status] | |
| ) | |
| # ==================== অ্যাপ রান (Gradio 6.0+ কম্প্যাটিবল) ==================== | |
| if __name__ == "__main__": | |
| try: | |
| # theme এবং css এখন launch()-এ দেওয়া হয় | |
| demo.launch( | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| theme='dark', | |
| css=CUSTOM_CSS | |
| ) | |
| finally: | |
| running = False | |
| rng.stop() |