コード例 #1
0
ファイル: level.py プロジェクト: rappie/platformo
class Level(object):
	"""Object voor een level.
		
		Hierin staat opgeslagen waar alle bricks zitten.
	
	"""
	
	def __init__(self):
		
		# Player object.
		self.player = None
		
		# Boolean voor of je het level hebt gehaald.
		self.finished = False
		
		# Bepaal de rect van het gehele level.
		self.rect = pygame.Rect(0, 0, settings.TILE_WIDTH*settings.LEVEL_WIDTH, settings.TILE_HEIGHT*settings.LEVEL_HEIGHT)
		
		# Bepaal de lijst met alle game objects van dit level.
		#
		# Dit doen we door eerst een levelmap te genereren met een level-
		# generator. Vervolgens lopen we de level map door en maken we alle game
		# objects aan.
		#
		levelMap = levelgenerator.generateLevelMap()
		gameObjectList = self.getGameObjectListFromLevelMap(levelMap)
		
		# Maak cluster aan waar alle game objects in worden opgeslagen.
		staticObjectList = [k for k in gameObjectList if isinstance(k, Actor) == False]
		self.cluster = Cluster(self, staticObjectList, self.rect)

		# Maak lijst aan met alle actors.
		self.actorList = [k for k in gameObjectList if isinstance(k, Actor) == True]

	def getGameObjectListFromLevelMap(self, levelMap):
		"""Return lijst met alle game objects beschreven in 'levelMap'.
		"""
		# De lijst met game objects die we gaan returnen.
		gameObjectList = []
		
		# Loop door alle tiles heen.
		for y in xrange(len(levelMap)):
			for x in xrange(len(levelMap[0])):
				
				# Bepaal de x/y positie.
				posX = x * settings.TILE_WIDTH
				posY = y * settings.TILE_HEIGHT

				# Haal tile op.
				tile = levelMap[y][x]
				
				# Loop door alle game object id's in de tile heen.
				for gameObjectId in tile:
					
					# Bepaal de class van het game object.
					gameObjectClass = ID_TO_OBJECT_CLASS[gameObjectId]
					
					# Maak aan en zet in de lijst.
					gameObjectRect = pygame.Rect(posX, posY, settings.TILE_WIDTH, settings.TILE_HEIGHT)
					gameObject = gameObjectClass(self, gameObjectRect)
					gameObjectList.append(gameObject)
		
		# Return de game objects.
		return gameObjectList

	def getGameObjectList(self, clusterCollisionRect):
		"""Return alle game objects.
			Er worden alleen statische game objects gereturned die colliden met
			'clusterCollisionRect'. Daarnaast worden alle actors gereturned.
		"""
		gameObjectList = self.cluster.getGameObjectList(clusterCollisionRect)
		gameObjectList += self.getActorList()
		return gameObjectList

	def removeGameObject(self, gameObject):
		"""Verwijder een game object uit het level.
		"""
		if isinstance(gameObject, Actor):
			self.actorList.remove(gameObject)
		else:
			self.cluster.removeGameObject(gameObject)
		
	def getActorList(self):
		"""Return lijst met alle actors.
		"""
		return self.actorList[:]

	def setFinished(self, finished):
		"""Set of het level is gehaald.
		"""
		self.finished = finished

	def isFinished(self):
		"""Return of je het level hebt gehaald.
		"""
		return self.finished

	def getPlayer(self):
		"""Return het player object.
		"""
		return self.player
	
	def setPlayer(self, player):
		"""Set het player object.
		"""
		self.player = player