lasers = [] # Create the enemies; choose starting location and starting speed for each sprite enemies = [] for i in range(NUM_ENEMIES): enemies.append(Enemy(screen, randint(1, (screen.get_size()[0]/2 - 19)), 0, randint(1, MAX_SPEED), randint(1, MAX_SPEED))) # Keep track of events events = {'down': 0, 'up': 0, 'right': 0, 'left': 0} # Create battlecruiser cruiser = Battlecruiser(screen, SCREEN_WIDTH/2, SCREEN_HEIGHT-100, 4) # Create background bg = ScrollingBackground(screen, SCROLL_SPEED) # Game loop while True: if cruiser.active == False: render_game_over(screen, score) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN: if event.key == K_ESCAPE: pygame.quit() sys.exit() else: time_passed = clock.tick(FPS)
def main(): # Check if sound and font are supported if not pygame.font: print "Warning, fonts disabled" if not pygame.mixer: print "Warning, sound disabled" # Constants FPS = 50 SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600 BACKGROUND_COLOR = (0, 0, 0) LASER_SPEED = 300 SHIP_SPEED = 300 SCROLL_SPEED = 50 SCORE_POS = (20, 20) ENEMY_RELEASE_DELAY = 750 MIN_SPEED = 100 MAX_SPEED = 350 # Initialize Pygame, the clock, a font, and a screen pygame.init() pygame.display.set_caption("Game.py") screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), 0, 32) clock = pygame.time.Clock() font = pygame.font.Font(None, 36) endfont = pygame.font.Font(None, 60) # Create the sprite group lasers = pygame.sprite.Group() enemies = pygame.sprite.Group() player = Battlecruiser(screen, (SCREEN_WIDTH / 2), -1, SHIP_SPEED) background = ScrollingBackground(screen, SCROLL_SPEED) # Initialize variables score = 0 delay_counter = 0 # Game loop while True: time_passed = clock.tick(FPS) # Event handling here (to quit) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == KEYDOWN: if event.key == K_ESCAPE: pygame.quit() sys.exit() if event.key == K_SPACE and player.get_state() == "Flying": lasers.add(player.shoot()) if event.key == K_UP: player.up() if event.key == K_DOWN: player.down() if event.key == K_LEFT: player.left() if event.key == K_RIGHT: player.right() if event.key == K_r and player.get_state() == "Dead": enemies.empty() lasers.empty() background.kill() background = ScrollingBackground(screen, SCROLL_SPEED) player.kill() player = Battlecruiser(screen, (SCREEN_WIDTH / 2), -1, SHIP_SPEED) elif event.type == KEYUP: if event.key == K_UP: if player.get_direction()[1] < 0: player.zero_vert() if event.key == K_DOWN: if player.get_direction()[1] > 0: player.zero_vert() if event.key == K_LEFT: if player.get_direction()[0] < 0: player.zero_hort() if event.key == K_RIGHT: if player.get_direction()[0] > 0: player.zero_hort() # Update if player still alive if player.get_state() == "Flying": delay_counter += time_passed if delay_counter >= ENEMY_RELEASE_DELAY: enemies.add( Enemy( screen, randint(1, SCREEN_WIDTH), 0, randint(MIN_SPEED, MAX_SPEED), randint(MAX_SPEED * -1, MAX_SPEED), randint(MIN_SPEED, MAX_SPEED) * -1, ) ) delay_counter = 0 # Redraw the background background.update(time_passed) background.draw() # Draw score fontscore = font.render(str(score), 1, (255, 255, 255)) screen.blit(fontscore, SCORE_POS) # Check for collisions player_collision = pygame.sprite.spritecollideany(player, enemies) if player_collision is not None: if player_collision.get_state() is not "Dead": player.explode() collided = pygame.sprite.groupcollide(enemies, lasers, False, False) for enemy in collided: if enemy.get_state() == "Flying": enemy.explode() score += 100 # Update and redraw all enemies enemies.update(time_passed) for enemy in enemies.sprites(): enemy.draw() # Update and redraw all lasers lasers.update(time_passed) for laser in lasers.sprites(): laser.draw() player.update(time_passed) player.draw() # Allow death to progress else: player.update(time_passed) player.draw() if player.get_active(): endtext = endfont.render("Final Score: " + str(score), 1, (255, 255, 255)) screen.blit(endtext, (240, 180)) else: endtext = endfont.render(("'r' to restart."), 1, (255, 255, 255)) screen.blit(endtext, (240, 250)) # Draw the sprites pygame.display.update()