Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
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()