72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
"""
|
||
Игра "Призрачный лабиринт: сокровища небесного замка"
|
||
|
||
Призрак в лабиринте, управление стрелками и WASD, выход Esc или Q.
|
||
Чтобы пройти уровень, нужно дойти до выхода, желательно собрав все монетки.
|
||
После прохождения уровня можно начать новый (кнопкой N) или выйти из игры.
|
||
Также можно управлять мышкой, перетаскивая героя (зажав ЛКМ) и кликая на надпись,
|
||
для начала новой игры.
|
||
Музыку можно заглушить (или вернуть), нажав на кнопку M.
|
||
|
||
Это универсальная версия. Подходит для сборки в виде WASM (для браузера) игры,
|
||
с помощью pygbag и для запуска напрямую.
|
||
|
||
pip install pygame pygbag
|
||
потом make (в Linux/WSL)
|
||
"""
|
||
|
||
import asyncio
|
||
import os
|
||
from contextlib import contextmanager
|
||
from game import Scene
|
||
from coords import Coords
|
||
|
||
import pygame
|
||
|
||
FPS = 30
|
||
|
||
|
||
@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)
|
||
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()
|
||
|
||
|
||
async def main():
|
||
pygame.init()
|
||
required_assets = [
|
||
"bg1k.png",
|
||
"ghost.png",
|
||
"brick.png",
|
||
"win.png",
|
||
"coin.png",
|
||
"bg.ogg",
|
||
]
|
||
with get_assets_direct(required_assets) as assets:
|
||
await game(assets)
|
||
|
||
|
||
asyncio.run(main())
|