def __init__(self, tileSize):
		reload(pathfinding)
		reload(ai)
		reload(v2)
		reload(kd)
		
		#sprites['tileSID'] = PKFW.spcr("./images/grey.png", tileSize['width'], tileSize['height'])
		#sprites['startSID'] = PKFW.spcr("./images/blue.png", tileSize['width'], tileSize['height'])
		#sprites['finishSID'] = PKFW.spcr("./images/green.png", tileSize['width'], tileSize['height'])
		#sprites['wallSID'] = PKFW.spcr("./images/red.png", tileSize['width'], tileSize['height'])
		#sprites['pathSID'] = PKFW.spcr("./images/purple.png",tileSize['width'], tileSize['height'])
		#sprites['boidSID'] = PKFW.spcr("./images/reds.png", 32,32)
		sprites.append(PKFW.spcr("./images/grey.png", tileSize['width'], tileSize['height']))
		sprites.append(PKFW.spcr("./images/blue.png", tileSize['width'], tileSize['height']))
		sprites.append(PKFW.spcr("./images/green.png", tileSize['width'], tileSize['height']))
		sprites.append(PKFW.spcr("./images/red.png", tileSize['width'], tileSize['height']))
		sprites.append(PKFW.spcr("./images/purple.png",tileSize['width'], tileSize['height']))
		sprites.append(PKFW.spcr("./images/reds.png", 32,32))
		
		self.wanderers = []
		self.flock = None
		self.path = None
		
		self.buttonpressed = [False]*5
		self.screenProps = kd.sp
		self.tileSize = tileSize
		self.levelSize = {'x':self.screenProps['width']/self.tileSize['width'], 'y':self.screenProps['height']/self.tileSize['height']}
		self.levelTiles = [[None]*self.levelSize['y'] for i in range(self.levelSize['x'])]
		
		#initialising levelTiles grid with new tiles
		#small random portion of tiles set to walls 
		#outer edges of tiles set to wall (not needed but included to avoid boid boundries)
		for x in range(len(self.levelTiles)):
			for y in range(len(self.levelTiles[x])):
				self.levelTiles[x][y] = Tile()
				if(random.random()>0.20) or ((x>10 and x<14) and (y>4 and y<9)):
					self.levelTiles[x][y].setS(sprites[0])
				else:		
					self.levelTiles[x][y].setS(sprites[3])
					
				self.levelTiles[x][y].pos.x = (self.tileSize['width']) * x%self.screenProps['width']+ (tileSize['width']*0.5)
				self.levelTiles[x][y].pos.y = (self.tileSize['height']) * y%self.screenProps['height']+ (tileSize['width']*0.5)
				self.levelTiles[x][y].gpos['x'] = x
				self.levelTiles[x][y].gpos['y'] = y
				if(not x or not y) or (x is self.levelSize['x']-1 or y is self.levelSize['y']-1):
					self.levelTiles[x][y].setS(sprites[3])
		
		#initialising 10 boid wanderers 
		for i in range(10):
			rx = random.randint(kd.sp['width']*0.5-64,kd.sp['width']*0.5+64)
			ry = random.randint(kd.sp['height']*0.5-72,kd.sp['height']*0.5+72)
			self.wanderers.append(ai.boid(rx, ry, 32, sprites[5]))
	def LevelGridDraw(self):
		for x in range(len(self.levelTiles)):
			for y in range(len(self.levelTiles[x])):
				if(self.levelTiles[x][y].Sid != -1):
					PKFW.spmo(self.levelTiles[x][y].Sid,self.levelTiles[x][y].pos.x, self.levelTiles[x][y].pos.y )
					PKFW.spdr(self.levelTiles[x][y].Sid)	
		
		for i in range(len(self.wanderers)):
			self.wanderers[i].obstacleAvoid(walls)
			self.wanderers[i].update()
			self.wanderers[i].draw()
			if(math.isnan(self.wanderers[i].position.x) or math.isnan(self.wanderers[i].position.y)):
				# on rare occasions the boid position and steering becomes NAN due to being too close to too many 
				# walls... I am not sure why this is happening and have implemented a half fix which just
				# re initialises the boid if this happens
				self.wanderers[i] = ai.boid(kd.sp['width']*0.5, kd.sp['height']*0.5, 64, sprites[5])
		
		if(self.flock is not None):
			self.flock.update()