Toto je malý repozitář na ukázku malých her pro Python Game Jam a tento repozitář šlouží jako odrazový můstek pro vaše hry, které budete tvořit v pythonu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

3.6 KiB

🎮 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:

    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:

    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:

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

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:

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!