This commit is contained in:
Dmitry Belyaev 2024-03-27 16:55:45 +03:00
parent 51648955e9
commit 4ef2aea6ee

View File

@ -1,4 +1,22 @@
import graph """
Создание лабиринтов в игре
https://stepik.org/lesson/502494/step/3?unit=494196
Задача:
Сделайте "догонялку" в лабиринте. Придумайте дизайн лабиринта, рисунки для стенки и проходов. Через стенки Ваш герой не должен
передвигаться.
Решение:
Игра за призрака, нужно из входа в лабиринт "догнать" выход.
Управление стрелками и WASD, выход по Esc или Q.
Чтобы пройти игру, нужно дойти до выхода.
Картинки захардкожены прямо в скрипт.
Зависимости: graph pillow
Библиотека graph: https://kpolyakov.spb.ru/download/pygraph.zip
"""
from graph import * from graph import *
import PIL import PIL
import os import os
@ -13,13 +31,6 @@ import zlib
from random import randrange, choice from random import randrange, choice
consts = types.SimpleNamespace()
consts.VK_Q = 81
consts.VK_W = 87
consts.VK_A = 65
consts.VK_S = 83
consts.VK_D = 68
# объявление переменные для хранения картинок # объявление переменные для хранения картинок
HARDCODED_DATA: bytes HARDCODED_DATA: bytes
@ -120,7 +131,8 @@ def make_level(scene_sz, hard):
data["last_right"] = data["right"] data["last_right"] = data["right"]
# отрисовка движения # отрисовка движения
if data["hero_moved"]: if data["hero_moved"]:
moveObjectTo(data["hero"], *data["hero_pos"].transform(box_sz)) new_pos = data["hero_pos"].transform(box_sz)
moveObjectTo(data["hero"], *new_pos)
data["hero_moved"] = False data["hero_moved"] = False
# конец лабиринта|игры / победа # конец лабиринта|игры / победа
if data["finished"]: if data["finished"]:
@ -159,18 +171,18 @@ def move_hero(data, delta):
def keyPressed(event): def keyPressed(event):
delta = None delta = None
match event.keycode: match event.keysym:
case graph.VK_LEFT: case "Left" | "a":
delta = Point(-1, 0) delta = Point(-1, 0)
data["right"] = False data["right"] = False
case graph.VK_RIGHT: case "Right" | "d":
delta = Point(1, 0) delta = Point(1, 0)
data["right"] = True data["right"] = True
case graph.VK_UP: case "Up" | "w":
delta = Point(0, -1) delta = Point(0, -1)
case graph.VK_DOWN: case "Down" | "s":
delta = Point(0, 1) delta = Point(0, 1)
case consts.VK_Q | graph.VK_ESCAPE: case "Escape" | "q":
killTimer(data["update_timer"]) killTimer(data["update_timer"])
close() close()
if delta is not None: if delta is not None: