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
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