changeset 186:275f0be6946c

Reincarnating Snakes
author Neil Muller <drnlmuller@gmail.com>
date Wed, 14 Sep 2011 16:28:03 +0200
parents b93845471311
children 3449b51ae944
files mamba/level.py mamba/snake.py mamba/widgets/game.py mamba/world.py
diffstat 4 files changed, 23 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/level.py	Wed Sep 14 16:26:52 2011 +0200
+++ b/mamba/level.py	Wed Sep 14 16:28:03 2011 +0200
@@ -206,3 +206,8 @@
             if tile:
                 orientation = self.get_tile_orientation(tile)
                 tile.use_variant(*orientation)
+
+    def restart(self):
+        """Reset the level state"""
+        self.setup_tiles(self.tiles_ascii)
+        self.make_background()
--- a/mamba/snake.py	Wed Sep 14 16:26:52 2011 +0200
+++ b/mamba/snake.py	Wed Sep 14 16:28:03 2011 +0200
@@ -5,6 +5,7 @@
 
 from mamba.constants import TILE_SIZE
 from mamba.sprites import BaseSprite
+from mamba.engine import SnakeDiedEvent
 from mamba import mutators
 
 
@@ -60,6 +61,8 @@
 
     def crash(self):
         print "I'm doomed!"
+        SnakeDiedEvent.post()
+        print 'event posted'
 
     def mutate(self, mutation):
         self.mutation = mutation
--- a/mamba/widgets/game.py	Wed Sep 14 16:26:52 2011 +0200
+++ b/mamba/widgets/game.py	Wed Sep 14 16:28:03 2011 +0200
@@ -5,6 +5,7 @@
 
 from mamba.widgets.base import Widget
 from mamba.snake import Snake
+from mamba.engine import SnakeDiedEvent
 
 
 class GameWidget(Widget):
@@ -28,7 +29,15 @@
             func, args = self.actions[ev.key]
             func(*args)
             return True
+        elif SnakeDiedEvent.matches(ev):
+            self.snake_died()
+            return True
 
     def draw(self, surface):
         self.world.update()
         self.world.draw(surface)
+
+    def snake_died(self):
+        # Restart
+        self.world.restart()
+        self.actions = self.create_action_map()
--- a/mamba/world.py	Wed Sep 14 16:26:52 2011 +0200
+++ b/mamba/world.py	Wed Sep 14 16:28:03 2011 +0200
@@ -32,3 +32,9 @@
         tile = self.level.get_tile(segment.tile_pos)
         if tile is not None and tile.alive:
             tile.interact(self.snake, segment)
+
+    def restart(self):
+        self.level.restart()
+        tile_pos, orientation = self.level.get_entry()
+        self.snake = Snake(tile_pos, orientation)
+        self._prev = None