# handle events input(pygame.event.get()) time_passed = clock.tick(FPS) # manage the background screen.blit(background, (0,background_pos)) background_pos -= 1 if background_pos <= SCREEN_HEIGHT - background.get_height(): background_pos = 0 # draw the score text = font.render("Score:" + str(score), 1, (0,255,0)) screen.blit(text, COUNTER_LOCATION) # manage the cruiser my_cruiser.update() my_cruiser.draw() # manage the enemies enemies.update() time_to_respawn += 1 if time_to_respawn >= 100 and not gameover: for j in range (randint(0, 10)): enemies.add(Enemy(screen, randint(1, SCREEN_WIDTH), 0, randint(1, 5), randint(1,5))) time_to_respawn = 0 for e in enemies: e.draw() # detect laser-enemy collisions if pygame.sprite.spritecollide(e, my_cruiser.lasers, True): score += e.die()
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()
if event.key == K_UP: ship_events.append(event) 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)
class Game: DEBUG = False def __init__(self, title, screen_width, screen_height): # Initialize Pygame pygame.init() # Set up screen self.SCREEN_WIDTH = screen_width self.SCREEN_HEIGHT = screen_height self.window = pygame.display.set_mode((self.SCREEN_WIDTH, self.SCREEN_HEIGHT)) pygame.display.set_caption(title) # Set the window bar title self.screen = pygame.display.get_surface() # This is where images are displayed # Set up font self.font = pygame.font.Font(None, 36) # Generate Battlecruiser self.battlecruiser = Battlecruiser(self.screen, self.SCREEN_WIDTH / 2, self.SCREEN_HEIGHT * 5 / 7) # Generate 10 enemies self.enemies = [] for i in range(10): self.enemies.append(Enemy(self.screen, randint(0, self.SCREEN_WIDTH), randint(0, self.SCREEN_HEIGHT - 300), self.battlecruiser)) # Add all sprites to group self.sprites = pygame.sprite.Group(self.battlecruiser, self.enemies) # Set up clock self.clock = pygame.time.Clock() self.FPS = 30 self.seconds = 0 pygame.time.set_timer(USEREVENT + 1, 1000) # Used to correctly implement seconds def run(self): while True: # for each frame self.handle_input() for sprite in self.sprites: sprite.update() self.clock.tick(self.FPS) self.screen.fill((255, 255, 255)) for sprite in self.sprites: sprite.draw() score = (11 - len(self.sprites)) * 100 ending_font = self.font.render("Score: {0}".format(score), 1, (0, 0, 255)) self.screen.blit(ending_font, (10, 10)) pygame.display.flip() def handle_input(self): for event in pygame.event.get(): if event.type == QUIT: self.quit() elif event.type == KEYDOWN: if event.key == K_ESCAPE: self.quit() elif event.key == K_LEFT: self.battlecruiser.update("LEFT") elif event.key == K_RIGHT: self.battlecruiser.update("RIGHT") elif event.key == K_UP: self.battlecruiser.update("UP") elif event.key == K_DOWN: self.battlecruiser.update("DOWN") elif event.key == K_SPACE: self.battlecruiser.update("FIRE") elif event.type == USEREVENT + 1: self.seconds += 1 def quit(self): quit()
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()
''' Generate a new enemy every so often ''' 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):