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()