# 🎮 Návod pro studenty: Jak připravit hru pro GameGlass Portál Ahoj! Abys mohl/a svou hru nahrát na náš školní GameGlass portál a ukázat ji všem ostatním přímo ve webovém prohlížeči, stačí dodržet několik jednoduchých pravidel. --- ## 1. Pravidla pro Pygame (Grafické hry) Aby tvoje Pygame hra mohla běžet uvnitř internetového prohlížeče, musí být strukturována tzv. "asynchronně" (aby nezamrzla prohlížeč). **Musíš udělat přesně tyto 3 kroky ve svém kódu:** 1. **Importuj `asyncio`:** Na úplný začátek souboru, hned k `import pygame`, přidej: ```python import pygame import asyncio ``` 2. **Zabal hru do asynchronní funkce:** Celý kód tvé hry (nebo alespoň tvoji hlavní herní smyčku) musíš zabalit do asynchronní funkce (např. `async def main():`). A na úplný konec souboru pak hru spustit pomocí `asyncio.run(main())`. 3. **Přidej odpočinkovou pauzu do smyčky:** Do tvé hlavní smyčky `while True:` musíš (ideálně nakonec smyčky) přidat magické zaříkávadlo: ```python await asyncio.sleep(0) ``` *Tento příkaz řekne prohlížeči: "Teď si můžeš na milisekundu odpočinout a vykreslit obrazovku". Bez tohoto příkazu hra okamžitě zamrzne a spadne!* **Ukázková kostra správné Pygame hry:** ```python import pygame import asyncio # --- Zde dej své funkce a nastavení --- async def main(): pygame.init() screen = pygame.display.set_mode((800, 600)) clock = pygame.time.Clock() running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # Zde se děje logika hry a vykreslování... screen.fill((0, 0, 0)) pygame.display.flip() # Omezení FPS clock.tick(60) # MAGICKÝ PŘÍKAZ (NUTNÉ PRO WEB!) await asyncio.sleep(0) pygame.quit() # Spuštění asynchronní hry if __name__ == "__main__": asyncio.run(main()) ``` --- ## 2. Pravidla pro terminálové hry (Čistý Python textovky) Pokud děláš obyčejnou textovou hru (pouze příkazy `print` a `input`), je to velmi jednoduché: - Nemusíš používat `asyncio` vůbec. - Můžeš normálně používat `input("Zadej volbu: ")`. Portál sám vytvoří interaktivní textové pole. - Pokud chceš "vyčistit obrazovku" terminálu, můžeš použít klasický příkaz: ```python import os os.system('cls') # nebo os.system('clear') ``` --- ## 3. Pravidla pro Ren'Py (Vizuální Novely) - Tvoje hra bude spuštěna přes Web Assembly engine Ren'Py. - **Krok navíc:** Před zabalením do ZIPu jdi do složky své hry a zazipuj POUZE obsah složky `game/` (tedy soubory `.rpy` a složku s obrázky `images/`). Portál nepotřebuje zbytek enginu (soubory `.exe`, `.sh`), engine už v portálu je. --- ## ⚠️ DŮLEŽITÉ UPOZORNĚNÍ K CESTÁM V KÓDU (Pro všechny hry) **NIKDY** ve svém kódu nepoužívejte tzv. "natvrdo zadrátované cesty" k obrázkům nebo k vašemu disku! (Tzv. Absolutní cesty). ❌ **ŠPATNĚ (Na webu to spadne):** ```python os.chdir(r"C:\Users\Student\Plocha\MojeHra") # NIKDY! image = pygame.image.load(r"C:\Users\Student\Plocha\MojeHra\assets\hrdina.png") ``` ✅ **SPRÁVNĚ (Relativní cesty):** Aplikace běží v paměti na internetu (kde disk C:\ vůbec neexistuje). Používejte relativní cesty: ```python image = pygame.image.load("assets/hrdina.png") ``` Až budeš mít hotovo, všechny své soubory a složky označ a zabal přímo do archivu **.ZIP** a nahraj do formuláře na portálu!