Code: Select all
# Maze screen
screen game_field(board, next_label):
# Keyboard input
if board.playerx != board.xfinish or board.playery != board.yfinish:
key "focus_left" action If( board.board[y][max(x-1, 0)] != 0, [SetVariable("x", max(x-2, 0)), board.set_player(x,y)], NullAction() )
key "focus_right" action If( board.board[y][min(x+1, board.depth * 2 - 2)] != 0, [SetVariable("x", min(x+2, board.depth * 2 - 2)), board.set_player(x,y)], NullAction() )
key "focus_up" action If( board.board[max(y-1, 0)][x] != 0, [SetVariable("y", max(y-2, 0)), board.set_player(x,y)], NullAction() )
key "focus_down" action If( board.board[min(y+1, board.depth * 2 - 2)][x] != 0, [SetVariable("y", min(y+2, board.depth * 2 - 2)), board.set_player(x,y)], NullAction() )
key "dismiss" action NullAction()
# Generate maze via grid
vbox spacing 0:
align align_maze
#at maze_pos
for row in range(len(board.board)):
hbox spacing 0:
for col in range(len(board.board)):
if row % 2 == 0 and col % 2 == 0:
if row == y and col == x:
add "player"
elif row == board.yfinish and col == board.xfinish:
add "finish"
else:
add "path"
elif row % 2 == 1 and col % 2 == 0:
if board.board[row][col] == 1:
add "long_path"
else:
add "long_wall"
elif row % 2 == 0 and col % 2 == 1:
if board.board[row][col] == 1:
add "tall_path"
else:
add "tall_wall"
elif row % 2 == 1 and col % 2 == 1:
if board.board[row][col] == 1:
add "edge_path"
else:
add "edge_wall"
else:
null
add "fov":
at maze_pos(board)
xalign 0.5
yalign 0.5
ypos (board.yoffs + 25 + ((board.playery+1)//2) * 50 + (board.playery//2) * 10)
xpos (board.xoffs + 25 + ((board.playerx+1)//2) * 50 + (board.playerx//2) * 10)
# If player is at the maze finish coordinates, then jump out of the game to the next label in the script
if board.playerx == board.xfinish and board.playery == board.yfinish:
timer 0.01 action Jump(next_label) repeat False