# Constants FPS = 50 SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600 LASER_SPEED = -5 MAX_SPEED = 20 #in x and y directions separatly, not normalized num_enemies = 5 gameover = False # Set the display's dimensions screenDimensions = (SCREEN_WIDTH, SCREEN_HEIGHT) window = pygame.display.set_mode(screenDimensions) pygame.display.set_caption('Battle for Ram Aras') # Set the window bar title screen = pygame.display.get_surface() # This is where images are displayed my_cruiser = Battlecruiser(screen, SCREEN_WIDTH/2, SCREEN_HEIGHT/2) my_cruiser.draw() font = pygame.font.Font(None, 28) score = 0 COUNTER_LOCATION = (10, 10) def input(events): ''' Function to handle events, particularly quitting the program ''' for event in events: if event.type == QUIT: quit() elif event.type == KEYDOWN: if event.key == K_ESCAPE: quit() if event.key == K_SPACE: my_cruiser.create_laser()
enemy.hit() laser.hit() score += 100 # Redraw the background screen.fill(BACKGROUND_COLOR) # Draw scrolling background bg.update() bg.draw() # Show score screen.blit(text, SCORE_LOCATION) # Update & draw battle cruiser cruiser.update(events) cruiser.draw() # Update and redraw all sprites for laser in lasers: laser.update() laser.draw() for enemy in enemies: enemy.update() enemy.draw() # Draw sprites pygame.display.flip()
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()
if event.key == K_DOWN: ship_events.append(event) if event.key == K_LEFT: ship_events.append(event) if event.key == K_RIGHT: ship_events.append(event) screen.fill(BACKGROUND_COLOR) ram_aras.update() end_aras.update() ram_aras.draw() ship.update(ship_events) ship_events = [] ship.draw() for zerg in swarm: zerg.update() zerg.draw() if pygame.sprite.collide_rect(ship, zerg) and ship.active == True and zerg.active == True: ship.death() game_over = True for shot in ship.lasers: if pygame.sprite.collide_rect(shot,zerg) and zerg.active == True: score+=100 ship.lasers.remove(shot) zerg.death() cur_enemies-=1
if (len(enemies) <= 10 and counter % (FPS / ENEMY_GEN) == 0): enemies.append(Enemy(screen, ENEMY_IMAGE, EXPLODE_IMAGE, randint(0, SCREEN_WIDTH), 1, randint(-1*ENEMY_MAX_SPEED, ENEMY_MAX_SPEED), ENEMY_MAX_SPEED, )) #update stuff enemy_index = 0 for enemy in enemies: if enemy.active == False: enemies.pop(enemy_index) else: enemy.update(FPS) enemy.draw() enemy_index += 1 player.update(FPS) player.draw() counter += 1 y_pos_on_scroll += 1 ''' collision detection ''' for enemy in enemies: for laser in player.lasers: if (pygame.sprite.collide_rect(laser, enemy) and enemy.exploding == False): score += 100 enemy.explode() break #check if player lost for enemy in enemies: if (pygame.sprite.collide_rect(player, enemy) == True): game_over = True