Adding binary file save/load functions
This commit is contained in:
parent
84ceb22e1e
commit
1022ba6f23
3 changed files with 115 additions and 21 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -4,3 +4,4 @@ PlayerBase_func.pybak
|
||||||
__pycache__
|
__pycache__
|
||||||
maze/__pycache__
|
maze/__pycache__
|
||||||
maze/modules/__pycache__
|
maze/modules/__pycache__
|
||||||
|
saves
|
|
@ -6,6 +6,7 @@ from collections import defaultdict
|
||||||
from itertools import tee
|
from itertools import tee
|
||||||
import maze.modules.PlayerBase_func as database
|
import maze.modules.PlayerBase_func as database
|
||||||
from .about import about
|
from .about import about
|
||||||
|
import maze.modules.maze_saveandload as sl
|
||||||
|
|
||||||
WON = 0
|
WON = 0
|
||||||
PAUSED = False
|
PAUSED = False
|
||||||
|
@ -240,18 +241,18 @@ def pathfinding_demo(maze, screen, start_ts):
|
||||||
global PAUSED
|
global PAUSED
|
||||||
if PAUSED:
|
if PAUSED:
|
||||||
start_paused_ts = time.time()
|
start_paused_ts = time.time()
|
||||||
screen.addstr(14, maxx - 17, "PAUSED")
|
screen.addstr(4, maxx - 17, "PAUSED")
|
||||||
screen.refresh()
|
screen.refresh()
|
||||||
while True:
|
while True:
|
||||||
pausekey = screen.getch()
|
pausekey = screen.getch()
|
||||||
if pausekey == ord("r"):
|
if pausekey == ord("r"):
|
||||||
end_paused_ts = time.time()
|
end_paused_ts = time.time()
|
||||||
screen.addstr(14, maxx - 17, " ")
|
screen.addstr(4, maxx - 17, " ")
|
||||||
PAUSED = False
|
PAUSED = False
|
||||||
break
|
break
|
||||||
pause_elapsed = int(end_paused_ts - start_paused_ts)
|
pause_elapsed = int(end_paused_ts - start_paused_ts)
|
||||||
actual_elapsed = str(int(time.time()-start_ts) - pause_elapsed)
|
actual_elapsed = str(int(time.time()-start_ts) - pause_elapsed)
|
||||||
screen.addstr(2, maxx - 17, actual_elapsed + " sec")
|
screen.addstr(5, maxx - 17, actual_elapsed + " sec")
|
||||||
screen.refresh()
|
screen.refresh()
|
||||||
key = screen.getch()
|
key = screen.getch()
|
||||||
# print("Max=",maxy, maxx, "Current=", current_coords[0], current_coords[1])
|
# print("Max=",maxy, maxx, "Current=", current_coords[0], current_coords[1])
|
||||||
|
@ -260,6 +261,8 @@ def pathfinding_demo(maze, screen, start_ts):
|
||||||
elif key == ord("p"):
|
elif key == ord("p"):
|
||||||
PAUSED = True
|
PAUSED = True
|
||||||
continue
|
continue
|
||||||
|
elif key == ord("m"):
|
||||||
|
sl.save(screen, maze, current_coords)
|
||||||
elif current_coords[0] == maxy - 3 and current_coords[1] == maxx - 27:
|
elif current_coords[0] == maxy - 3 and current_coords[1] == maxx - 27:
|
||||||
screen.clear()
|
screen.clear()
|
||||||
screen.refresh()
|
screen.refresh()
|
||||||
|
@ -399,10 +402,11 @@ def menu(screen):
|
||||||
screen.refresh()
|
screen.refresh()
|
||||||
screen.addstr(10, x // 2 - 2, "MENU")
|
screen.addstr(10, x // 2 - 2, "MENU")
|
||||||
screen.addstr(13, 0, "space - Play")
|
screen.addstr(13, 0, "space - Play")
|
||||||
screen.addstr(14, 0, "a - Account Settings")
|
screen.addstr(14, 0, "f - Load game from file")
|
||||||
screen.addstr(15, 0, "l - Leaderboard")
|
screen.addstr(15, 0, "a - Account Settings")
|
||||||
screen.addstr(16, 0, "b - About")
|
screen.addstr(16, 0, "l - Leaderboard")
|
||||||
screen.addstr(17, 0, "esc - Quit")
|
screen.addstr(17, 0, "x - About")
|
||||||
|
screen.addstr(18, 0, "esc - Quit")
|
||||||
while True:
|
while True:
|
||||||
key = screen.getch()
|
key = screen.getch()
|
||||||
if key == ord(" "):
|
if key == ord(" "):
|
||||||
|
@ -415,27 +419,43 @@ def menu(screen):
|
||||||
database.screenhandler(screen)
|
database.screenhandler(screen)
|
||||||
elif key == ord("l"):
|
elif key == ord("l"):
|
||||||
database.leaderboard(screen)
|
database.leaderboard(screen)
|
||||||
elif key == ord("b"):
|
elif key == ord("x"):
|
||||||
about(screen)
|
about(screen)
|
||||||
|
elif key == ord("f"):
|
||||||
|
present = sl.check()
|
||||||
|
if present:
|
||||||
|
maze = sl.load(screen)
|
||||||
|
if maze:
|
||||||
|
play(screen, maze[0])
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
screen.addstr(20, 0, "No saved mazes present.")
|
||||||
|
while True:
|
||||||
|
key2 = screen.getch()
|
||||||
|
if key2 == 10:
|
||||||
|
screen.addstr(20, 0, " " * 23)
|
||||||
|
break
|
||||||
|
|
||||||
|
def play(screen, loadedmaze = None):
|
||||||
def play(screen):
|
|
||||||
came_out = 0
|
|
||||||
start_ts = 0
|
|
||||||
end_ts = 0
|
|
||||||
y, x = screen.getmaxyx()
|
y, x = screen.getmaxyx()
|
||||||
height, width = int((y - 2) / 2), int((x - 2) / 2)
|
height, width = int((y - 2) / 2), int((x - 2) / 2)
|
||||||
screen.clear()
|
screen.clear()
|
||||||
maze = Maze(height, width)
|
if not loadedmaze:
|
||||||
|
maze = Maze(height, width)
|
||||||
|
else:
|
||||||
|
maze = loadedmaze
|
||||||
screen.addstr(0, 0, str(maze))
|
screen.addstr(0, 0, str(maze))
|
||||||
screen.refresh()
|
screen.refresh()
|
||||||
screen.addstr(0, x - 23, "LABYRINTH")
|
screen.addstr(0, x - 23, "LABYRINTH")
|
||||||
screen.addstr(2, x - 23, "Time:")
|
screen.addstr(5, x - 23, "Time:")
|
||||||
screen.addstr(5, x - 23, "esc - Quit")
|
screen.addstr(8, x - 23, "esc - Quit")
|
||||||
screen.addstr(6, x - 23, "Right - Move right")
|
screen.addstr(9, x - 23, "Up - Move up")
|
||||||
screen.addstr(7, x - 23, "Left - Move left")
|
screen.addstr(10, x - 23, "Down - Move down")
|
||||||
screen.addstr(8, x - 23, "Up - Move up")
|
screen.addstr(11, x - 23, "Left - Move left")
|
||||||
screen.addstr(9, x - 23, "Down - Move down")
|
screen.addstr(12, x - 23, "Right - Move right")
|
||||||
|
screen.addstr(13, x - 23, "p - Pause")
|
||||||
|
screen.addstr(14, x - 23, "r - Resume")
|
||||||
|
screen.addstr(15, x - 23, "m - save")
|
||||||
screen.refresh()
|
screen.refresh()
|
||||||
start_ts = time.time()
|
start_ts = time.time()
|
||||||
pathfinding_demo(maze, screen, start_ts)
|
pathfinding_demo(maze, screen, start_ts)
|
||||||
|
|
73
maze/modules/maze_saveandload.py
Normal file
73
maze/modules/maze_saveandload.py
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
import os
|
||||||
|
import pickle
|
||||||
|
from .PlayerBase_func import Input, screenwipe
|
||||||
|
import maze.modules.maze as m
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
|
def save(screen, maze, coords):
|
||||||
|
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:
|
||||||
|
num = int(((names[-1].replace('.maze', '')).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)
|
||||||
|
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):
|
||||||
|
y, x = screen.getmaxyx()
|
||||||
|
screen.clear()
|
||||||
|
screen.refresh()
|
||||||
|
screen.addstr(2, x // 2 - 4, "LOAD MAZE")
|
||||||
|
mazes = os.listdir("saves")
|
||||||
|
sy = 4
|
||||||
|
for i in range(len(mazes)):
|
||||||
|
screen.addstr(sy, 10, f"{str(i + 1)}. Maze {((mazes[i].replace('.maze', '')).split('_'))[1]} - {((mazes[i].replace('.maze', '')).split('_'))[2]}")
|
||||||
|
sy += 1
|
||||||
|
while True:
|
||||||
|
screen.addstr(y // 2 + 5, 0, "Enter preferred maze number: ")
|
||||||
|
num = Input(y // 2 + 5, 30, 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 - 1, 0, "Entered maze doesn't exist. Please try again.")
|
||||||
|
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)
|
||||||
|
f.close()
|
||||||
|
return maze, coords
|
Loading…
Reference in a new issue