def __init__(self, natVar=0.15, mapFile = "isometric_grass_and_water2.tmx", randomDeaths=0.): self.randomDeaths = randomDeaths self.mapFile = mapFile #This is the filename of the map to be used for the display of this simulation mydir = os.path.dirname(os.path.realpath(__file__)) subdir = 'Maps' mapfilepath = os.path.join(mydir, subdir, self.mapFile) tmxdata = TiledMap(mapfilepath) self.__mapW = int(tmxdata.properties['Width']) self.__mapH = int(tmxdata.properties['Width']) self.__resources = self.resources_add(propWithRes=0.4) self.__natVar = natVar self.__dCreats = DeadCreatures(self) self.__lCreats = LivingCreatures(self, self.__dCreats) self.__lCreats.addCreature(1, 70*32, 20*32) self.__lCreats.addCreature(2, 15*32, 15*32) self.__lCreats.addCreature(3, 75*32, 80*32) self.__lCreats.addCreature(4, 23*32, 80*32) self.__lCreats.addCreature(5, 43*32, 23*32) self.__lCreats.addCreature(6, 17*32, 90*32) self.__lCreats.addCreature(7, 19*32, 89*32) self.__lCreats.addCreature(8, 25*32, 75*32) self.__lCreats.addCreature(9, 90*32, 10*32) self.__lCreats.addCreature(10, 23*32, 70*32) self.__lCreats.addCreature(11, 20*32, 15*32) self.__lCreats.addCreature(12, 45*32, 50*32) self.__lCreats.addCreature(13, 45*32, 70*32) self.__maxCreatureNo = self.__lCreats.creatures() + self.__dCreats.creatures() print self.__lCreats
class Environment(object): ''' Creature Object to be tested in virtual environment ''' # Initialises Environment def __init__(self, natVar=0.15, mapFile = "isometric_grass_and_water2.tmx", randomDeaths=0.): self.randomDeaths = randomDeaths self.mapFile = mapFile #This is the filename of the map to be used for the display of this simulation mydir = os.path.dirname(os.path.realpath(__file__)) subdir = 'Maps' mapfilepath = os.path.join(mydir, subdir, self.mapFile) tmxdata = TiledMap(mapfilepath) self.__mapW = int(tmxdata.properties['Width']) self.__mapH = int(tmxdata.properties['Width']) self.__resources = self.resources_add(propWithRes=0.4) self.__natVar = natVar self.__dCreats = DeadCreatures(self) self.__lCreats = LivingCreatures(self, self.__dCreats) self.__lCreats.addCreature(1, 70*32, 20*32) self.__lCreats.addCreature(2, 15*32, 15*32) self.__lCreats.addCreature(3, 75*32, 80*32) self.__lCreats.addCreature(4, 23*32, 80*32) self.__lCreats.addCreature(5, 43*32, 23*32) self.__lCreats.addCreature(6, 17*32, 90*32) self.__lCreats.addCreature(7, 19*32, 89*32) self.__lCreats.addCreature(8, 25*32, 75*32) self.__lCreats.addCreature(9, 90*32, 10*32) self.__lCreats.addCreature(10, 23*32, 70*32) self.__lCreats.addCreature(11, 20*32, 15*32) self.__lCreats.addCreature(12, 45*32, 50*32) self.__lCreats.addCreature(13, 45*32, 70*32) self.__maxCreatureNo = self.__lCreats.creatures() + self.__dCreats.creatures() print self.__lCreats def __repr__(self): return ("Living Creatures: %s\n" % (self.livingCreatures()) + "Dead Creatures: %s\n" % (self.deadCreatures()) + "Resources: %s\n" % (self.resources())) def __str__(self): return ("natVar=%s\n"%(self.natVar) + "Living Creatures: %s\n" % (self.livingCreatures()) + "Dead Creatures: %s\n" % (self.deadCreatures()) + "Resources: %s" % (self.resources())) def mapDims(self): return np.array([self.__mapW, self.__mapH]) def maxCreatureNo(self): return self.__maxCreatureNo def setMaxCreatureNo(self, newMaxCreatNo): self.__maxCreatureNo = newMaxCreatNo def livingCreatures(self): return self.__lCreats def deadCreatures(self): return self.__dCreats def clearTempDeadCreatures(self): self.__dCreats.clearDiffDeadCreats() def diffDeadCreatures(self): return self.__dCreats.diffDeadCreats() def resources(self): return self.__resources def multiplyResources(self, factor): self.__resources *= factor def natVar(self): return self.__natVar def mapFileDump(self): return self.mapFile def resources_add(self, propWithRes=0.5, maxE = 20.): resources = np.zeros((3, self.__mapW, self.__mapH)) #0 = energy, 1 = grow rate, 2 = max energy resources[0] = np.random.randint(5, 21, size=(self.__mapW, self.__mapH)) resources[1] = np.random.rand(self.__mapW, self.__mapH)*2. resources[2] = np.zeros((self.__mapW, self.__mapH)) + maxE if self.mapFile is not None: mydir = os.path.dirname(os.path.realpath(__file__)) subdir = 'Maps' mapfilepath = os.path.join(mydir, subdir, self.mapFile) tmxdata = TiledMap(mapfilepath) resKiller = np.ones((self.__mapW, self.__mapH)) noRes = {8:0,9:0,10:0,11:0,22:0,23:0,28:2,29:2,30:2,31:2,32:2,33:2,33:2,34:2,35:2,36:2,37:2,38:2} for y in xrange(self.__mapH): for x in xrange(self.__mapW): resKiller[x][y] = noRes.get(int(tmxdata.get_tile_properties(x,y,0)['tID']), 1) resKiller*np.random.rand(self.__mapW, self.__mapH) else: resKiller = np.random.rand(self.__mapW, self.__mapH) resKiller[resKiller > propWithRes] = 1 resKiller[resKiller <= propWithRes] = 0 resKiller = 1 - resKiller resources *= resKiller*0.3 return resources def resources_grow(self): self.resources()[0] += ((((self.resources()[0]**3.)*(np.exp(-(((self.resources()[0]/7.)-1.)**2.))))/500.)*self.resources()[1] + 0.3) self.resources()[0].clip(0, self.resources()[2], out=self.resources()[0]) #vals > max --> max def step(self): self.resources_grow() self.__lCreats.allStep()