[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] map format



I use a map serialization format like this (works best with a fixed width font):

carteString = '''\
0 1 2 3 4 5 . . . . . . . . . . . . . . . . . . _ . . . _ . . . _ . 3 . . . . . . . 3
. % . . . + . . . ^ . . . . . . . ~ . . . . . % . . . _ . ! . ^ . 2 . . . . ~ ! . 2
. % . . . $ . . . _ . . . . . . . # ! . . . . $ . . . + . ~ . ^ . 1 . = = = . ~ . 1
. _ . . . ^ . . . _ . ~ . . . . . . ~ . . . . _ . . . _ . . . _ . 0 . . . . . . . 0
. _ . . . _ . . . _ . . . . . . . . . . . . . . . . . . 0 1 2 3 4 5 '''


symbolToTerrain = {
   '_' : Plains,
   '@' : Fertile,
   '+' : Desert,
   '^' : Mountains,
   '*' : Hills,
   '$' : Forest,
   '%' : Water,
   '~' : River,
   '&' : WideRiver,
   '=' : Roads,
   '#' : Bridge,
   '!' : Cliff,
}


The center of each hex represents it's terrain, and the center of each "hex-side" represents edge terrain (e.g. roads). I also use the 3 characters above and below each hex as labels that work as shorthand for locations, so that serialization code placing objects into the map can be more easily read and edited. This also allows naming collections of hexes to create provinces, etc.


Following is a more concrete serialization that I used to generate the strategic map seen in this screenshot:
http://brass-golem.com/wp-content/uploads/2006/03/0216-154851_screen1.jpg


-Jasper

carteString = '''\
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % . . . % . . . % . . . % . . . % . . . % . . . % . . . % . . . % . . . % . 9 . . . . . . . . . . . . . . . . . . . . . 9
. % . . . % . . . % . . . % . . . % . . . % . . . % . . . % . . . % . . . % . . . . . . . . . c3c . . . . . . . . r4c . . r4b . . . . . . . . ^ . . . % . . . $ . . . % . . . % . . . % . . . _ . . . _ . . . _ . . . % . 8 . . p3b . . . . p3a . . . r3a . . . . . p4a . . p4a . . p4a . . . 8
. % . . . % . . . % . . . $ . . . + . . . % . . . _ . . . $ . . . _ . . . _ . . . . . . . . . r3b . p3a . r3e . p3a . . . . p4a . . p4a . c4c . p4a . . p4b . . . . . ^ . . . $ . . . _ . ~ . + . . . % . . . % . . . $ . . . $ . . . _ . . . % . 7 . . p3b . r3d . p3b . . p3a ~ ~ p3a . . . . . . p4a . r4a . p4a . . p4b . r4e . . 7
. % . . . ^ . ~ . $ . ~ . + . ~ . + . . . % . . . $ . . . ^ . . . $ . . . _ . . . . . ~ p3b ~ ~ p3b ~ . p3a . c3a ~ p3a . . . c4a . p4a . . p4a . . p4b . . p4b . . . . . ^ . ~ . ^ . ~ . $ . . . + . . . % . . . _ . . . $ . . . ^ . . . $ . . . % . 6 . . p3b . . p3b . . p3a . . p3a . . . . p4a = . p4a . . p4b . . p4b . . . 6
. % . . . ^ . . . ^ . . . + . . . % . . . % . . . $ . . . ^ . . . $ . . . _ . . . . . c3d . p3b . c3b . p3b . r3c . p3a . . . . . . p4a . . p4a . c4b . p4b . . p4b . . . . . _ . . . _ . . . _ . . . % . . . % . . . % . = . ^ . . . $ . . . $ . . . % . 5 . . p3b . . p3b . . p3a . . . . . . . t1 . p4a . r4d . p4b . . p4b . . . 5
. % . . . % . . . _ . . . % . . . % . . . % . . . * . . . ^ . . . $ . . . _ . . . . . . . . p3b . . . . . r2c . . c1a = p1a . . p4b . . p4b . . p4b . . . . . % . . . % . . . % . . . % . . . _ . . . @ . = . ^ . ! . * . . . _ . . . % . 4 . . . . . . . . . c2a = p2a = & p1a = r1b . p1a ! ! p4b . . p4b . c4d . . 4
. % . . . % . . . % . . . + . . . _ . . . @ . & . @ . . . * . ! . _ . . . _ . . . . . . . . . . . . p2a . . p2a = & p1a = r1c = p1a = ! p4b . . p4b . . . . . % . . . % . . . % . . . % . = . $ . . . @ . # . @ . . . $ . ! . $ . . . % . 3 . . . . . c2b . . . . r2b . p2a . . p2a = ~ p1a . . p1a = ! p4b . . . 3
. % . . . % . . . $ . . . % . . . _ . . . ^ . . . @ . ~ . % . . . $ . ! . _ . . . . . . . = p2b = . . c2c = p2a . . p2a . . p1a ! . . . p1a . r1a ! p4b . . . . . % . . . $ . ~ . $ . . . _ . . . ^ . . . ^ . = . @ . . . % . = . $ . . . % . 2 . . . = p2b ~ ~ p2b = = p2a . r2a . p2a . r1d . p1b . ! p1a . . . . p1a ! . . 2
. % . . . $ . ~ . ^ . ~ . ^ . . . ^ . . . ^ . . . * . . . % . . . $ . . . _ . . . . . r2e ~ p2b ~ r2d . p2b . ~ p2b . . p2a . . p1b . = p1b ! t3 . . . p1a . . p1a . . . . . $ . # . ^ . . . ^ . ~ . ^ . . . + . . . + . = . _ . . . % . = . _ . . . % . 1 . . p2b . c2d . p2b . . p2b . . p2a . . p1b . c1b = p1b = ! p1a . . . c1c . p1a . . . 1
. % . . . $ . . . $ . . . ^ . . . % . . . + . . . + . ! . _ . . . _ . ~ . _ . . . . . . p2b . . p2b . . p2b . . . . p1b . t2 . p1b = ! p1a . ~ p1a ~ ~ p1a . . . . . % . . . % . . . % . . . % . . . % . . . + . . . _ . ! . _ . # . _ . . . % . 0 . . . . . . . . . . . . p1b . r1e . p1b = c1d ! p1a . . p1a ~ . . 0
. % . . . % . . . % . . . % . . . % . . . + . . . + . . . _ . . . _ . . . _ . . . . . . . . . . . . . . p1b . . p1b . . p1b = . p1a . . p1a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 '''



spotter . wrote:
Hey everybody,

I am in the process of trying to make a file format for maps. I am
doing this right now with this:

       <Test_Map,the_author,the_date,version_number>
    <10,5>   # the width and height
    <1> # layers
    000,001,002,001,002,002,001,000,001,002,
    000,001.002,002,002,002,001,000,001,002,
    000,001.002,002,002,002,001,000,001,002,
    000,001.002,002,002,002,001,000,001,002,
    000,001.002,002,002,002,001,000,001,002
    <1>

Another way that might be easier to read into a file is to Have two
files. One is called mapname.map and the other file will be called
mapname.meta
The meta file will have the info like name, author, date, version, and
the width and height.
The other file will have the actual map data in it. This method will be slower,
since it involves opening, parsing, and closing two files.


The second method will be easier to read in, but will affect performance.
How do all of you implement maps? Do you use regular expressions or
simple search a string ?


Thanks, spot