Ejemplo n.º 1
0
    def __init__(self, world):
        super(Ship, self).__init__(world)

        self.position = [world.width / 2, 
                         world.height / 2]
        self.points = [[1, 0], 
                       [util.cos(140), util.sin(140)],
                       [-0.3, 0],
                       [util.cos(220), util.sin(220)]]
        self.shield_points = []
        for i in range(5):
            self.shield_points.append([util.cos(i * 360 / 5 - 15), 
                                       util.sin(i * 360 / 5 - 15)])
            self.shield_points.append([util.cos(i * 360 / 5 + 15), 
                                       util.sin(i * 360 / 5 + 15)])
        self.velocity = [0, 0]
        self.angle = 0
        self.scale = 5
        self.reload_timer = 0
        self.regenerate_timer = 0
        self.max_shields = 3
        self.shields = self.max_shields
        self.shield_tick = 0
        self.jet_tick = 0
        self.shield_timer = 0
        self.shield_mode = SHIELDMODE
        self.engines = False

        self.fire_sound = mixer.Sound(os.path.join("sounds", "shot.ogg"))
        self.engine_sound = mixer.Sound(os.path.join("sounds", "engine.ogg"))
        self.fire_channel = pygame.mixer.Channel(2)
        self.engine_channel = pygame.mixer.Channel(1)
Ejemplo n.º 2
0
    def __init__(self, world):
        super(Bullet, self).__init__(world)

        self.points = [[1, 0], [util.cos(120), util.sin(120)],
                       [util.cos(240), util.sin(240)]]
        self.scale = 2
        self.life = 100
        self.angle = 0
Ejemplo n.º 3
0
    def __init__(self, world):
        super(Bullet, self).__init__(world)

        self.points = [[1, 0], 
                       [util.cos(120), util.sin(120)],
                       [util.cos(240), util.sin(240)]]
        self.scale = 2
        self.life = 100
        self.angle = 0
Ejemplo n.º 4
0
    def step_from_to(self, n1, n2):
        if n1.__class__.__name__ == "Node":
            p1 = n1.point
        else:
            p1 = n1
        if n2.__class__.__name__ == "Node":
            p2 = n2.point
        else:
            p2 = n2

        if dist(n1, n2) > self.EPSILON:
            theta = atan2(p2[1] - p1[1], p2[0] - p1[0])
            p_new = [
                p1[0] + self.EPSILON * cos(theta),
                p1[1] + self.EPSILON * sin(theta)
            ]
        else:
            p_new = p2

        diff = int(max(abs(p1[0] - p_new[0]), abs(p1[1] - p_new[1]), 2))

        point_array = zip(np.linspace(p1[0], p_new[0], diff),
                          np.linspace(p1[1], p_new[1], diff))

        return p_new, point_array
Ejemplo n.º 5
0
 def jet(self, position, velocity, angle):
     angle = angle + random.randint(-10, 10) + 180
     u = 2 * util.cos(angle)
     v = 2 * util.sin(angle)
     self.add([position[0] + 3 * u, position[1] + 3 * v],
              [velocity[0] + u, velocity[1] + v], random.randint(50, 200),
              random.randint(20, 200), random.randint(20, 30))
Ejemplo n.º 6
0
    def __init__(self, world, scale, max_speed):
        super(Asteroid, self).__init__(world)
        world.n_asteroids += 1

        # spawn on a screen edge
        if random.randint(0, 1) == 0:
            x = random.randint(0, world.width)
            y = random.randint(0, 1) * world.height
        else:
            x = random.randint(0, 1) * world.width
            y = random.randint(0, world.height)
        self.position = [x, y] 

        n_points = random.randint(5, 10)
        self.points = []
        for i in range(n_points):
            angle = i * 360 / n_points + random.randint(-20, 20)
            distance = random.random() / 4.0 + 0.75
            self.points.append([distance * util.cos(angle), 
                                distance * util.sin(angle)])
        self.velocity = [random.random() * max_speed * 2 - max_speed, 
                         random.random() * max_speed * 2 - max_speed]
        self.angle = 0
        self.scale = scale
        self.angular_velocity = random.random() * 4 - 2
Ejemplo n.º 7
0
def draw_string(surface,
                string,
                colour,
                scale,
                position,
                centre=False,
                angle=0):
    kern = 2.5
    x = position[0]
    y = position[1]
    a = scale * util.cos(angle)
    b = scale * -util.sin(angle)
    c = -b
    d = a
    if centre:
        x -= a * kern * len(string) / 2.0
        y -= c * kern * len(string) / 2.0
    for ch in string:
        if ch in char_points:
            screen = [[int(-a * u - b * v + x),
                       int(-c * u - d * v + y)] for u, v in char_points[ch]]
            for i in range(0, len(screen), 2):
                pygame.draw.line(surface, util.WHITE, screen[i], screen[i + 1])
        x += a * kern
        y += c * kern
Ejemplo n.º 8
0
 def explosion2(self, n_points, position, velocity):
     for i in range(n_points):
         delta = 360.0 / n_points
         angle = i * delta + random.randint(int(-delta), int(delta))
         speed = random.random() * 4.0
         self.add(position, [
             velocity[0] + speed * util.cos(angle),
             velocity[1] + speed * util.sin(angle)
         ], n_colour - random.randint(1, 50), -1, random.randint(50, 300))
Ejemplo n.º 9
0
    def thrust(self):
        u = 0.1 * util.cos(self.angle)
        v = 0.1 * util.sin(self.angle)
        self.velocity = [self.velocity[0] + u, self.velocity[1] + v]

        self.jet_tick -= 1
        if self.jet_tick < 0:
            self.jet_tick = 3
            self.world.particle.jet(self.position, self.velocity, self.angle)
Ejemplo n.º 10
0
    def thrust(self):
        u = 0.1 * util.cos(self.angle)
        v = 0.1 * util.sin(self.angle)
        self.velocity = [self.velocity[0] + u, self.velocity[1] + v]

        self.jet_tick -= 1
        if self.jet_tick < 0:
            self.jet_tick = 3
            self.world.particle.jet(self.position, self.velocity, self.angle)
Ejemplo n.º 11
0
 def jet(self, position, velocity, angle):
     angle = angle + random.randint(-10, 10) + 180
     u = 2 * util.cos(angle)
     v = 2 * util.sin(angle)
     self.add([position[0] + 3 * u, position[1] + 3 * v],
              [velocity[0] + u, velocity[1] + v],
              random.randint(50, 200),
              random.randint(20, 200),
              random.randint(20, 30))
Ejemplo n.º 12
0
 def explosion2(self, n_points, position, velocity):
     for i in range(n_points):
         delta = 360.0 / n_points
         angle = i * delta + random.randint(int(-delta), int(delta))
         speed = random.random() * 4.0 
         self.add(position, 
                  [velocity[0] + speed * util.cos(angle),
                   velocity[1] + speed * util.sin(angle)],
                  n_colour - random.randint(1, 50), 
                  -1, 
                  random.randint(50, 300))
Ejemplo n.º 13
0
 def sparks(self, position, velocity):
     n_points = 3
     delta = 360 / n_points
     for i in range(n_points):
         angle = i * delta + random.randint(-delta / 2, delta / 2)
         speed = random.random() * 2.0
         self.add(position, [
             velocity[0] + speed * util.cos(angle),
             velocity[1] + speed * util.sin(angle)
         ], n_colour - random.randint(1, 200), -113,
                  random.randint(50, 100))
Ejemplo n.º 14
0
 def explosion(self, n_points, position, velocity):
     self.explosion1_sound.play()
     for i in range(int(n_points)):
         delta = 360 / n_points
         angle = i * delta + random.randint(int(-delta / 2), int(delta / 2))
         speed = random.random() * 2.0 
         self.add(position, 
                  [velocity[0] + speed * util.cos(angle),
                   velocity[1] + speed * util.sin(angle)],
                  n_colour - random.randint(1, 50), 
                  -1, 
                  random.randint(50, 100))
Ejemplo n.º 15
0
 def sparks(self, position, velocity):
     n_points = 3
     delta = 360 / n_points
     for i in range(n_points):
         angle = i * delta + random.randint(-delta / 2, delta / 2)
         speed = random.random() * 2.0 
         self.add(position, 
                  [velocity[0] + speed * util.cos(angle),
                   velocity[1] + speed * util.sin(angle)],
                  n_colour - random.randint(1, 200), 
                  -113, 
                  random.randint(50, 100))
Ejemplo n.º 16
0
    def __init__(self, world):
        super(Ship, self).__init__(world)

        self.position = [world.width / 2, world.height / 2]
        self.points = [[1, 0], [util.cos(140), util.sin(140)], [-0.3, 0],
                       [util.cos(220), util.sin(220)]]
        self.shield_points = []
        for i in range(5):
            self.shield_points.append(
                [util.cos(i * 360 / 5 - 15),
                 util.sin(i * 360 / 5 - 15)])
            self.shield_points.append(
                [util.cos(i * 360 / 5 + 15),
                 util.sin(i * 360 / 5 + 15)])
        self.velocity = [0, 0]
        self.angle = 0
        self.scale = 5
        self.reload_timer = 0
        self.regenerate_timer = 0
        self.max_shields = 3
        self.shields = self.max_shields
        self.shield_tick = 0
        self.jet_tick = 0
Ejemplo n.º 17
0
    def fire(self):
        if self.reload_timer == 0:
            a = util.cos(self.angle)
            b = util.sin(self.angle)

            projectile = bullet.Bullet(self.world)
            self.world.score = max(self.world.score - self.world.settings.bullet_cost, 0)
            projectile.position = [self.position[0] + self.scale * a,
                                   self.position[1] + self.scale * b]
            projectile.velocity = [a * 7.0 + self.velocity[0],
                                   b * 7.0 + self.velocity[1]]
            projectile.angle = self.angle

            self.reload_timer = 10
Ejemplo n.º 18
0
    def __init__(self, world):
        super(Ship, self).__init__(world)

        self.position = [world.width / 2, 
                         world.height / 2]
        self.points = [[1, 0], 
                       [util.cos(140), util.sin(140)],
                       [-0.3, 0],
                       [util.cos(220), util.sin(220)]]
        self.shield_points = []
        for i in range(5):
            self.shield_points.append([util.cos(i * 360 / 5 - 15), 
                                       util.sin(i * 360 / 5 - 15)])
            self.shield_points.append([util.cos(i * 360 / 5 + 15), 
                                       util.sin(i * 360 / 5 + 15)])
        self.velocity = [0, 0]
        self.angle = 0
        self.scale = 5
        self.reload_timer = 0
        self.regenerate_timer = 0
        self.max_shields = 3
        self.shields = self.max_shields
        self.shield_tick = 0
        self.jet_tick = 0
Ejemplo n.º 19
0
 def fire(self):
     if self.reload_timer == 0:
         self.fire_channel.stop()
         self.fire_channel.play(self.fire_sound)
         
         a = util.cos(self.angle)
         b = util.sin(self.angle)
         
         projectile = bullet.Bullet(self.world)
         projectile.position = [self.position[0] + self.scale * a,
                                self.position[1] + self.scale * b]
         projectile.velocity = [a * 7.0 + self.velocity[0],
                                b * 7.0 + self.velocity[1]]
         projectile.angle = self.angle
         
         self.reload_timer = 10
Ejemplo n.º 20
0
    def thrust(self, power):
        # engine state changed?
        if power != self.engines:
            if power:
                self.engine_channel.play(self.engine_sound, loops = -1)
            else:
                self.engine_channel.fadeout(500)
            self.engines = power

        if power:
            u = 0.1 * util.cos(self.angle)
            v = 0.1 * util.sin(self.angle)
            self.velocity = [self.velocity[0] + u, self.velocity[1] + v]
            
            self.jet_tick -= 1
            if self.jet_tick < 0:
                self.jet_tick = 3
                self.world.particle.jet(self.position, self.velocity, self.angle)
Ejemplo n.º 21
0
    def draw(self):
        a = self.scale * util.cos(self.angle)
        b = self.scale * -util.sin(self.angle)
        c = -b
        d = a

        screen_points = [[int(a * x + b * y + self.position[0]), 
                          int(c * x + d * y + self.position[1])] 
                         for x, y in self.points]

        if self.continuous:
            pygame.draw.lines(self.world.surface, util.WHITE, True, 
                              screen_points)
        else:
            for i in range(0, len(screen_points), 2):
                pygame.draw.line(self.world.surface, util.WHITE, 
                                 screen_points[i], 
                                 screen_points[i + 1])
Ejemplo n.º 22
0
    def draw(self):
        a = self.scale * util.cos(self.angle)
        b = self.scale * -util.sin(self.angle)
        c = -b
        d = a

        screen_points = [[int(a * x + b * y + self.position[0]), 
                          int(c * x + d * y + self.position[1])] 
                         for x, y in self.points]

        if self.continuous:
            pygame.draw.lines(self.world.surface, util.WHITE, True, 
                              screen_points)
        else:
            for i in range(0, len(screen_points), 2):
                pygame.draw.line(self.world.surface, util.WHITE, 
                                 screen_points[i], 
                                 screen_points[i + 1])
Ejemplo n.º 23
0
    def draw(self):
        super(Ship, self).draw()

        for i in range(max(0, self.shields)):
            radius = int(self.scale + 5 + 4 * i)
            angle = ((i & 1) * 2 - 1) * self.shield_tick
            a = radius * util.cos(angle)
            b = radius * -util.sin(angle)
            c = -b
            d = a

            screen_points = [[
                int(a * x + b * y + self.position[0]),
                int(c * x + d * y + self.position[1])
            ] for x, y in self.shield_points]

            for i in range(0, len(screen_points), 2):
                pygame.draw.line(self.world.surface, util.WHITE,
                                 screen_points[i], screen_points[i + 1])
Ejemplo n.º 24
0
    def draw(self):
        super(Ship, self).draw()

        for i in range(max(0, self.shields)):
            radius = int(self.scale + 5 + 4 * i)
            angle = ((i & 1) * 2 - 1) * self.shield_tick
            a = radius * util.cos(angle)
            b = radius * -util.sin(angle)
            c = -b
            d = a

            screen_points = [[int(a * x + b * y + self.position[0]), 
                              int(c * x + d * y + self.position[1])] 
                              for x, y in self.shield_points]

            for i in range(0, len(screen_points), 2):
                pygame.draw.line(self.world.surface, util.WHITE,
                                 screen_points[i], 
                                 screen_points[i + 1])
Ejemplo n.º 25
0
def draw_string(surface, string, colour, scale, position, 
                centre = False, angle = 0):
    kern = 2.5
    x = position[0]
    y = position[1]
    a = scale * util.cos(angle)
    b = scale * -util.sin(angle)
    c = -b
    d = a
    if centre:
        x -= a * kern * len(string) / 2.0
        y -= c * kern * len(string) / 2.0
    for ch in string:
        if ch in char_points:
            screen = [[int(-a * u - b * v + x), 
                       int(-c * u - d * v + y)] 
                      for u, v in char_points[ch]]
            for i in range(0, len(screen), 2):
                pygame.draw.line(surface, util.WHITE, screen[i], screen[i + 1])
        x += a * kern
        y += c * kern
Ejemplo n.º 26
0
imageDimensions = (2048, 2048)
canvas = Image.new('RGBA', imageDimensions, (0, 0, 0, 0))

painter = ImageDraw.Draw(canvas)

center = (imageDimensions[0] / 2, imageDimensions[1] / 2)
colorWhite = (255, 255, 255)
colorBlack = (0, 0, 0)
isEven = True
angleInc = 2
maxAngle = 540
radius = 1000
radiusInc = radius * angleInc / maxAngle

for angle in range(0, maxAngle, angleInc):
    points = []
    points.append(center[0] + radius * util.cos(angle + 0))
    points.append(center[1] + radius * util.sin(angle + 0))
    points.append(center[0] + radius * util.cos(angle + 120))
    points.append(center[1] + radius * util.sin(angle + 120))
    points.append(center[0] + radius * util.cos(angle + 240))
    points.append(center[1] + radius * util.sin(angle + 240))
    radius -= radiusInc
    painter.polygon(points,
                    fill=colorBlack if isEven else colorWhite,
                    outline=colorWhite)
    isEven = not isEven

#canvas.save(util.get_filename(__file__))
canvas.show()