2024-04-02 19:17:25 +00:00
|
|
|
|
"""
|
|
|
|
|
Игра "Призрачный лабиринт: сокровища небесного замка"
|
2024-04-06 10:30:07 +00:00
|
|
|
|
|
|
|
|
|
Призрак в лабиринте, управление стрелками и WASD, выход Esc или Q.
|
|
|
|
|
Чтобы пройти уровень, нужно дойти до выхода, желательно собрав все монетки.
|
|
|
|
|
После прохождения уровня можно начать новый (кнопкой N) или выйти из игры.
|
|
|
|
|
Также можно управлять мышкой, перетаскивая героя (зажав ЛКМ) и кликая на надпись,
|
|
|
|
|
для начала новой игры.
|
2024-04-06 19:50:23 +00:00
|
|
|
|
Музыку можно заглушить (или вернуть), нажав на кнопку M.
|
2024-04-06 10:30:07 +00:00
|
|
|
|
|
|
|
|
|
Это универсальная версия. Подходит для сборки в виде 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
|
2024-04-06 10:30:07 +00:00
|
|
|
|
from game import Scene
|
|
|
|
|
from coords import Coords
|
2024-04-02 19:17:25 +00:00
|
|
|
|
|
|
|
|
|
import pygame
|
|
|
|
|
|
2024-04-06 10:30:07 +00:00
|
|
|
|
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:
|
2024-04-06 10:30:07 +00:00
|
|
|
|
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
|
|
|
|
|
|
2024-04-06 10:30:07 +00:00
|
|
|
|
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())
|