Exemplo n.º 1
0
    def handle_collisions(self):
        s = self.ship
        a = self.asteroids
        b = self.bullets
        countBullet = 0

        #Player will get 3 lives, lose 1 life when collision happens. dies when 3 happens
        #Player restarts in the middle. might make it to an empty spot in future
        for i in a:
            if s.collide(i):
                self.player.lives-=1
                if len (self.lives) > 0:
                    self.lives.pop()

                if self.player.lives==0:
                    self.dead=True
                    pygame.mixer.music.load("GameOver.mp3")
                    pygame.mixer.music.play(1)

                else:
                    self.ship.position.x=self.screen.get_width()/2
                    self.ship.position.y = self.screen.get_height()/2
                    #self.ship.angular_velocity(0)
                    self.ship.pull=Point(0,0)

        #Bullet collision, player gets score,
        for i in b:
            #creates a polygon bullet at the location of the real bullet which can collide with asteroids
            #removes the bullet and the asteroid
            tempPositionX = i.position.x
            tempPositionY = i.position.y
            tempPoints=[Point(5, 5), Point(-5, 5), Point(-5, -5), Point(5, -5)]
            tempBullet=Polygon(tempPoints,tempPositionX,tempPositionY,0,Point(0,0),0)
            count=0
            for j in a:
                if tempBullet.collide(j):

                    self.asteroids.pop(count)

                    self.bullets.pop(countBullet)
                    self.player.score=self.player.score+50

                count += 1
            countBullet +=1

        if len(self.asteroids)==0:
            self.level=self.level+1
            self.nextLevelBool=True
        else:
            pass
Exemplo n.º 2
0
def main(screen):
    running = True
    clock = pygame.time.Clock()
    speed = 7
    chunk_depth = 25
    chunk_width = 20
    bonus = 0
    coin_sound = pygame.mixer.Sound("SOUND/smw_coin.wav")
    explosion_sound = pygame.mixer.Sound("SOUND/airland.wav")
    explosion_sound.set_volume(0.2)
    best_score = 0
    if os.path.exists("score.txt"):
        with open("score.txt", "r") as f:
            content = f.read()
            if content and content.isdigit():
                best_score = int(content)
    else:
        with open("score.txt", "w") as f:
            f.write("0")

    rx = 32
    ry = 0
    camera = pygame.Vector3(0, 5, 2)
    font = pygame.font.SysFont('arial', 30)
    sky = pygame.transform.flip(pygame.transform.scale(pygame.image.load("PNG/sky.png"), SCREEN_DIMENSION), False, True)

    pols = []
    for i in range(-chunk_width, chunk_width):
        for j in range(chunk_depth):
            pol = Polygon(i, 0, -j, (random.randint(0, 150), random.randint(200, 255), random.randint(0, 150)))
            perlin(pol)
            pols.append(pol)

    kite = Kite(-0.5, 1.5, 0)
    k_ry = 0
    while running:
        t = clock.get_time() / 1000
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return False

        pressed = pygame.key.get_pressed()
        camera.z -= speed * t
        if pressed[pygame.K_q]:
            camera.x -= speed * t
            for part in kite.polygons:
                for p in part.points:
                    p.x -= speed * t
            k_ry += 0.6
        elif pressed[pygame.K_d]:
            camera.x += speed * t
            for part in kite.polygons:
                for p in part.points:
                    p.x += speed * t
            k_ry -= 0.6
        else:
            if k_ry > 0:
                k_ry -= 1
            if k_ry < 0:
                k_ry += 1

        if k_ry > 10:
            k_ry = 10
        if k_ry < -10:
            k_ry = -10

        if pressed[pygame.K_SPACE]:
            camera.y += speed * t
            for part in kite.polygons:
                for p in part.points:
                    p.y += speed * t
        if pressed[pygame.K_LSHIFT]:
            camera.y -= speed * t
            for part in kite.polygons:
                for p in part.points:
                    p.y -= speed * t

        new_pol = []
        for pol in pols:
            if not isinstance(pol, Prop):
                if not pol.can_render_z(camera):
                    new_pol.append(Polygon(pol.x, pol.y, pol.z - chunk_depth, (random.randint(0, 150),
                                                                               random.randint(200, 255),
                                                                               random.randint(0, 150))))

                    perlin(new_pol[-1], new_pol)
                elif not pol.can_render_x_left(camera, chunk_width):
                    new_pol.append(Polygon(pol.x - chunk_width * 2, pol.y, pol.z, (random.randint(0, 150),
                                                                                   random.randint(200, 255),
                                                                                   random.randint(0, 150))))

                    perlin(new_pol[-1], new_pol)
                elif not pol.can_render_x_right(camera, chunk_width):
                    new_pol.append(Polygon(pol.x + chunk_width * 2, pol.y, pol.z, (random.randint(0, 150),
                                                                                   random.randint(200, 255),
                                                                                   random.randint(0, 150))))

                    perlin(new_pol[-1], new_pol)
                else:
                    new_pol.append(pol)
            else:
                new_pol.append(pol)

        pols = new_pol
        pols.sort(key=lambda s: distance(s.points, camera), reverse=True)

        screen.blit(sky, (0, 0))

        for pol in pols:
            pol.draw(screen, camera, rx, ry)
            if kite.collision(pol):
                kite.life -= 0.5
            if isinstance(pol, Prop):
                if pol.collide(kite):
                    bonus += 50
                    coin_sound.play()

        if kite.index < 10:
            for part in kite.polygons:
                for p in part.points:
                    p.z -= speed * t
                part.draw(screen, camera, rx, ry, k_ry)
            kite.rope_particles(screen, camera, rx, ry, k_ry, 200, 880)
        else:
            speed -= 1

        if kite.index == 1:
            explosion_sound.play()

        speed = max(speed, 0)
        s = int(-camera.z + bonus + 2)
        screen.blit(font.render(f"Score = {s}", True, (0, 0, 0)), (20, 20))
        screen.blit(font.render(f"Best score = {max(s, best_score)}", True, (0, 0, 0)), (20, 50))
        kite.draw_explosion(screen)

        kite.draw_life(screen)
        kite.draw_height(screen)

        pygame.display.flip()
        clock.tick()
        pygame.display.set_caption(f"{clock.get_fps():.2f}")
        if kite.index >= 71:
            if s > best_score:
                with open("score.txt", "w") as f:
                    f.write(str(s))
            return True