Example #1
0
    def sprite(self, player):
        isvisible = False
        tileoffset = [-1 if axis == 1 else 0 for axis in self.direction]
        for tile in [(0,0), (0,1), (1,0), (1,1)]:
            tile = coords.modsum(tile, tileoffset, self.cellmap.size)
            if coords.sum(self.position, tile) in player.visibletiles:
                isvisible = True
                break
        if isvisible:
            return self._pokedsprite(images.DragonRed[self.direction],
                                     layer=20,
                                     offset=coords.mul(tileoffset, images.TILESIZE))

        else:
            return None
Example #2
0
    def move(self, cellmap):

        def randommove():
            """Move in random direction"""
            move = [0, random.randint(-1,1)]
            random.shuffle(move)
            return move

        poschange = randommove()

        self.direction = poschange[0] if abs(poschange[0]) else self.direction
        newpos = coords.modsum(self.position, poschange, self.cellmap.size)

        if cellmap[newpos]['sogginess'] < 50 or cellmap[newpos]['solid']:
            return False
        self.position = newpos
        return True
Example #3
0
    def update(self, world):
        def chaseplayer(playerpos):
            """Decide whether to chase the player"""
            playerdist = coords.mindist(self.position, playerpos, self.cellmap.size)
            if (sum(ax**2 for ax in playerdist) > self.detectionrange**2):
                # Can't see/smell/hear (?) player
                return False
            if random.random() > self.speed:
                # Bored?
                return False
            return True

        def randommove():
            """Move in random direction"""
            move = [0, random.randint(-1,1)]
            random.shuffle(move)
            return move

        washunting = self.hunting
        self.hunting = None
        for player in world.players:
            if chaseplayer(player.position):
                self.hunting = player
        if self.hunting:
            # Move in direction of player, or randomly if no path found.
            poschange = self.directiontoplayer(self.hunting.position) or randommove()
            if washunting:
                self._suggestmessage("You are being chased by a bear", 1)
            else:
                self._suggestmessage("A bear starts chasing you", 2)
        else:
            # Move randomly.
            poschange = randommove()
            if washunting:
                self._suggestmessage("The bear has lost interest in you", 1)

        self.direction = poschange[0] if abs(poschange[0]) else self.direction
        newpos = coords.modsum(self.position, poschange, self.cellmap.size)

        if not self.cellmap[newpos]['solid']:
            self.position = newpos
        for player in world.players:
            if self.position == player.position:
                player.scattercoins(4, random.randint(4,8))
                self._suggestmessage("The bear rips a hole in your bag!", 6)
Example #4
0
 def move(self, x, y):
     """Move if possible, update collectable levels accordingly"""
     if abs(x) + abs(y) != 1:
         return False
     self.direction = (x, y)
     if ((self.cellmap[coords.sum(self.position, (x, y))]['solid'] or
          self.cellmap[coords.sum(self.position, (x, y))]['sogginess'] == 100) and
         not GEPlayer.FREEPLAYER):
         return False
     self.position = coords.modsum(self.position, self.direction, self.cellmap.size)
     collectable = self.cellmap[self.position]['collectableitem']
     if collectable != 0:
         self.score[collectable] += collectables.value[collectable]
         self._suggestmessage("You pick up " + collectables.name[collectable], 4)
     self.cellmap[self.position]['collectableitem'] = 0
     if not GEPlayer.FREEPLAYER:
         self.score[collectables.CHOCOLATE] -= self.terraincost()
     if self.layingfuse and self.cellmap[self.position]['sogginess'] < GEPlayer.MAXFUSESOG:
         self.cellmap.placefuse(self.position)
     return True
Example #5
0
    def update(self, world):
        """Fly toward the player if nearby, or continue in same direction"""
        def flameplayer():
            fronttiles = [coords.sum(self.position, coords.mul(self.direction, i)) for i in range(1,4)]
            for tile in fronttiles:
                if tile in [player.position for player in world.players]:
                    self._suggestmessage("The dragon breaths a jet of fire towards you", 5)
                    for tile in fronttiles:
                        self.cellmap.ignite(tile, forceignite=True)
                    break

        washunting = self.hunting
        self.hunting = None
        for player in world.players:
            playerpos = player.position
            if not self.cellmap[playerpos]['covered'] and random.random() < Dragon.speed:
                offset = coords.tileoffset(self.position, playerpos, self.cellmap.size)
                if offset[0]**2 + offset[1]**2 <= Dragon.detectionrange**2:
                    self.hunting = player
        if self.hunting:
            newdirection = list(self.direction)
            if abs(offset[0]) > abs(offset[1]):
                newdirection[0] = cmp(offset[0], 0)
            elif abs(offset[1]) > abs(offset[0]):
                newdirection[1] = cmp(offset[1], 0)
            elif cmp(offset[0], 0) != cmp(newdirection[0], 0):
                newdirection[0] = -self.direction[0]
            elif cmp(offset[1], 0) != cmp(newdirection[1], 0):
                newdirection[1] = -self.direction[1]
            self.direction = tuple(newdirection)
            if washunting:
                self._suggestmessage("You are being hunted down by a dragon", 2)
            else:
                self._suggestmessage("A dragon begins to chase you", 3)
        else:
            if washunting:
                self._suggestmessage("The dragon starts to fly away", 1)

        self.position = coords.modsum(self.position, self.direction, self.cellmap.size)
        flameplayer()
Example #6
0
 def mapcoord(pfcoord):
     """Get map coordinate from pathfinder one"""
     return coords.modsum(startpos, pfcoord, (-pfmapsize,)*2, cellmap.size)