WIP: prototype for saves
This commit is contained in:
parent
1c34d22467
commit
56cde5623e
35
prototypes/saves_prototypes/README
Normal file
35
prototypes/saves_prototypes/README
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# Prototypes Saves files
|
||||||
|
|
||||||
|
This prototype is aiming at defining a structure for saving "map" files.
|
||||||
|
|
||||||
|
The objective is to have it quite modular so that if we want to add more level we can easily do so.
|
||||||
|
|
||||||
|
Another objective is that theses files are as small as possible without missing information.
|
||||||
|
|
||||||
|
## What needs to be saved
|
||||||
|
|
||||||
|
We need to have the shape of the map itself and the shape and number of each pieces it is a minimum
|
||||||
|
|
||||||
|
I also want to define an header (and maybe a footer) to the file so that it is easier to recover if any corruption occure to a drive
|
||||||
|
(we all been trough that)
|
||||||
|
|
||||||
|
## Method
|
||||||
|
|
||||||
|
I would like to save a file as byte so I need to have a bitewise parser. This is the objective of this prototype
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
The map file should have the following structure:
|
||||||
|
- The file should be named <map_name>.shmap (where shmap stand for shape map)
|
||||||
|
- The file should start with the ascii characters S, M then S (0x534D53)
|
||||||
|
- The file should end with the ascii characters S, M then E (0x534D45)
|
||||||
|
- First we define the map shape
|
||||||
|
1) the map should always be a square. the lenght of this square will be the first octet after the header.
|
||||||
|
2) next we have s x s (where s is the size of the square) bits (1/0) where
|
||||||
|
- 0 represent an empty cell (where we can place a shape)
|
||||||
|
- 1 represent a filled cell (where we can't place a shape)
|
||||||
|
- Next we define the amount of shape for this level with a number on one octet
|
||||||
|
- Next we define each shapes with the same method defined previously for a map
|
||||||
|
|
||||||
|
With all that we should have all that is needed for a level to work... further information could be added later this is just a prototype atm
|
||||||
|
|
56
prototypes/saves_prototypes/parser.py
Normal file
56
prototypes/saves_prototypes/parser.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
class MapNotSquareException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class PieceNotSquareException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class save_Parser:
|
||||||
|
def __init__(self, filename:str ):
|
||||||
|
self.filename = filename
|
||||||
|
self.map_shape = [[0]]
|
||||||
|
self.pieces = list()
|
||||||
|
|
||||||
|
def define_map(self, map_shape):
|
||||||
|
size = len(map_shape)
|
||||||
|
for row in map_shape:
|
||||||
|
if size != len(row):
|
||||||
|
raise MapNotSquareException
|
||||||
|
self.map_shape = map_shape
|
||||||
|
|
||||||
|
def add_piece(self, piece_shape):
|
||||||
|
size = len(piece_shape)
|
||||||
|
for row in piece_shape:
|
||||||
|
if size != len(row):
|
||||||
|
raise PieceNotSquareException
|
||||||
|
self.pieces.append(piece_shape)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.map_shape)
|
||||||
|
|
||||||
|
def shape_to_bytes(self, shape):
|
||||||
|
bytes_ammount = len(shape) // 8
|
||||||
|
bytes_trash = len(shape) % 8
|
||||||
|
tray = 0
|
||||||
|
|
||||||
|
def load(self):
|
||||||
|
"""
|
||||||
|
load the file and prepare to parse informations
|
||||||
|
"""
|
||||||
|
|
||||||
|
def save(self):
|
||||||
|
"""
|
||||||
|
save parsed info to the file
|
||||||
|
"""
|
||||||
|
save_data = b''
|
||||||
|
save_data += b'SMS'
|
||||||
|
save_data += bytes(len(map_shape))
|
||||||
|
save_data += shape_to_bytes(self.map_shape)
|
||||||
|
save_data += bytes()
|
||||||
|
save_data += b'SME'
|
||||||
|
with open(self.filename, mode='bw') as file:
|
||||||
|
file.write(save_data)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
p = save_Parser('test.map')
|
||||||
|
p.define_map([[0,1],[0,1]])
|
||||||
|
p.save()
|
1
prototypes/saves_prototypes/test.map
Normal file
1
prototypes/saves_prototypes/test.map
Normal file
@ -0,0 +1 @@
|
|||||||
|
SMSSME
|
Loading…
Reference in New Issue
Block a user