Esempio n. 1
0
    def __init__(self):
        """Initaialize the game"""
        pygame.init()
        self.settings = Settings()

        #Screen windows mode
        self.screen = pygame.display.set_mode(
            (self.settings.screen_width, self.settings.screen_height))

        pygame.display.set_caption('Alien Invasion')

        #Create an instaance to store game statistics
        # and create scoreboard

        self.stats = GameStats(self)
        self.sb = Scoreboard(self)

        self.ship = Ship(self)
        self.bullets = pygame.sprite.Group()
        self.aliens = pygame.sprite.Group()

        #Look for aliens-ship collisions

        self._create_fleet()

        #Make play button
        self.play_button = Button(self, "Play")
Esempio n. 2
0
def run_game():
	pygame.init()
	#实例化一个Settings对象,对象名为ai_settings
	ai_settings = Settings()
	#set_mode()返回的surface表示整个游戏窗口
	screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
	pygame.display.set_caption("Alien Invasion ding")	
	#创建一艘飞船
	ship = Ship(ai_settings,screen)
	#创建一个用于存储子弹的编组
	bullets = Group()
	#创建一个外星人编组
	aliens = Group()
	#创建外星人群
	gf.create_fleet(ai_settings,screen,ship,aliens)
	#创建一个用于统计游戏信息的实例
	stats = GameStats(ai_settings)
	#创建积分牌
	sb = Scoreboard(ai_settings,screen,stats)
	#创建play按钮
	play_button = Button(ai_settings,screen,"play")
	
    #开始游戏的主循环,
	while True:
		#监视键盘和鼠标事件
		gf.check_events(ai_settings,screen,stats,play_button,ship,aliens,bullets)
		if stats.game_active:
			#更新飞船的位置
			ship.update()
			#更新子弹的位置,并删除已消失的子弹
			gf.update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets)
			gf.update_aliens(ai_settings,stats,screen,ship,aliens,bullets)
		#更新屏幕上的图像,并切换到新屏幕
		gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button)
Esempio n. 3
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")
    # 创建play按钮
    play_button = Button(ai_settings, screen, "PLAY")
    # 创建一个用于存储游戏统计信息的实例并创建记分牌
    stats = GameStats(ai_settings)
    scoreboard = Scoreboard(ai_settings, screen, stats)

    # 创建一个飞船
    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, stats, play_button, ship, aliens, bullets, scoreboard)
        if stats.game_active:
            ship.update()
            gf.update_bullets(ai_settings, screen, ship, aliens, bullets, stats, scoreboard)
            gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets, scoreboard)
        gf.update_screen(ai_settings, screen, stats, ship, bullets, aliens, play_button, scoreboard)
Esempio n. 4
0
def run_game():
    pygame.init()
    new_setting = Settings_1()
    screen = pygame.display.set_mode((new_setting.screen_width,
    new_setting.screen_height))
    pygame.display.set_caption("Alian Invasion")
    #创建一个play按钮
    play_button = Button(new_setting,screen,"Play")
    #创建一个用于存储游戏统计信息的实例
    stats = GameStats(new_setting)
    #创建存储游戏统计信息的实例,并创建记分牌
    sb = Scoreboard(new_setting,screen,stats)
    #创建一艘飞船
    ship = Ship(new_setting,screen)
    #创建一个用于存储子弹的编组
    bullets = Group()
    #创建一个外星人
    #alien = Alien(new_setting,screen)
    aliens = Group()
    gf.create_fleet(new_setting,screen,ship,aliens)
    #游戏主循环
    while True:
        #监视键盘和鼠标事件
        gf.check_events(new_setting,screen,stats,sb,play_button,ship,aliens,bullets)
        if stats.game_active:
            ship.update()
            gf.update_bullets(new_setting,screen,stats,sb,ship,aliens,bullets)
            gf.update_aliens(new_setting,stats,sb,screen,ship,aliens,bullets)
        #print(len(bullets))  主句代码用于监测是否所有的子弹都被删除了   
        #让最近绘制的屏幕可见
        gf.update_screen(new_setting,screen,stats,sb,ship,aliens,bullets,play_button)
def run_game():
    #初始化pygame,设置和屏幕对象
    pygame.init()
    ai_sett = AlienSett()
    screen = pygame.display.set_mode(
        (ai_sett.screen_width, ai_sett.screen_height))
    pygame.display.set_caption("Press P to start")

    #创建Play按钮
    play_button = Button(ai_sett, screen, "Play")

    #创建一个用于存储游戏统计信息的实例
    stats = GameStats(ai_sett)
    sb = Scoreboard(ai_sett, screen, stats)

    #创建一艘飞船、一个子弹编组和一个外星人编组
    ship = Ship(screen, ai_sett)
    bullets = Group()
    aliens = Group()

    # 创建外星人群
    gf.create_fleet(ai_sett,screen,ship,aliens)


    #开始游戏主循环
    while True:
        #监视键盘和鼠标事件
        gf.check_events(ai_sett, screen, stats, play_button, ship, aliens, bullets)

        if stats.game_active:
            ship.update()
            gf.update_bullets(ai_sett, screen, stats, sb, ship, aliens, bullets)
            gf.update_aliens(ai_sett, screen, stats,  ship, aliens ,bullets)
            gf.update_screen(ai_sett, screen, stats, sb, ship, aliens, bullets,  play_button)
Esempio n. 6
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 War")
    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()
    f.create_fleet(ai_settings, screen, ship, aliens)
    # Назначение цвета фона
    bg_color = (100, 100, 100)
    alien = Alien(ai_settings, screen)
    while True:
        f.check_events(ai_settings, screen, stats, sb, play_button, ship,
                       aliens, bullets)
        if stats.game_active:
            ship.update()
            f.update_bullets(ai_settings, screen, stats, sb, ship, aliens,
                             bullets)
            f.update_aliens(ai_settings, screen, stats, sb, ship, aliens,
                            bullets)
        f.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets,
                        play_button)
Esempio n. 7
0
class AlienInvasion(object):
    """Overall class to manage game AlienInvasion"""
    def __init__(self):
        """Initaialize the game"""
        pygame.init()
        self.settings = Settings()

        #Screen windows mode
        self.screen = pygame.display.set_mode(
            (self.settings.screen_width, self.settings.screen_height))

        pygame.display.set_caption('Alien Invasion')

        #Create instance to store game statistics
        self.stats = GameStats(self)

        self.ship = Ship(self)
        self.bullets = pygame.sprite.Group()
        self.aliens = pygame.sprite.Group()

        #Look for aliens-ship collisions

        self._create_fleet()

        #Make play button
        self.play_button = Button(self, "Play")

    def _create_fleet(self):
        """Create the fleet of aliens"""
        #create an alien and find the number of aliens ina row
        #spacing between each alien is equal to one alien width
        alien = Alien(self)
        alien_width, alien_height = alien.rect.size
        available_space_x = self.settings.screen_width - (2 * alien_width)
        number_aliens_x = (available_space_x // (2 * alien_width))

        #determine the number of rows of aliens that fit on the screen
        ship_height = self.ship.rect.height
        available_space_y = (self.settings.screen_height - (3 * alien_height) -
                             ship_height)
        number_rows = (available_space_y // (2 * alien_height)) - 2

        #create the full flet of aliens

        for row_number in range(number_rows):
            for alien_number in range(number_aliens_x):
                self._create_alien(alien_number, row_number)

    def _create_alien(self, alien_number, row_number):
        """Create an alien and place it in the row"""
        alien = Alien(self)
        alien_width, alien_height = alien.rect.size
        alien_width = alien.rect.width
        alien.x = alien_width + 2 * alien_width * alien_number
        alien.rect.x = alien.x
        alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
        self.aliens.add(alien)

    def _check_fleet_edges(self):
        """Respond appropiately if anyaliens have reached an edge"""
        for alien in self.aliens.sprites():
            if alien.check_edges():
                self._change_fleet_direction()
                break

    def _change_fleet_direction(self):
        """Drop the entire fleet and change the fleet direction"""
        for alien in self.aliens.sprites():
            alien.rect.y += self.settings.fleet_droop_speed
        self.settings.fleet_direction *= -1

    def run_game(self):
        """Start main game loop"""
        while True:
            self._check_events()

            if self.stats.game_active:
                self.ship.update()
                self._update_bullets()
                self._update_aliens()

            self._update_screen()

    def _update_bullets(self):
        """Update  position of bullets and get tid of the old ones"""
        #Update bullet possitions
        self.bullets.update()

        #Get rid of old bullets
        for bullet in self.bullets.copy():
            if bullet.rect.bottom <= 0:
                self.bullets.remove(bullet)

        self._check_bullet_alien_collisions()

    def _check_bullet_alien_collisions(self):
        """Respond t bullet-alien colisions"""

        #Check forany bullets that have hit aliens
        #if so get hit of the bullet and the alien

        collisions = pygame.sprite.groupcollide(self.bullets, self.aliens,
                                                False, True)

        if not self.aliens:
            #Destroy existing bullets and create new fleet
            self.bullets.empty()
            self._create_fleet()

    def _check_events(self):
        """Respond for keypress"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

            elif event.type == pygame.KEYDOWN:
                self._check_keydown_events(event)

            elif event.type == pygame.KEYUP:
                self._check_keyup_events(event)

            elif event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = pygame.mouse.get_pos()
                self._check_play_button(mouse_pos)

    def _check_keydown_events(self, event):
        """Respond for key presses"""
        if event.key == pygame.K_RIGHT:
            self.ship.moving_right = True
        elif event.key == pygame.K_LEFT:
            self.ship.moving_left = True
        elif event.key == pygame.K_UP:
            self.ship.moving_up = True
        elif event.key == pygame.K_DOWN:
            self.ship.moving_down = True
        elif event.key == pygame.K_SPACE:
            self._fire_bullet()
        elif event.key == pygame.K_p:
            self._start_game()

        #WASD keyborad to play

        elif event.key == pygame.K_d:
            self.ship.moving_right = True
        elif event.key == pygame.K_a:
            self.ship.moving_left = True
        elif event.key == pygame.K_w:
            self.ship.moving_up = True
        elif event.key == pygame.K_s:
            self.ship.moving_down = True

        elif event.key == pygame.K_q:
            sys.exit()

    def _check_keyup_events(self, event):
        """Respond for key releases"""
        if event.key == pygame.K_RIGHT:
            self.ship.moving_right = False
        if event.key == pygame.K_LEFT:
            self.ship.moving_left = False
        if event.key == pygame.K_UP:
            self.ship.moving_up = False
        if event.key == pygame.K_DOWN:
            self.ship.moving_down = False

        #WASD cursor

        if event.key == pygame.K_d:
            self.ship.moving_right = False
        if event.key == pygame.K_a:
            self.ship.moving_left = False
        if event.key == pygame.K_w:
            self.ship.moving_up = False
        if event.key == pygame.K_s:
            self.ship.moving_down = False

    def _fire_bullet(self):
        """Create a new bullet and add it to the group"""
        if len(self.bullets) < self.settings.bullets_allowed:
            new_bullet = Bullet(self)
            self.bullets.add(new_bullet)

    def _update_screen(self):
        """Update images on the screen, and flip to the new screen"""
        self.screen.fill(self.settings.bg_color)
        self.ship.blitme()
        for bullet in self.bullets.sprites():
            bullet.draw_bullet()
        self.aliens.draw(self.screen)

        #Draw the play button if the game is incative
        if not self.stats.game_active:
            self.play_button.draw_button()

        pygame.display.flip()

    def _update_aliens(self):
        """
		Check if the fleet is at an edge,
			then update the positions of all aliens in the fleet
		"""
        self._check_fleet_edges()
        self.aliens.update()

        #Look for alien ship colisions

        if pygame.sprite.spritecollideany(self.ship, self.aliens):
            self._ship_hit()

        #Look for aliens hitting the bottom of screen
        self._check_aliens_bottom()

    def _ship_hit(self):
        """Respond to the ship beinghit by an alien"""
        if self.stats.ships_left > 0:
            #Decrement ships left
            self.stats.ships_left -= 1

            #get rid of  any remaining aliensand bulets
            self.aliens.empty()
            self.bullets.empty()

            #create a new fleet and center ship

            self.ship.center_ship()
            self._create_fleet()

            #Pause
            sleep(1)
        else:
            self.stats.game_active = False
            pygame.mouse.set_visible(True)

    def _check_aliens_bottom(self):
        """Check if any aliens reached the bottom of the screen"""
        screen_rect = self.screen.get_rect()
        for alien in self.aliens.sprites():
            if alien.rect.bottom >= screen_rect.bottom:
                #Treat this the same as if the ship got hit
                self._ship_hit()
                break

    def _check_play_button(self, mouse_pos):
        button_clicked = self.play_button.rect.collidepoint(mouse_pos)
        if button_clicked and not self.stats.game_active:
            self._start_game()

    def _start_game(self):
        # Reset the game statistics.
        self.stats.reset_stats()
        self.stats.game_active = True
        # Hide the mouse cursor.
        pygame.mouse.set_visible(False)
        #Getrid of any remaning aliens and bullets
        self.aliens.empty()
        self.bullets.empty()
        #Create  a new fleet.
        self._create_fleet()
        self.ship.center_ship()