def run_game(): #初始化游戏并创建一个屏幕对象 pygame.init() '''load game settings''' ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption(ai_settings.caption) '''create a ship''' ship = Ship(ai_settings, screen) '''init a allien group''' aliens = Group() gf.create_fleet(ai_settings, screen, ship, aliens) '''create a group to store all bullets''' bullets = Group() #init a stats object stats = GameStates(ai_settings) #开始游戏的主循环 while True: #监视键盘和鼠标事件 gf.check_events(ai_settings, screen, ship, bullets) if stats.game_active: gf.update_ship(ship) gf.update_bullets(ai_settings, screen, ship, aliens, bullets) gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets) print(len(bullets)) gf.update_screen(ai_settings, screen, ship, aliens, bullets)
def run_game(): #初始化游戏并创建一个屏幕对象 pygame.init() #一些属性设置 ai_settings = Settings() #屏幕显示 screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) #窗口标题 pygame.display.set_caption("Alien Invasion") #创建背景图 background = Background(screen) #创建Play按钮 play_button = Button(ai_settings, screen, "Play") #创建一艘飞船 ship = Ship(ai_settings, screen) #创建一个用于存储子弹的编组 bullets = Group() aliens = Group() #创建外星人群 gf.create_fleet(ai_settings, screen, aliens, ship) #创建一个外星人 # alien = Alien(ai_settings,screen) #创建一个用于存储游戏统计信息的实例 stats = GameStats(ai_settings) #创建一个记分牌 sb = Scoreboard(ai_settings, screen, stats) #开始游戏的主循环 while True: gf.check_events(ai_settings, stats, screen, sb, ship, bullets, aliens, play_button) if stats.game_active: gf.update_ship(ship) gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_aliens(ai_settings, stats, screen, sb, ship, aliens, bullets) gf.update_screen(ai_settings, stats, sb, screen, ship, background, bullets, aliens, play_button)
def run_game(): #initialize game and create a screen object pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") #make a ship ship = Ship(ai_settings, screen) #make an alien aliens = Group() #gf.create_fleet(ai_settings, screen, aliens, ship) #make bullet sprites group bullets = Group() #create alien bullet group alien_bullets = Group() #make screen background background = Background(screen) #add music to the game music = Music() #start play music.start_play() #create statics stats = GameStats(ai_settings) stats.reset_stats() with open("highest_score.txt", 'r') as hs: highestscore = hs.readline() stats.highest_score = int(highestscore) #create play button play_button = Button(screen, "Play") #initlize score board score_board = ScoreBoard(screen, stats, ai_settings) #Start the main loop for the game. while True: #watch for keyboard and mouse events. gf.check_events(ai_settings, screen, ship, bullets, play_button, stats, aliens, score_board, alien_bullets) if stats.game_active: gf.update_ship(ship) gf.update_bullets(bullets, aliens, ai_settings, ship, screen, stats, score_board, alien_bullets) gf.update_alien_bullets(alien_bullets, ship, stats, aliens, bullets, screen, ai_settings, score_board) gf.update_aliens(aliens, ai_settings, ship, stats, bullets, screen, score_board, alien_bullets) gf.update_screen(ai_settings, screen, ship, bullets, background, aliens, play_button, stats, score_board, alien_bullets)
def run_game(): pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") ship = Ship(ai_settings, screen) bullets = Group() aliens = Group() gf.create_fleet(ai_settings, screen, ship, aliens) while True: gf.check_events(ai_settings, screen, ship, bullets) gf.update_ship(ship) gf.update_bullets(bullets) gf.update_screen(ai_settings, screen, ship, aliens, bullets)
def run_game(): # Initialize background setting and create a screen object. pygame.init() # create an instance of Settings and store it in ai_settingsa after making the call to pygame.init() ai_settings = Settings() # screen = pygame.display.set_mode( # (ai_settings.screen_width, ai_settings.screen_height)) screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) #screen object is called a surface. A surface in Pygame is a part of the screen where you display a game element. Each element in the game, like the aliens or the ship, is a surface. # screen = pygame.display.set_mode((1200, 800)) #Argument(1200, 800) is a tuple. pygame.display.set_caption("Alien Invasion") # Make the Play button play_button = Button(ai_settings, screen, "Play") # create an instance to store game statistics stats = GameStats(ai_settings) sb = Scoreboard(ai_settings, screen, stats) # Make a ship ship = Ship(ai_settings, screen) # alien = Alien(ai_settings, screen) # make a group to store bullets in bullets = Group() aliens = Group() # create a fleet of aliens gf.create_fleet(ai_settings, screen, ship, aliens) # Start the main loop for the game: the loop contains an event loop and code that manages screen updates. while True: gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) if stats.game_active: gf.update_ship(ship) gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_aliens(ai_settings, stats, sb, screen, ship, aliens, bullets) gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)
def run_game(): # 初始化游戏并创建一个屏幕对象 pygame.init() ai_settings = settings.Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) # 创建一个用于存储游戏统计信息的实例 stats = GameStats(ai_settings) # 创建飞船 ship = Ship(ai_settings, screen) # 创建子弹编组 bullets = Group() # 创建外星人编组,并生产外星人 aliens = Group() gf.create_alien_fleet(ai_settings, screen, ship, aliens) # 创建按钮 play_button = Button(ai_settings, screen, 'play') # 创建一个计分板 scoreboard = Scoreboard(ai_settings, screen, stats) pygame.display.set_caption(ai_settings.game_name) # 开始游戏的主循环 while True: # 监视键盘和鼠标事件 gf.check_events(ai_settings, screen, stats, ship, bullets, aliens, play_button, scoreboard) # 根据游戏的可用状态来更新游戏的位置 if stats.game_active: # 更新飞船的位置 gf.update_ship(ship) # 更新所有子弹的位置,移除每次抵达屏幕边缘的子弹 gf.update_bullets(ai_settings, screen, stats, ship, bullets, aliens, scoreboard) # 更新所有外星人的位置 gf.update_aliens(ai_settings, screen, stats, ship, bullets, aliens, scoreboard) # 每次循环时都重新绘制屏幕 gf.update_screen(ai_settings, screen, stats, ship, bullets, aliens, play_button, scoreboard)
def run_game(): pygame.init() # 初始化背景设置 ai_settings = Settings() # 全局设置 screen = pygame.display.set_mode( # 创建screen显示窗口 (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption('Alien Invasion') # 标题 stats = GameStats(ai_settings) # 创建一个用于储存游戏统计信息的实例 score = Scoreboard(ai_settings, screen, stats) play_button = Button(ai_settings, screen, "play") # 创建飞船 ship = Ship(ai_settings, screen) # 创建外星人组 zombies = Group() # 创建子弹编组 bullets = Group() gf.creat_fleet(ai_settings, screen, ship, zombies) # 开始游戏主循环 while True: # 监视键盘和鼠标事件 gf.check_events( ai_settings, screen, stats, score, play_button, ship, zombies, bullets, ) if stats.game_active: # 移动飞船 gf.update_ship(ship) # 更新外星人位置 gf.update_zombies(ai_settings, stats, screen, score, ship, zombies, bullets) # 碰撞更新 gf.update_bullets(ai_settings, screen, stats, score, ship, bullets, zombies) # 更新屏幕 gf.update_screen(ai_settings, screen, stats, score, ship, zombies, bullets, play_button)
def run_game(self): pygame.init() # 初始化背景设置 ai_settings = Settings() # 全局设置 screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) pygame.display.set_caption('yilia_battle_alien') # 标题 #新建Play按钮 play_button = Button(ai_settings,screen,"Play") #if stats.game_active: #创建一个用于存储游戏统计信息的实例,并创建记分牌 stats = GameStats(ai_settings) sb = Scoreboard(ai_settings, screen, stats) # 创建飞船 ship = Ship(ai_settings,screen) # 创建子弹编组 bullets = Group() #创建一个外星人 aliens = Group() #创建外星人群 gf.create_fleet(ai_settings,screen,ship,aliens) backimage = pygame.image.load(r'C:\Users\pc\Desktop\game\background.jpg').convert() background = pygame.transform.smoothscale(backimage,(1000,600)) # 开始游戏主循环 while True: screen.blit(background,(0,0)) # 监视键盘和鼠标事件 gf.check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets) if stats.game_active: # 移动飞船 gf.update_ship(ship) # 更新子弹位置 gf.update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets) #更新外星人 gf.update_aliens(ai_settings,stats,screen,sb,ship,aliens,bullets) # 更新屏幕 gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button) print("done here")
def run_game(): #初始化pygame、设置和屏幕对象 pygame.init() #初始化背景设置 ai_settings = Settings() #全局设置 screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) #创建screen显示窗口 pygame.display.set_caption("Alien Invasion") #标题 #新建play按钮 play_button = Button(ai_settings, screen, "Play") #创建一个用于存储游戏系统统计信息的是咧,并创建记分牌 stats = GameStats(ai_settings) sb = Scoreboard(ai_settings, screen, stats) #创建一艘飞船 ship = Ship(ai_settings, screen) #创建子弹编组 bullets = Group() #创建一个外星人 aliens = Group() #创建外星人群 gf.creat_fleet(ai_settings, screen, ship, aliens) #开始游戏的主循环 while True: #监视鼠标和键盘事件 gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) if stats.game_active: #移动飞船 gf.update_ship(ship) #更新子弹位置 gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) #更新外星人 gf.update_screen(ai_settings, stats, screen, sb, ship, aliens, bullets) #更新屏幕 gf.update_screen(ai_settings, stats, screen, sb, ship, aliens, bullets, play_button)
def run_game(): # 初始化pygame,设置和屏幕对象 pygame.init() ai_settings = Settings() screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") ship = Ship(screen, ai_settings) # 创建一个用于存储子弹的编组 bullets = Group(); #开始游戏的主循环 while True: # 监视键盘和鼠标事件 gf.check_events(screen, ai_settings, ship, bullets) # 更新飞船位置 gf.update_ship(ship) # 更新飞船位置, 并删除消失的子弹 gf.update_bullets(bullets) # 更新后重绘屏幕 gf.update_screen(screen, ai_settings, ship, bullets)
def run_game(): # Initialize game and create screen object. pygame.init() game_settings = Settings() screen = window.window_set_mode(game_settings) bg = Background() # Make the play button. play_button = Button(game_settings, screen, "Play") # Create an instance to store game statistics, and create a scoreboard. stats = GameStats(game_settings) sb = Scoreboard(game_settings, screen, stats) # Make a ship, a group of aliens and a group of bullet ship = Ship(game_settings, screen) aliens = Group() bullets = Group() # Create an instance of the Surfaces game_surfaces = GameSurfaces() # Create the fleet of aliens. gf.create_fleet(game_settings, game_surfaces, screen, ship, aliens) # Start the main loop for the game. while True: gf.check_events(game_settings, game_surfaces, screen, stats, sb, play_button, ship, aliens, bullets) if stats.game_active: gf.update_ship(ship) gf.update_bullets(game_settings, game_surfaces, screen, stats, sb, ship, aliens, bullets) gf.update_aliens(game_settings, game_surfaces, screen, stats, sb, ship, aliens, bullets) gf.update_screen(game_settings, screen, bg, stats, sb, ship, aliens, bullets, play_button)
def run_game(): # 初始化背景 pygame.init() # 设置窗口标题 pygame.display.set_caption("Alien Invasion") # 加载窗口设置 ai_settings = Settings() # 设置窗口尺寸 screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) # 创建飞船 ship = Ship(screen, ai_settings) # 创建子弹编组 bullets = Group() # 创建外星人编组 aliens = Group() # 创建外星人 gf.create_fleet(ai_settings, screen, aliens, ship) while True: gf.check_events(ai_settings, screen, ship, bullets) gf.update_ship(ship) gf.update_bullets(bullets, aliens) gf.update_screen(ai_settings, screen, ship, bullets, aliens)
def run_game(): # Initialize game and create a screen object pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") # Draw start button play_button = Button(ai_settings, screen, "Play") # Make a ship, bullets, aliens and stats ship = Ship(ai_settings, screen) bullets = Group() aliens = Group() stats = GameStats(ai_settings) sb = Scoreboard(ai_settings, screen, stats) # Create a fleet of aliens gf.create_fleet(ai_settings, screen, ship, aliens) # Start the main loop for the game. while True: gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) if stats.game_active: gf.update_ship(ai_settings, ship) gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_aliens(ai_settings, stats, sb, screen, ship, aliens, bullets) gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)
def run_game(): """初始化游戏创建一个屏幕对象""" print('thread %s is running...' % threading.current_thread().name) pygame.init() ai_setting = settings.Settings() screen = pygame.display.set_mode( (ai_setting.screen_width, ai_setting.screen_height)) pygame.display.set_caption("Alien Invasion") ship = Ship(ai_setting.ship_speed_factor, screen) #创建存储子弹的编组 bullets = Group() #创建外星人群 aliens = Group() gf.create_fleet(ai_setting, screen, ship, aliens) #创建统计信息 stats = GameStats(ai_setting) #创建play按钮 play_button = Button(ai_setting, screen, "play") #创建统计游戏得分的实例 sb = Scoreboard(ai_setting, screen, stats) while (True): gf.check_events(ai_setting, screen, ship, aliens, bullets, stats, play_button, sb) #当前游戏处于激活状态 if stats.game_active: gf.update_ship(ship) gf.update_bullets(ai_setting, screen, ship, bullets, aliens, stats, sb) gf.update_aliens(ai_setting, stats, screen, ship, aliens, bullets, sb) gf.update_screen(ai_setting, screen, ship, bullets, aliens, stats, play_button, sb)
def run_game(): #Initialize game and make a screen object pygame.init() sounds.playsound('theme1') infrompy_settings = Settings() screen = pygame.display.set_mode( (infrompy_settings.screen_width, infrompy_settings.screen_height)) screenRect = screen.get_rect() pygame.display.set_caption("Invaders") background = Background(infrompy_settings, screen) red_screen = Red_Screen(infrompy_settings, screen) # Make play button and replay button play_button = Button(infrompy_settings, screen, "Play") play_again_button = Button(infrompy_settings, screen, "Your ship ded lol. Play Again ?") # Make an instance to store game stats stats = GameStats(infrompy_settings) # Make a ship, group of bullets and group of aliens ship = Ship(infrompy_settings, screen) ship_explosions = Group() bullets = Group() bullet_explosions = Group() aliens = Group() alien_explosions = Group() alien_bullets = Group() alien_bullet_explosions = Group() background = Background(infrompy_settings, screen) # Level board info_board = Info_Board(infrompy_settings, screen) # Bullets group gf.create_fleet(infrompy_settings, screen, ship, aliens) while True: background.blitme() gf.check_events(infrompy_settings, screen, ship, bullets, bullet_explosions, play_button) if infrompy_settings.game_active: gf.update_aliens(infrompy_settings, aliens, screen, ship, alien_explosions, alien_bullet_explosions, red_screen) gf.update_alien_explosions(aliens, screen, alien_explosions) gf.update_ship(infrompy_settings, screen, ship, ship_explosions) gf.update_ship_explosions(ship, screen, ship_explosions) gf.update_bullet_explosions(aliens, screen, bullets, bullet_explosions) gf.update_bullets(infrompy_settings, aliens, screen, ship, bullets, bullet_explosions, alien_explosions, alien_bullets) gf.update_alien_bullets(infrompy_settings, aliens, screen, ship, alien_bullets, alien_bullet_explosions, red_screen) gf.update_alien_bullet_explosions(aliens, screen, alien_bullet_explosions) gf.update_red_screen(infrompy_settings, red_screen) gf.update_screen(infrompy_settings, screen, ship, ship_explosions, aliens, bullets, bullet_explosions, alien_explosions, alien_bullets, alien_bullet_explosions, info_board, play_button, play_again_button, red_screen)
gameMap1.map_rolling() gameMap2.map_rolling() #ship.update_ship_pos() #ship.draw_ship() gf.update_level(gameStatus, scoreBoard, screen, settings, bullet_interval, small_enemy_interval, middle_enemy_interval, gameMap1, gameMap2, boss) gf.update_bullets(bullets, small_enemies, middle_enemies, boss, settings, gameStatus, scoreBoard) gf.update_all_enemies(small_enemies, middle_enemies, boss, screen, delay, enemy1_down_sound, enemy2_down_sound, enemy3_down_sound) gf.update_ship(ship, small_enemies, middle_enemies, boss, gameStatus, delay, screen, ship_born_protect, bulletAmmo_duration, me_down_sound, get_bullet_sound, bulletAmmos, scoreBoard, bombAmmos, get_bomb_sound) gf.check_gameover(screen, gameStatus, background) gf.update_bulletAmmos(bulletAmmos) gf.update_bombAmmos(bombAmmos) gf.show_scoreBoard(scoreBoard) delay -= 1 if not delay: delay = 100 pygame.display.update() #pygame.display.flip() time_passed = clock.tick(60)
def frame_step(self, simplify=False, inputs=None, name="Player"): init_bullet_count = len(self.bullets) gf.check_events(self.ai_settings, self.screen, self.sounds, self.stats, self.sb, self.scores, self.play_button, self.high_score_button, self.ship, self.aliens, self.ufo, self.bullets, self.bullet_delay, self.barriers, self.alien_bullets, self.smokes, inputs) bullet_count = len(self.bullets) alien_count = len(self.aliens) ufo_state = self.ufo.hit ship_pos = self.ship.rect.left if init_bullet_count < bullet_count: self.bullet_delay = self.ai_settings.bullet_delay elif self.bullet_delay > 0: self.bullet_delay -= 1 if self.stats.game_active: gf.update_timers(self.alien_timer, self.ufo_timer, self.ship_timer, self.smoke_timer) gf.update_ship(self.stats, self.sb, self.scores, self.ship, self.aliens, self.ufo, self.bullets, self.alien_bullets, self.ship_timer, self.alien_timer, simplify) if not self.ship.hit: gf.update_bullets(self.ai_settings, self.screen, self.sounds, self.stats, self.sb, self.ship, self.aliens, self.ufo, self.bullets, self.bullet_delay, self.barriers, self.alien_bullets, self.smokes, self.alien_timer, self.ufo_timer, self.smoke_timer, simplify) gf.update_aliens(self.ai_settings, self.screen, self.sounds, self.ship, self.aliens, self.barriers, self.alien_bullets, self.alien_timer, simplify) gf.update_ufo(self.ufo, self.ufo_timer, simplify) gf.update_smokes(self.smokes, self.smoke_timer) gf.update_screen(self.ai_settings, self.screen, self.stats, self.sb, self.ship, self.aliens, self.ufo, self.bullets, self.menu_bg, self.play_button, self.high_score_button, self.barriers, self.alien_bullets, self.smokes, simplify) pygame.display.update() reward = 0.0 if len(self.aliens) > 0: if len(self.aliens) < alien_count or self.ufo.hit != ufo_state: reward += 0.5 elif len(self.bullets) == 0: reward -= 0.2 if gf.ship_in_invader_range(self.ai_settings, self.ship, self.aliens, self.ufo): reward += 0.1 else: reward -= 0.1 reward += gf.bullet_aim(self.ai_settings, self.bullets, self.aliens, self.ufo) reward += gf.ship_in_bullet_path(self.ship, self.alien_bullets) if reward > 1.0: reward = 1.0 elif reward < -1.0: reward = -1.0 print reward if alien_count < len(self.aliens): game_state = False reward = 1 self.inactive = 240 self.bullet_delay = 0 else: game_state = self.stats.game_active if self.stats.game_active is False or self.inactive <= 0: self.stats.game_active = True reward = -1 self.inactive = 240 self.bullet_delay = 0 self.scores.check_place(int(round(self.stats.score, -1)), name) gf.restart(self.ai_settings, self.screen, self.sounds, self.stats, self.sb, self.ship, self.aliens, self.ufo, self.bullets, self.barriers, self.alien_bullets, self.smokes) image_data = None if inputs is not None: if len(inputs) == 3: img = self.screen image_data = pygame.surfarray.array3d(img) clock.tick(self.ai_settings.fps) # self.inactive += reward return reward, image_data, game_state
def play(): pygame.init() settings = Settings() screen = pygame.display.set_mode((settings.scr_width, settings.scr_height)) pygame.display.set_caption('Alien Invasion') main_clock = pygame.time.Clock() stats = GameStats(settings, screen) sb = Scoreboard(settings, screen, stats) sscreen = StartScreen(settings, screen) # Make a ship ship = Ship(settings, screen) # Make bunkers bunkers = [Bunker(screen, 400, 480)] # Make bullets and aliens group bullets = Group() aliens = Group() enemy_bullets = Group() # gf.create_fleet(settings, screen, ship, aliens) # Make buttons play_button = Button(screen, 'PLAY', screen.get_rect().centerx, 400) score_button = Button(screen, 'HIGH SCORE', screen.get_rect().centerx, 480) buttons = [play_button, score_button] # Set up music bg_music1 = pygame.mixer.Sound('audio/background_1.wav') bg_music2 = pygame.mixer.Sound('audio/background_2.wav') is_playing_music = False is_playing_music2 = False game_over_sound = pygame.mixer.Sound('audio/gameover.wav') # Boss timer boss_respawn_time = randint(10, 18) * 1000 # 10-18s at level 1 boss_timer = boss_respawn_time delta_time = 0 # Enemy fire timer enemy_fire_time = randint(2, 6) * 1000 # 2-6s at level 1 fire_timer = enemy_fire_time # Main game loop game_over = False while not game_over: gf.check_events(settings, screen, stats, sb, buttons, ship, aliens, bullets, enemy_bullets, bunkers) if stats.game_status == 2: # update bg music if not is_playing_music: bg_music1.play(-1) is_playing_music = True is_playing_music2 = False if len(aliens) - settings.boss_number <= 10 and not is_playing_music2: bg_music1.stop() bg_music2.play(-1) is_playing_music2 = True if is_playing_music2 and len(aliens) - settings.boss_number > 10: bg_music2.stop() bg_music1.play(-1) is_playing_music = True is_playing_music2 = False if ship.dead and ship.die_anim.finished and stats.ships_left > 0: pygame.mixer.stop() is_playing_music, is_playing_music2 = False, False # reset boss and fire timer when ship explodes boss_respawn_time = randint(10, 18) * 1000 boss_timer = int(boss_respawn_time / settings.enemy_timer_scale) enemy_fire_time = randint(2, 6) * 1000 fire_timer = int(enemy_fire_time / settings.enemy_timer_scale) for b in bunkers: b.update(bullets, enemy_bullets) ship.update() gf.update_ship(settings, screen, stats, sb, ship, aliens, bullets, enemy_bullets) gf.update_bullets(settings, screen, stats, sb, aliens, bullets, enemy_bullets) # Spawn boss if settings.boss_number < settings.boss_number_limit: if boss_timer <= 0: gf.create_boss(settings, screen, aliens) boss_respawn_time = randint(10, 18) * 1000 boss_timer = int(boss_respawn_time / settings.enemy_timer_scale) else: boss_timer -= delta_time gf.update_aliens(settings, screen, ship, aliens) # Enemy fire if fire_timer <= 0 and len(enemy_bullets) < settings.bullets_allowed: new_bullet = EnemyBullet(settings, screen, aliens) enemy_bullets.add(new_bullet) enemy_fire_time = randint(2, 6) * 1000 fire_timer = int(enemy_fire_time / settings.enemy_timer_scale) elif fire_timer > 0: fire_timer -= delta_time gf.update_enemy_bullets(settings, ship, bullets, enemy_bullets) else: # update music if is_playing_music or is_playing_music2: pygame.mixer.stop() is_playing_music, is_playing_music2 = False, False if stats.ships_left == 0: game_over_sound.play() # reset boss and fire timer to level 1 boss_respawn_time = randint(10, 18) * 1000 boss_timer = boss_respawn_time enemy_fire_time = randint(2, 6) * 1000 fire_timer = enemy_fire_time gf.update_screen(settings, screen, stats, sb, ship, aliens, bullets, enemy_bullets, bunkers, buttons, sscreen) delta_time = main_clock.tick(FPS)
def run_game(): pygame.init() clock = pygame.time.Clock() highscores = HighScore() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") sounds = Sound() play_button = Button(screen, pygame.image.load('images/play_btn.png'), 850, 400) high_score_button = Button(screen, pygame.image.load('images/high_score_btn.png'), 850, 600) menu_bg = Button(screen, pygame.image.load('images/menu.png'), ai_settings.screen_width / 2, ai_settings.screen_height / 2) stats = GameStats(ai_settings, highscores) sb = Scoreboard(ai_settings, screen, sounds, stats) ship = Ship(ai_settings, screen, sounds) bullets = Group() alien_bullets = Group() aliens = Group() ufo = UFO(ai_settings, screen, sounds) barriers = Group() smokes = Group() gf.create_fleet(ai_settings, screen, sounds, aliens) gf.create_barriers(ai_settings, screen, barriers) # timers used for animation and event checking alien_timer = Timer(ai_settings.alien_frame_factor) smoke_timer = Timer(8) ship_timer = Timer(4) ufo_timer = Timer(ai_settings.alien_frame_factor * 5) while True: clock.tick(60) gf.check_events(ai_settings, screen, sounds, stats, sb, highscores, play_button, high_score_button, ship, aliens, bullets, barriers, alien_bullets, smokes) if stats.game_active: gf.update_timers(alien_timer, ufo_timer, ship_timer, smoke_timer) gf.update_ship(stats, sb, highscores, ship, aliens, ufo, bullets, alien_bullets, ship_timer, alien_timer) if not ship.hit: gf.update_bullets(ai_settings, screen, sounds, stats, sb, ship, aliens, ufo, bullets, barriers, alien_bullets, smokes, alien_timer, ufo_timer, smoke_timer) gf.update_aliens(ai_settings, screen, sounds, ship, aliens, barriers, alien_bullets, alien_timer) gf.update_ufo(ufo, ufo_timer) gf.update_smokes(smokes, smoke_timer) gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, ufo, bullets, menu_bg, play_button, high_score_button, barriers, alien_bullets, smokes)