Ejemplo n.º 1
0
class Euclidean(Draw):
	""" Base class for all matrix objects """
	
	def render(self):
		""" Substitutes trace method for render method """
		self.trace()
		
	def pinata(self,radius):
		""" Creates a set of circle instances associated with points in a matrix """
		for i in range(len(self.matrix)):
			Global.enemies += [Circle(self.position+self.matrix[i],radius,self.color,
			self.color2)]

	def follow(self):
		""" Calculates the unit direction vector from object position to player 
			position a displacer is added to slightly disperse a horde of enemies"""
		self.direction = -(self.position-(Global.SpaceShip_position+self.displacer))

	def attack(self):
		""" Similar to the follow method except the object is directed slightly 
		ahead of the spaceship"""
		self.direction = -(self.position-(self.displacer+Global.SpaceShip_position+\
		Global.SpaceShip_direction*100))
	
	def accelerate(self):
		""" Overrides base method in system, to account for deathstars, enemy
			objects are attracted to the closest deathstart"""
			
		if Global.deathstars != []:
			closest_deathstar = sorted(Global.deathstars,key=
			lambda x:  abs(self.position-x.position))[0]
			self.direction = -(self.position-(closest_deathstar.position+self.displacer))
		Draw.accelerate(self)
		
	def load(self):
		""" Prepares enemy object """
		self.position = Vector()*50 +  Vector.origin
		self.position *= [choice([1,-1]),choice([1,-1])]
		self.original = self.copy()
		self.speed = 0.05
		self.direction = Vector()
		self.displacer = Vector()*32
		self.time = Time()
	
	def bounce(self):
		""" flips direction of objects to stop going off screen """
		if abs(self.position.x) >= Global.window[0]/2:
			self.direction.x *= -1
			self.position.x *= 0.99
		elif abs(self.position.y) >= Global.window[1]/2:
			self.direction.y *= -1
			self.position.y *= 0.99

	def reload(self):
		""" base reload method """
		self.bounce()
		self.rotate(Global.milliseconds/10)
		self.accelerate()
	
	def fusion(self,radius):
		""" draws a set of circles associated with points in a matrix """
		for i in range(len(self.matrix)):
			self.nice_circle(self.position+self.matrix[i],radius,self.color,self.color2)
	def remove(self):
			Global.enemies.remove(self)

	def destruct(self):
		""" base destruct method"""
		Global.particles.append(Explosion(self.position.tupl(),15,self.color))
		Global.enemies.remove(self)
		Global.score += self.score
Ejemplo n.º 2
0
class SpaceShip(Sprite):
	""" SpaceShip object player controlled"""

	def init(self):
		self.image = 'player.png'
		self.load()
		self.position = Vector(0,0)
		self.speed = 0.35
		self.shooting = False
		self.shot_delay = 0.15
		self.direction = Vector(0,0)
		self.time = Time()
		
	def start_shooting(self):
		self.shooting = True
		
	def stop_shooting(self):
		self.shooting = False
		
	def reload(self):
		if self.shooting:
			if self.time > self.shot_delay:
				self.time.reset()
				angle = (self._cursor.position - self.position).angle()
				Global.bullets += [Bullet(self.position.tupl(),angle)]

				if Global.score > 150000:
					Global.bullets += [Bullet(self.position.tupl(),angle-3)]
					
				if Global.score > 25000:
					Global.bullets += [Bullet(self.position.tupl(),angle+3)]
					
				elif Global.score > 50000:
					self.shot_delay = 0.09
				elif Global.score > 10000:
					self.shot_delay = 0.12
					
				
			
		if  (self.position.x <= -Global.window[0]/2 and self.direction.x < 0) or \
		 (self.position.x >= Global.window[0]/2 and self.direction.x > 0):
			self.direction.x = 0
		elif (self.position.y <= -Global.window[1]/2 and self.direction.y < 0) or \
		(self.position.y >= Global.window[1]/2 and self.direction.y > 0):
			self.direction.y = 0
			
		for terrorist in Global.enemies + Global.deathstars:
			if abs(terrorist.position-self.position) < 32:
				self.destruct()
				break
		else:
			self.accelerate()
			Global.SpaceShip_position = self.position.tupl()
			Global.SpaceShip_direction = ~self.direction
			
	
	def destruct(self):
	
		while len(Global.enemies) > 0:
			Global.enemies[-1].remove()
			
		while len(Global.deathstars) > 0:
			Global.deathstars[-1].destruct()
			
		Global.lives -= 1
		if Global.lives < 1:
			Global.particles.append(Explosion(self.position.tupl(),200,(255,255,200),5,0.2))
			self.load_main_menu()	
			self.score = Text() << Global.score
			self.score.log('scores.txt') 
			self.play('die.wav')
			
		else:
			Global.particles.append(Explosion(self.position.tupl(),200,(255,255,200)))
			self.init()
			
			self.play('die1.wav')