Exemplo n.º 1
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
 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")
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
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)
Exemplo n.º 13
0
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)
Exemplo n.º 14
0
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)
Exemplo n.º 15
0
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)
Exemplo n.º 16
0
        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)
Exemplo n.º 17
0
    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
Exemplo n.º 18
0
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)
Exemplo n.º 19
0
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)