# HG changeset patch # User Neil Muller # Date 1316010483 -7200 # Node ID 275f0be6946c4a54ceb222f20e4c1519334ee6f1 # Parent b9384547131153bd3c76d5069164bf4ee6087b5b Reincarnating Snakes diff -r b93845471311 -r 275f0be6946c mamba/level.py --- 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() diff -r b93845471311 -r 275f0be6946c mamba/snake.py --- 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 diff -r b93845471311 -r 275f0be6946c mamba/widgets/game.py --- 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() diff -r b93845471311 -r 275f0be6946c mamba/world.py --- 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