예제 #1
0
class SnakeScene(SpritePlane):
	
	
	def __init__(self,bg=(0,0,0),snake=(0,240,0),apple=(255,0,0),snake_max_len=4):
		
		
		super(SnakeScene,self).__init__(tempo=360,bg=bg)
		
		self.snake = Sprite(color=snake,blend=False,z=10,trail=snake_max_len)
		self.add_sprite(0,0,self.snake)
		
		self.apple_time = 0
		self.apple = Sprite(color=apple,blend=False,z=5)
		self.add_sprite(0,0,self.apple)
		
		self.snake_reset()
		self.apple_reset()
		
		self.points = 0
		
		self._snake_dir = rint(0,4) 
		
	
	def add_point(self):
		p = Sprite(color=(255,255,255),blend=False,z=0)
		self.add_sprite(*self.wall1d_to_plane2d(self.points),sprite=p)
		self.points +=1
		
	def apple_reset(self):	
		self.apple_time = 0
		self.move_to(self.apple,*self.random_visible_plane2d())
		
	def snake_reset(self):
		self.move_to(self.snake,*self.random_visible_plane2d())
		
	
	def up(self): self._snake_dir = 0
	def right(self): self._snake_dir = 1
	def down(self): self._snake_dir = 2
	def left(self): self._snake_dir = 3
	
	def _snake_step(self):
		
		if self.snake.loc() == self.apple.loc():
		#	self.snake_reset()
			self.apple_reset()
			self.add_point()
		
		r = self._snake_dir
		if r == 0:
			self.move_up(self.snake)
		elif r == 1:
			self.move_right(self.snake)
		elif r == 2:
			self.move_down(self.snake)
		else: # r == 3
			self.move_left(self.snake)
	
	
	def step(self,seconds):
		if not super(SnakeScene,self).step(seconds):
			return False
		#print 'step %s' % seconds	
			
		for i in xrange(int(self.beats())):
			self._snake_step()
			self.apple_time += 1
			if self.apple_time >= 10:
				self.apple_reset()
		
		return True
	
	def rgb(self,base_rgb=None):
		
		if self.points < 4:
			return super(SnakeScene,self).rgb()
		else:
			return [(rint(0,255),rint(0,255),rint(0,255)) for i in xrange(0,PANEL_NUM)]