96 lines
2.9 KiB
Python
96 lines
2.9 KiB
Python
import curses
|
|
import os
|
|
import pickle
|
|
from time import sleep
|
|
|
|
import maze.menu as m
|
|
|
|
from .PlayerBase_func import input, screenwipe
|
|
|
|
|
|
def save(screen, maze, coords, elapsed):
|
|
"""Saves the maze to a binary file"""
|
|
y, x = screen.getmaxyx()
|
|
if "saves" not in os.listdir():
|
|
os.mkdir("saves")
|
|
names = os.listdir("saves")
|
|
screen.addstr(17, x - 17, "Enter filename: ")
|
|
name = input(18, x - 17, screen)
|
|
if names:
|
|
for i in range(len(names)):
|
|
names[i] = names[i].replace(".maze", "")
|
|
for i in range(len(names)):
|
|
for j in range(len(names) - i - 1):
|
|
if int(names[j].split("_")[1]) > int(names[j + 1].split("_")[1]):
|
|
names[j], names[j + 1] = names[j + 1], names[j]
|
|
num = int(names[-1].split("_")[1]) + 1
|
|
if not name:
|
|
name = "default"
|
|
filename = f"maze_{str(num)}_{name}.maze"
|
|
else:
|
|
filename = f"maze_0_{name}.maze"
|
|
f = open("saves//" + filename, "wb")
|
|
pickle.dump(maze, f)
|
|
pickle.dump(coords, f)
|
|
pickle.dump(elapsed, f)
|
|
f.close()
|
|
screen.addstr(19, x - 17, "Maze saved!")
|
|
screen.refresh()
|
|
sleep(3)
|
|
screen.addstr(17, x - 17, " " * 16)
|
|
screen.addstr(18, x - 17, " " * 16)
|
|
screen.addstr(19, x - 17, " " * 12)
|
|
screen.refresh()
|
|
|
|
|
|
def check():
|
|
if len(os.listdir("saves")):
|
|
return True
|
|
|
|
|
|
def load(screen):
|
|
"""Loads a maze and returns maze, coords and time"""
|
|
y, x = screen.getmaxyx()
|
|
screen.clear()
|
|
screen.refresh()
|
|
screen.border()
|
|
screen.addstr(2, x // 2 - 4, "LOAD MAZE", curses.color_pair(3) | curses.A_BOLD)
|
|
mazes = os.listdir("saves")
|
|
sy = 5
|
|
for i in range(len(mazes)):
|
|
msg = f"{str(i + 1)}. Maze {((mazes[i].replace('.maze', '')).split('_'))[1]} - {((mazes[i].replace('.maze', '')).split('_'))[2]}"
|
|
screen.addstr(sy, x // 2 - len(msg) // 2, msg)
|
|
sy += 1
|
|
while True:
|
|
screen.addstr(y // 2 + 5, x // 2 - 15, "Enter preferred maze number: ")
|
|
num = input(y // 2 + 5, x // 2 + 14, screen)
|
|
if num and type(int(num)) == type(0):
|
|
num = int(num) - 1
|
|
else:
|
|
screen.clear()
|
|
screen.refresh()
|
|
m.menu(screen)
|
|
return
|
|
if num < len(mazes):
|
|
break
|
|
else:
|
|
screen.addstr(
|
|
y - 5,
|
|
x // 2 - 23,
|
|
"Entered maze doesn't exist. Please try again.",
|
|
curses.color_pair(1),
|
|
)
|
|
while True:
|
|
key = screen.getch()
|
|
if key == 10:
|
|
screen.addstr(y - 1, 0, " " * (x - 5))
|
|
screenwipe(screen, 30, y // 2 + 5)
|
|
screen.refresh()
|
|
break
|
|
continue
|
|
f = open("saves//" + mazes[num], "rb")
|
|
maze = pickle.load(f)
|
|
coords = pickle.load(f)
|
|
elapsed = pickle.load(f)
|
|
f.close()
|
|
return maze, coords, elapsed
|