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