def main(): """Run main program""" rules_and_agreements() enemy = Enemy() enemy.make_battlefield() enemy.make_ships() player = Player() player.make_battlefield() player.make_ships() print(player.battlefield.get_map) my_turn = ask_yes_no("Would you like to move first?") if my_turn == "n": my_turn = False game_over = None while not game_over: if my_turn: game_over = player.fire(enemy) if game_over: enemy.says_after_losing() else: game_over = enemy.fire(player) if game_over: enemy.says_after_victory() my_turn = not my_turn
def start(display, settings): """This is the main body of the game logic""" counter = 0 boss_alive = False if settings.settings["Music"] == "On": pygame.mixer.music.load('assets/main_game.wav') pygame.mixer.music.play(-1) player_img, enemy_img, capital_ship_img = "assets/player_ship.png", "assets/alienship.png", "assets/capital_ship.png" bullet, fired_bullets, on_screen_enemies, turn_timer = False, [], 1, 0 enemy_list = [Enemy(enemy_img, display) for i in range(on_screen_enemies)] player = Player(player_img, display) FPS = settings.settings["Framerate"] num_stars = 800 stars = [ Stars(settings.settings["Resolution"]["X"], settings.settings["Resolution"]["Y"]) for i in range(num_stars) ] # Game loop while True: display.fill(colour.black) # Draw stars for star in stars: star.draw(display) if star.y > settings.settings["Resolution"]["Y"]: stars.remove(star) new_height = 1 # Add new stars - we want this to be somewhat random new_stars = [ Stars(settings.settings["Resolution"]["X"], new_height) for i in range(int(random.uniform(0.25, 1.25))) ] for new_star in new_stars: stars.append(new_star) if turn_timer > 500: on_screen_enemies += 1 for e in [ Enemy(enemy_img, display) for i in range(on_screen_enemies) ]: enemy_list.append(e) turn_timer = 0 for e in enemy_list: e.draw() if e.load_weapons < 1: e.load_weapons = 100 fired_bullets.append(e.fire()) e.load_weapons -= 1 # If bullet has been fired, draw it and assess whether it hits the target or not for b in fired_bullets: # Remove the bullets at the bottom so you don't move into them if b.y > 1080: fired_bullets.remove(b) b.draw() player_status = player.hit(b) if player_status == "hit": # Handle edge case where bullet goes off screen but still has causal power try: fired_bullets.remove(b) except: pass elif player_status == "dead": try: fired_bullets.remove(b) except: pass # End game return True, player for e in enemy_list: hit_result = e.hit(b, player) if hit_result == "dead": fired_bullets.remove(b) enemy_list.remove(e) elif hit_result == "hit": fired_bullets.remove(b) player.draw() draw_text(display, player) if (player.score % 4 == 0 and player.score != 0) and boss_alive == False: new_boss = True boss_alive = True counter = 100 enemy_list.append(create_boss(capital_ship_img, display)) if counter > 0 and new_boss == True: draw_boss_text(display, settings) counter -= 1 else: counter = 120 new_boss = False # Checks what events have been created and takes them off the queue for event in pygame.event.get(): if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): terminate() elif (event.type == KEYDOWN and event.key == K_a): player.x -= 25 elif (event.type == KEYDOWN and event.key == K_d): player.x += 25 elif (event.type == KEYDOWN and event.key == K_SPACE): fired_bullets.append(player.fire()) turn_timer += 1 # update() draws Surface object to screen pygame.display.update() pygame.time.Clock().tick(FPS)