Browse Source

Update Pygame examples with asyncio support for web compatibility

master
skrabanek 7 days ago
parent
commit
5ded326110
  1. 8
      pygame/01_pexeso.py
  2. 8
      pygame/02_flappy_bird.py
  3. 8
      pygame/03_chytani_jablek.py
  4. 8
      pygame/04_pong_dva_hraci.py
  5. 8
      pygame/05_skakacka_gravitace.py
  6. 8
      pygame/06_vesmirna_strilecka.py
  7. 8
      pygame/07_had.py

8
pygame/01_pexeso.py

@ -1,7 +1,9 @@
import pygame import pygame
import asyncio # PŘIDÁNO PRO WEB: importujeme asyncio pro neblokující smyčku
import random import random
import sys import sys
async def main(): # PŘIDÁNO PRO WEB: Zabalíme celou hru do asynchronní funkce
# pygame.init() nastartuje všechny vnitřní moduly Pygame. # pygame.init() nastartuje všechny vnitřní moduly Pygame.
# Je to naprosto povinný první krok před tím, než můžeme v Pygame cokoliv udělat. # Je to naprosto povinný první krok před tím, než můžeme v Pygame cokoliv udělat.
pygame.init() pygame.init()
@ -209,8 +211,14 @@ def hlavni_smycka():
# Rychlost smyčky: Řekneme hodinám, že chceme, aby smyčka běžela maximálně tolikrát za vteřinu, jak určuje FPS # Rychlost smyčky: Řekneme hodinám, že chceme, aby smyčka běžela maximálně tolikrát za vteřinu, jak určuje FPS
hodiny.tick(FPS) hodiny.tick(FPS)
# PŘIDÁNO PRO WEB: Dáme prohlížeči šanci překreslit obrazovku
await asyncio.sleep(0)
# Tohle říká Pythonu: Pokud tento soubor spouštíš jako hlavní program (ne jen importuješ), # Tohle říká Pythonu: Pokud tento soubor spouštíš jako hlavní program (ne jen importuješ),
# tak teprve tehdy spusť hlani_smycka() # tak teprve tehdy spusť hlani_smycka()
if __name__ == "__main__": if __name__ == "__main__":
hlavni_smycka() hlavni_smycka()
# PŘIDÁNO PRO WEB: Spuštění asynchronní hry
asyncio.run(main())

8
pygame/02_flappy_bird.py

@ -1,7 +1,9 @@
import pygame import pygame
import asyncio # PŘIDÁNO PRO WEB: importujeme asyncio pro neblokující smyčku
import random import random
import sys import sys
async def main(): # PŘIDÁNO PRO WEB: Zabalíme celou hru do asynchronní funkce
# pygame.init() připraví knihovnu Pygame k použití. Volat to musíme vždy jako první věc! # pygame.init() připraví knihovnu Pygame k použití. Volat to musíme vždy jako první věc!
pygame.init() pygame.init()
@ -185,6 +187,8 @@ def hlavni_smycka():
# Pojistka pro správnou rychlost. Počká se milisekundu tak, abychom dodrželi stanovené FPS. # Pojistka pro správnou rychlost. Počká se milisekundu tak, abychom dodrželi stanovené FPS.
hodiny.tick(FPS) hodiny.tick(FPS)
# PŘIDÁNO PRO WEB: Dáme prohlížeči šanci překreslit obrazovku
await asyncio.sleep(0)
# Toto funguje tak, že hru spouštíme donekonečna. Když hráč zemře a dá mezerník, # Toto funguje tak, že hru spouštíme donekonečna. Když hráč zemře a dá mezerník,
# funkce 'hlavni_smycka()' skončí (return), ale díky tomuto cyklu 'while True' # funkce 'hlavni_smycka()' skončí (return), ale díky tomuto cyklu 'while True'
@ -192,3 +196,7 @@ def hlavni_smycka():
if __name__ == "__main__": if __name__ == "__main__":
while True: while True:
hlavni_smycka() hlavni_smycka()
# PŘIDÁNO PRO WEB: Spuštění asynchronní hry
asyncio.run(main())

8
pygame/03_chytani_jablek.py

@ -1,8 +1,10 @@
import pygame import pygame
import asyncio # PŘIDÁNO PRO WEB: importujeme asyncio pro neblokující smyčku
import sys import sys
import random import random
# Inicializace knihovny Pygame - povinný krok. Nastaví všechny podmoduly zvuků, kreslení atd. # Inicializace knihovny Pygame - povinný krok. Nastaví všechny podmoduly zvuků, kreslení atd.
async def main(): # PŘIDÁNO PRO WEB: Zabalíme celou hru do asynchronní funkce
pygame.init() pygame.init()
# --- Nastavení herního okna --- # --- Nastavení herního okna ---
@ -134,7 +136,13 @@ while bezime:
# A tohle vynutí pauzu natolik dlouhou, abychom za vteřinu nepřekročili 60 smyček (60 FPS) # A tohle vynutí pauzu natolik dlouhou, abychom za vteřinu nepřekročili 60 smyček (60 FPS)
hodiny.tick(60) hodiny.tick(60)
# PŘIDÁNO PRO WEB: Dáme prohlížeči šanci překreslit obrazovku
await asyncio.sleep(0)
# Pokud 'bezime' skočí na False a vyskočíme ze smyčky 'while', musíme bezpečně zhasnout! # Pokud 'bezime' skočí na False a vyskočíme ze smyčky 'while', musíme bezpečně zhasnout!
pygame.quit() pygame.quit()
sys.exit() sys.exit()
# PŘIDÁNO PRO WEB: Spuštění asynchronní hry
asyncio.run(main())

8
pygame/04_pong_dva_hraci.py

@ -1,6 +1,8 @@
import pygame import pygame
import asyncio # PŘIDÁNO PRO WEB: importujeme asyncio pro neblokující smyčku
import sys import sys
async def main(): # PŘIDÁNO PRO WEB: Zabalíme celou hru do asynchronní funkce
# pygame.init() spustí vnitřní motory knihovny Pygame. Bez toho nejde ani otevřít okno. # pygame.init() spustí vnitřní motory knihovny Pygame. Bez toho nejde ani otevřít okno.
pygame.init() pygame.init()
@ -186,7 +188,13 @@ while bezime:
# Pauza na udržení stabilních 60 FPS # Pauza na udržení stabilních 60 FPS
hodiny.tick(60) hodiny.tick(60)
# PŘIDÁNO PRO WEB: Dáme prohlížeči šanci překreslit obrazovku
await asyncio.sleep(0)
# Konec programu # Konec programu
pygame.quit() pygame.quit()
sys.exit() sys.exit()
# PŘIDÁNO PRO WEB: Spuštění asynchronní hry
asyncio.run(main())

8
pygame/05_skakacka_gravitace.py

@ -1,7 +1,9 @@
import pygame import pygame
import asyncio # PŘIDÁNO PRO WEB: importujeme asyncio pro neblokující smyčku
import sys import sys
import random import random
async def main(): # PŘIDÁNO PRO WEB: Zabalíme celou hru do asynchronní funkce
pygame.init() pygame.init()
# --- NASTAVENÍ OKNA A PROMĚNNÝCH PROSTŘEDÍ --- # --- NASTAVENÍ OKNA A PROMĚNNÝCH PROSTŘEDÍ ---
@ -164,6 +166,12 @@ while bezime:
# .flip() překlopí to, co jsme nakreslili v paměti na obrazovku k hráči # .flip() překlopí to, co jsme nakreslili v paměti na obrazovku k hráči
pygame.display.flip() pygame.display.flip()
hodiny.tick(60) # Cílíme na hladkých 60 FPS (Frames Per Second) hodiny.tick(60) # Cílíme na hladkých 60 FPS (Frames Per Second)
# PŘIDÁNO PRO WEB: Dáme prohlížeči šanci překreslit obrazovku
await asyncio.sleep(0)
pygame.quit() pygame.quit()
sys.exit() sys.exit()
# PŘIDÁNO PRO WEB: Spuštění asynchronní hry
asyncio.run(main())

8
pygame/06_vesmirna_strilecka.py

@ -1,7 +1,9 @@
import pygame import pygame
import asyncio # PŘIDÁNO PRO WEB: importujeme asyncio pro neblokující smyčku
import sys import sys
import random import random
async def main(): # PŘIDÁNO PRO WEB: Zabalíme celou hru do asynchronní funkce
pygame.init() pygame.init()
# --- NASTAVENÍ OKNA --- # --- NASTAVENÍ OKNA ---
@ -180,6 +182,12 @@ while bezime:
# Obraz je spočítán. Posíláme do HDMI portu na monitor! (.flip) # Obraz je spočítán. Posíláme do HDMI portu na monitor! (.flip)
pygame.display.flip() pygame.display.flip()
hodiny.tick(60) hodiny.tick(60)
# PŘIDÁNO PRO WEB: Dáme prohlížeči šanci překreslit obrazovku
await asyncio.sleep(0)
pygame.quit() pygame.quit()
sys.exit() sys.exit()
# PŘIDÁNO PRO WEB: Spuštění asynchronní hry
asyncio.run(main())

8
pygame/07_had.py

@ -1,8 +1,10 @@
import pygame import pygame
import asyncio # PŘIDÁNO PRO WEB: importujeme asyncio pro neblokující smyčku
import random import random
import sys import sys
# Povinná příprava knihovny Pygame # Povinná příprava knihovny Pygame
async def main(): # PŘIDÁNO PRO WEB: Zabalíme celou hru do asynchronní funkce
pygame.init() pygame.init()
# --- NASTAVENÍ OKNA A MŘÍŽKY --- # --- NASTAVENÍ OKNA A MŘÍŽKY ---
@ -162,6 +164,8 @@ def hlavni_smycka():
# Omezení rychlosti # Omezení rychlosti
hodiny.tick(FPS) hodiny.tick(FPS)
# PŘIDÁNO PRO WEB: Dáme prohlížeči šanci překreslit obrazovku
await asyncio.sleep(0)
# Úplný spodek skriptu Pythonu # Úplný spodek skriptu Pythonu
# Tento 'if' ověřuje, jestli Python zapnul tento soubor napřímo jako první. # Tento 'if' ověřuje, jestli Python zapnul tento soubor napřímo jako první.
@ -172,3 +176,7 @@ if __name__ == "__main__":
# funkce se zničí, a tento while True ji opět vzkřísí z prachu k novému životu s čistým listem skóre. # funkce se zničí, a tento while True ji opět vzkřísí z prachu k novému životu s čistým listem skóre.
while True: while True:
hlavni_smycka() hlavni_smycka()
# PŘIDÁNO PRO WEB: Spuštění asynchronní hry
asyncio.run(main())
Loading…
Cancel
Save