changeset 7:82d43295ba98

Tweak forest generation
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Mon, 01 Apr 2013 23:15:45 +0200
parents c98a36b9393e
children cf0dd3ae6b21
files rrr/level.py
diffstat 1 files changed, 58 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/rrr/level.py	Mon Apr 01 22:01:36 2013 +0200
+++ b/rrr/level.py	Mon Apr 01 23:15:45 2013 +0200
@@ -9,13 +9,13 @@
     {
         'name': 'invalid',
         'symbol': '?',
-        'color': 'magenta',
+        'color': 'pink',
         'opaque': True,
         'opacity': 1.0,
         'block': True,
     },
     {
-        'name': 'ground',
+        'name': 'floor',
         'symbol': '.',
         'color': 'black',
         'opaque': False,
@@ -25,7 +25,7 @@
     {
         'name': 'ground',
         'symbol': '.',
-        'color': 'gray',
+        'color': 'brown',
         'opaque': False,
         'opacity': 0.0,
         'block': False,
@@ -39,6 +39,56 @@
         'block': False,
     },
     {
+        'name': 'grass',
+        'symbol': ',',
+        'color': 'green',
+        'opacity': 0.0,
+        'block': False,
+    },
+    {
+        'name': 'weeds',
+        'symbol': ';',
+        'color': 'green',
+        'opacity': 0.125,
+        'block': False,
+    },
+    {
+        'name': 'bush',
+        'symbol': '+',
+        'color': 'green',
+        'opacity': 0.25,
+        'block': False,
+    },
+    {
+        'name': 'large bush',
+        'symbol': '+',
+        'color': 'lime',
+        'opacity': 0.33,
+        'block': False,
+    },
+    {
+        'name': 'tree',
+        'symbol': '*',
+        'color': 'green',
+        'opacity': 0.5,
+        'block': True,
+    },
+    {
+        'name': 'large tree',
+        'symbol': '*',
+        'color': 'lime',
+        'opacity': 0.75,
+        'block': True,
+    },
+    {
+        'name': 'jungle',
+        'symbol': '#',
+        'color': 'lime',
+        'opaque': True,
+        'opacity': 1.0,
+        'block': True,
+    },
+    {
         'name': 'wall',
         'symbol': '#',
         'color': 'gray',
@@ -54,18 +104,20 @@
         self.width = width
         self.height = height
         self.explored = set()
-        self.map = self.fractal_fill([1, 1, 2, 2, 2, 3, 3, 4, 4])
+        self.map = self.fractal_fill([
+            1, 2, 2, 2, 4, 5, 6, 7, 8, 9, 10, 10
+        ])
 
     def fractal_fill(self, gradient):
         max_power = int(math.ceil(math.log(max(self.width, self.height), 2)))
         frac = [[0] * 2**max_power for y in xrange(2**max_power)]
-        frac[0][0] = 4
+        frac[0][0] = len(gradient) // 2
         for i in xrange(max_power + 1):
             size = 2 ** i
             for y in xrange(size - 1, -1, -1):
                 for x in xrange(size - 1, -1, -1):
                     frac[y][x] = max(0, min(len(gradient) - 1,
-                        frac[y // 2][x // 2] + random.choice([-1, 0, 1])
+                        frac[y // 2][x // 2] + random.choice([-1, 0, 0, 1])
                     ))
         return [
             [gradient[cell] for cell in row[:self.width]]