Exemple #1
0
    def move(self):
        """
        Returns relative movement.

        >>> spaceship = Spaceship('@', 'Galactica', (0, 0, 0, 0))
        >>> spaceship.accelerate(700)
        >>> spaceship.move()
        []
        >>> spaceship.move()
        [(0, -1)]
        """
        directions = []
        if self.pointer not in self.inertia.keys():
            self.inertia[self.pointer] = [self.speed, self.speed, 0]
        for pointer, (speed, inertia, movement) in self.inertia.items():
            speed = self.speed if pointer == self.pointer else 0
            self.inertia[pointer][0] = speed
            if inertia > speed:
                inertia -= self.control
            elif inertia < speed:
                inertia += self.control
            self.inertia[pointer][1] = inertia
            movement += inertia
            if movement >= 1000:
                movement -= 1000
                path = bresenham.get_line((0, 0), self.pointers[pointer])
                x, y = path[1]
                directions.append((x, y))
            self.inertia[pointer][2] = movement
        return directions
Exemple #2
0
 def __init__(self, direction, damage, speed, lifespan):
     """
     >>> Projectile((-2, 0), 8, 800, 10)
     <class 'Projectile'>
     """
     self.char = '*'
     self.directions = bresenham.get_line((0, 0), direction)[1:]
     self.position = 0
     self.lifestep = 0
     self.lifespan = lifespan
     self.damage = damage
     self.speed = speed
     self.movement = 0
     self.alive = True
     self.coords = (0, 0, 0, 0)
     self.default_color = True
Exemple #3
0
                    if (x0 - sight <= x <= x0 + sight):
                        nx, ny = x - x0 + r, y - y0 + r
                        if pointer and (x, y) == pointer:
                            rel_pointer = (nx, ny)
                        if look and (x, y) == look:
                            rel_look = (nx, ny)
                        if (x, y) in visible_tiles:
                            obj = l.get_objects((x, y))[-1]
                            view[ny][nx] = obj.get_char()
                            if not obj.is_default_color():
                                colors[(nx, ny)] = obj.get_color()
        for y, line in enumerate(view):
            view[y] = ''.join(line)
        return view, colors, rel_pointer, rel_look

    def visible_tiles(self, (x0, y0), r, sight):
        l = self.level
        visible = []
        for y in xrange(y0 - r, y0 + r + 1):
            if y0 - sight <= y <= y0 + sight:
                for x in xrange(x0 - r, x0 + r + 1):
                    if (x0 - sight <= x <= x0 + sight):
                        line = bresenham.get_line((x0, y0), (x, y))
                        is_blocker = False
                        for (ix, iy) in line:
                            if not is_blocker and (ix, iy) not in visible:
                                visible.append((ix, iy))
                            if l.is_view_blocker((ix, iy)):
                                is_blocker = True
        return visible