py_stepik/pygame-wasm/phantomcastle/main.py

72 lines
2.4 KiB
Python
Raw Normal View History

2024-04-02 19:17:25 +00:00
"""
Игра "Призрачный лабиринт: сокровища небесного замка"
Призрак в лабиринте, управление стрелками и WASD, выход Esc или Q.
Чтобы пройти уровень, нужно дойти до выхода, желательно собрав все монетки.
После прохождения уровня можно начать новый (кнопкой N) или выйти из игры.
Также можно управлять мышкой, перетаскивая героя (зажав ЛКМ) и кликая на надпись,
для начала новой игры.
2024-04-06 19:50:23 +00:00
Музыку можно заглушить (или вернуть), нажав на кнопку M.
Это универсальная версия. Подходит для сборки в виде WASM (для браузера) игры,
с помощью pygbag и для запуска напрямую.
2024-04-02 19:17:25 +00:00
pip install pygame pygbag
потом make (в Linux/WSL)
"""
import asyncio
import os
from contextlib import contextmanager
from game import Scene
from coords import Coords
2024-04-02 19:17:25 +00:00
import pygame
FPS = 30
2024-04-02 19:17:25 +00:00
@contextmanager
def get_assets_direct(names):
"""передача файлов картинок 1 в 1"""
assets_dir = "assets"
yield {asset: os.path.join(assets_dir, asset) for asset in names}
async def game(assets):
screen_sz = Coords(1000, 1000)
maze_sz = Coords(6, 6)
coins_count = 10
pygame.display.set_caption("Призрачный лабиринт: сокровища небесного замка")
total_levels = 0
total_coins = 0
want_new_level = True
while want_new_level:
scene = Scene(assets, screen_sz, maze_sz, coins_count, FPS)
2024-04-02 19:17:25 +00:00
scene.total_levels, scene.total_coins = total_levels, total_coins
await scene.event_loop()
want_new_level = scene.want_new_level
total_levels = scene.total_levels
total_coins = scene.total_coins
pygame.quit()
2024-04-02 19:17:25 +00:00
async def main():
pygame.init()
required_assets = [
"bg1k.png",
"ghost.png",
"brick.png",
"win.png",
"coin.png",
2024-04-06 19:50:23 +00:00
"bg.ogg",
2024-04-02 19:17:25 +00:00
]
with get_assets_direct(required_assets) as assets:
await game(assets)
asyncio.run(main())