예제 #1
0
def run_game():
    # Init a game and create screen object
    pygame.init()
    pygame.display.set_caption("Alien Invasion")
    ai_settings = Settings()  # ai_settings means Alien Invasion Settings
    screen = pygame.display.set_mode(
        (ai_settings.screen_width, ai_settings.screen_height))

    play_button = Button(ai_settings, screen, "Play")
    aliens = Group()
    ship = Ship(ai_settings, screen)
    bullets = Group()
    stats = GameStats(ai_settings)
    sb = Scoreboard(ai_settings, screen, stats)

    gf.create_fleet(ai_settings, screen, ship, aliens)
    # Main loop for the game
    while True:
        gf.check_events(ai_settings, screen, stats, sb, play_button, ship,
                        aliens, bullets)
        if stats.game_active:
            ship.update()
            gf.update_bullets(ai_settings, screen, sb, stats, ship, aliens,
                              bullets)
            gf.update_aliens(ai_settings, stats, screen, sb, ship, aliens,
                             bullets)

        gf.update_screen(ai_settings, screen, sb, stats, ship, aliens, bullets,
                         play_button)
예제 #2
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, aliens)

    # 开始游戏的主循环
    while True:
        #监视键盘和鼠标事件
        gf.check_events(ai_settings, screen, ship, bullets)
        ship.update()
        gf.update_bullets(bullets)

        # 每次循环时都重绘屏幕
        gf.update_screen(ai_settings, screen, ship, aliens, bullets)
예제 #3
0
def run_game():
    '''初始化游戏,并创建一个屏幕对象'''
    # 初始化背景设置
    pygame.init()
    # 创建screen 窗口,并指定游戏窗口的尺寸
    # screen 是一个surface,在py中,surface是屏幕的一部分,用于显示游戏元素
    # 游戏中的每一个元素都是 surface
    #screen = pygame.display.set_mode((1200,800))

    # 法2:通过settings类实例进行屏幕的绘制
    #  设置项目归为一个类
    ai_settings = Settings()
    screen = pygame.display.set_mode(
        (ai_settings.screen_width, ai_settings.screen_height))

    # 设置框t体标题
    pygame.display.set_caption("Alien Invasion")

    # 创建一艘飞船
    ship = Ship(ai_settings, screen)
    # 创建一个用于存储子弹的编组
    bullets = Group()

    # 设置背景色
    #bg_color = (230,230,230)

    # 开始游戏的主循环,没经过一次循环都将自动重绘这个surface
    while True:

        # 监视键盘和鼠标事件
        '''
        for event in pygame.event.get():
            # 点击“关闭”按钮
            if event.type == pygame.QUIT:
                sys.exit()  # 退出游戏
        '''
        # 取得标志位
        #gf.check_evects(ship)
        gf.check_events(ai_settings, screen, ship, bullets)

        # 根据标志位,调用update()方法,进行飞船的移动
        ship.update()
        bullets.update()

        # 循环 重绘屏幕,用背景色进行填充
        #screen.fill(bg_color)
        # 法2:
        '''
        screen.fill(ai_settings.bg_color)
        ship.blitem() # 将飞机绘制到屏幕上
        # 让最近绘制的屏幕可见,则将不断更新屏幕,以显示元素的新位置,并在原来的位置隐藏元素,营造平滑移动的效果
        pygame.display.flip()
        '''
        # 删除已消失的子弹
        for bullet in bullets.copy():
            if bullet.rect.bottom <= 0:
                bullets.remove(bullet)
        print(bullets)

        gf.update_screen(ai_settings, screen, ship, bullets)
예제 #4
0
def run_game():
    """"Runs the game"""

    pygame.init()
    settings = Settings()

    screen = pygame.display.set_mode((settings.width, settings.height))
    pygame.display.set_caption("Alien Invasion: Cirno Edition")

    # Make a ship
    ship = Ship(screen, settings)

    # Make a group for bullets and aliens, used for storing
    bullets = Group()
    aliens = Group()

    gf.create_fleet(settings, screen, ship, aliens)

    while True:
        gf.check_events(screen, settings, ship, bullets)
        ship.update()
        bullets.update()
        gf.update_aliens(settings, aliens)
        gf.remove_bullet(bullets)
        gf.update_screen(settings, screen, ship, aliens, bullets)
        gf.check_mouse_collision(aliens, bullets)
예제 #5
0
 def prep_ships(self):
     self.ships = Group()
     for ship_number in range(self.stats.ship_left):
         ship = Ship(self.ai_settings, self.screen)
         ship.rect.x = 10 + ship_number * ship.rect.width
         ship.rect.y = 10
         self.ships.add(ship)
    def __init__(self, ai_settings: Settings, stats: GameStats, **kwargs: game_items_types):
        """Initialize with default items unless specified in kwargs."""

        # Default initializations for game items.
        # Initialize screen.
        flags = pygame.HWSURFACE | pygame.DOUBLEBUF    # | pygame.FULLSCREEN
        self.screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height), flags)
        pygame.display.set_caption("Alien Invasion Game")

        # Initialize ship.
        self.ship = Ship(ai_settings, self.screen)

        # Initialize aliens group.
        self.aliens = Group()

        # Initialize bullets group.
        self.bullets = Group()

        # Initialize buttons.
        self.play_button = Button(self.screen, "Play!")

        # TODO implement Restart and Cancel buttons.
        # self.restart_button = Button(self.screen, "Restart")
        # self.cancel_button = Button(self.screen, "Cancel", (255, 0, 0, 80))
        # self.set_button_pos()

        # Initialize scorecard.
        self.sb = Scorecard(ai_settings, stats, self.screen)

        # Set the game items for those default values are given.
        for game_item in kwargs:
            if game_item in self.acceptable_game_items:
                self.__setattr__(game_item, kwargs[game_item])
예제 #7
0
def ran_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")
    #设置背景颜色
    bg_color = (ai_settings.bg_color)
    #创建一艘飞船
    ship = Ship(ai_settings, screen)

    #开始游戏的主循环
    while True:
        #监视键盘和鼠标事件
        game_functions.check_events(ship)
        ship.update()
        #每次循环都重绘制屏幕
        game_functions.update_screen(ai_settings, screen, ship)
    def prep_ships(self):
        """Show how many ships are left."""
        ship_str = "Ships left:  " if self.stats.ships_left > 0 else "No ships left."
        self.ship_str_image = self.font.render(ship_str, True, self.font_color)
        self.ship_str_rect = self.ship_str_image.get_rect()
        self.ship_str_rect.x = 10
        self.ship_str_rect.y = self.score_rect.top

        self.ships = Group()
        for ship_number in range(self.stats.ships_left):
            ship = Ship(self.ai_settings, self.screen, self.score_ship_size)
            ship.rect.x = self.ship_str_rect.width + ship_number * ship.rect.width
            ship.rect.centery = self.ship_str_rect.centery
            self.ships.add(ship)
def check_keyup_events(event: EventType, ship: Ship):
    """Respond when key is stopped being pressed."""
    if event.key == pygame.K_RIGHT:
        ship.moving_right = False
    elif event.key == pygame.K_LEFT:
        ship.moving_left = False