laneya

multiplayer roguelike game
git clone https://git.ce9e.org/laneya.git

commit
5490f535860864243773c5e37e9ce63c382be705
parent
3e541e7818edd786a8da8662b38b4b405664bc32
Author
Tobias Bengfort <tobias.bengfort@gmx.net>
Date
2014-11-02 08:50
allow to persist generated maps

Diffstat

M laneya/map.py 25 +++++++++++++++++++++++--

1 files changed, 23 insertions, 2 deletions


diff --git a/laneya/map.py b/laneya/map.py

@@ -1,3 +1,5 @@
   -1     1 import os
   -1     2 import json
    1     3 import random
    2     4 
    3     5 
@@ -8,10 +10,11 @@ class MapManager(object):
    8    10     coordinates. At any combination of coordinates, there can be only one map.
    9    11 
   10    12     """
   11    -1     def __init__(self, server, width=60, height=40):
   -1    13     def __init__(self, server, width=60, height=40, persist=True):
   12    14         self.server = server
   13    15         self.width = width
   14    16         self.height = height
   -1    17         self.persist = persist
   15    18         self.store = {}
   16    19 
   17    20     def generate(self, X, Y, Z):
@@ -93,9 +96,19 @@ class MapManager(object):
   93    96         """Get a map.  If it does not exist yet, generate one."""
   94    97 
   95    98         key = '%i:%i:%i' % (X, Y, Z)
   -1    99         filename = 'maps/%s.map' % key
   96   100 
   97   101         if key not in self.store:
   98    -1             _map = self.generate(X, Y, Z)
   -1   102             if not os.path.exists('maps'):
   -1   103                 os.mkdir('maps')
   -1   104 
   -1   105             if os.path.exists(filename):
   -1   106                 _map = Map(self.server, self.width, self.height)
   -1   107                 _map.load(filename)
   -1   108             else:
   -1   109                 _map = self.generate(X, Y, Z)
   -1   110                 _map.dump(filename)
   -1   111 
   99   112             self.store[key] = _map
  100   113 
  101   114         return self.store[key]
@@ -162,6 +175,14 @@ class Map(object):
  162   175     def decode(self, data):
  163   176         self.floor_layer = data['floor_layer']
  164   177 
   -1   178     def dump(self, filename):
   -1   179         with open(filename, 'w') as fh:
   -1   180             return json.dump(self.encode(), fh)
   -1   181 
   -1   182     def load(self, filename):
   -1   183         with open(filename) as fh:
   -1   184             self.decode(json.load(fh))
   -1   185 
  165   186 
  166   187 class Sprite(object):
  167   188     """Simple base class for visible game objects."""