refactor maze.py
This commit is contained in:
parent
cc5afff252
commit
6ed6aed65f
@ -98,8 +98,8 @@ data = {
|
||||
"hero_pos": Point(0, 0),
|
||||
"finished": False,
|
||||
"hero_moved": False,
|
||||
"right": False,
|
||||
"last_right": False,
|
||||
"right": True,
|
||||
"last_right": True,
|
||||
"hero_img_left": None,
|
||||
"hero_img_right": None,
|
||||
"hero": None,
|
||||
@ -115,14 +115,25 @@ def make_level(scene_sz, hard):
|
||||
maze_sz = Point(len(data["maze"][0]), len(data["maze"]))
|
||||
box_sz = scene_sz // maze_sz
|
||||
|
||||
# установка начальной позиции
|
||||
data["hero_pos"] = find_start(data)
|
||||
data["hero_img_right"] = PIL.ImageTk.PhotoImage(
|
||||
data["hero_img_right"].resize(box_sz)
|
||||
)
|
||||
data["hero_img_left"] = PIL.ImageTk.PhotoImage(data["hero_img_left"].resize(box_sz))
|
||||
changeProperty(data["hero"], image=data["hero_img_right"])
|
||||
data["hero_moved"] = True
|
||||
|
||||
# загрузка изображения героя
|
||||
hero_img = PIL.Image.open(hard["assets/ghost.png"])
|
||||
# проверяем и корректируем размер изображения
|
||||
if hero_img.size != box_sz:
|
||||
hero_img = hero_img.resize(box_sz)
|
||||
hero_img.save(hard["assets/ghost.png"])
|
||||
# создаём зеркальную копию
|
||||
hero_img_right = hero_img.transpose(Image.FLIP_LEFT_RIGHT)
|
||||
# записываем изображения
|
||||
data["hero_img_right"] = PIL.ImageTk.PhotoImage(hero_img_right)
|
||||
data["hero_img_left"] = PIL.ImageTk.PhotoImage(hero_img)
|
||||
data["hero"] = image(0, 0, hard["assets/ghost.png"])
|
||||
# сразу поворачиваем героя на право
|
||||
changeProperty(data["hero"], image=data["hero_img_right"])
|
||||
|
||||
# отрисовка стен
|
||||
brick_img = PIL.Image.open(hard["assets/brick.png"])
|
||||
if brick_img.size != box_sz:
|
||||
@ -166,6 +177,7 @@ def find_start(data):
|
||||
def move_hero(data, delta):
|
||||
"""проверка и выполнение движения героя в лабиринте"""
|
||||
new_pos = data["hero_pos"] + delta
|
||||
# проерка границ карты
|
||||
if (
|
||||
new_pos.x < 0
|
||||
or new_pos.y < 0
|
||||
@ -173,10 +185,13 @@ def move_hero(data, delta):
|
||||
or new_pos.y >= len(data["maze"][0])
|
||||
):
|
||||
return
|
||||
# проверка на наличие стен
|
||||
if data["maze"][new_pos.y][new_pos.x] > 0:
|
||||
return
|
||||
# применение новой позиции
|
||||
data["hero_pos"] = new_pos
|
||||
data["hero_moved"] = True
|
||||
# проверка на конец лабиринта
|
||||
if new_pos.x == len(data["maze"]) - 1:
|
||||
data["finished"] = True
|
||||
|
||||
@ -189,6 +204,7 @@ def keyPressed(event):
|
||||
data["right"] = False
|
||||
case "Right" | "d":
|
||||
dx = 1
|
||||
data["right"] = True
|
||||
case "Up" | "w":
|
||||
dy = -1
|
||||
case "Down" | "s":
|
||||
@ -271,22 +287,19 @@ def maze_gen(row=4, col=4):
|
||||
|
||||
|
||||
def app(hard):
|
||||
# рисуем фон
|
||||
scene_sz = Point(1000, 1000)
|
||||
canvasSize(*scene_sz)
|
||||
|
||||
# рисуем фон
|
||||
# with hardcoded_as_tmp(hardcoded_bg) as bg_filename:
|
||||
image(0, 0, hard["assets/bg1k.png"])
|
||||
|
||||
hero_img = PIL.Image.open(hard["assets/ghost.png"])
|
||||
data["hero_img_left"] = hero_img
|
||||
data["hero_img_right"] = hero_img.transpose(Image.FLIP_LEFT_RIGHT)
|
||||
data["hero"] = image(0, 0, hard["assets/ghost.png"])
|
||||
|
||||
# создаём уровень
|
||||
make_level(scene_sz, hard)
|
||||
|
||||
# цепляем обработчики событий
|
||||
data["update_timer"] = onTimer(update, 40)
|
||||
onKey(keyPressed)
|
||||
|
||||
# запускаем
|
||||
run()
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user