#!/usr/bin/env python3
# -*- coding: utf-8 -*-
r'''
ship模块，其中包含Ship类，它负责管理飞船的大部分行为。 
'''
import os
import pygame
from pygame.sprite import Sprite

import game_functions as gf

class Ship(Sprite):
    """ Ship类，负责管理飞船大部分行为 """
    def __init__(self, ai_settings, screen):
        """ 初始化飞船并设置其初始位置 """
        super(Ship, self).__init__()
        self.screen = screen
        self.ai_settings = ai_settings
        # 加载飞船图像并获取其外接矩形
        image_ship_path = os.path.join(os.path.join(gf.get_cur_path(), 'images'), 'ship.bmp')
        self.image = pygame.image.load(image_ship_path)    # r'E:\PythonWorkspace\alien_invasion\images\ship.bmp'
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()
        # 将每艘新飞船放于屏幕底部中央
        self.rect.centerx = self.screen_rect.centerx    # 飞船（矩形）中心的x坐标
        self.rect.bottom = self.screen_rect.bottom    # 飞船（矩形）下边缘的y坐标
        # 在飞船的属性center中存储小数值
        self.center = float(self.rect.centerx)
        # 移动标志；飞船不动时，标志moving_right将为False 。玩家按下右箭头键时，我们将这个标志设置为True ；而玩家松开时，我们将这个标志重新设置为False 。 
        # 该标志是为了实现按住右箭头键不放时，飞船不断地向右移动；向左移动标志moving_left同理
        self.moving_right = False
        self.moving_left = False

    def update(self):
        """ 根据移动标志调整飞船的位置 """
        # 更新飞船的center值，而不是rect；因为：self.center = float(self.rect.centerx)，center中存储的为飞船（矩形）中心的x坐标
        if self.moving_right and self.rect.right < self.screen_rect.right:
            self.center += self.ai_settings.ship_speed_factor
        if self.moving_left and self.rect.left > 0:
            self.center -= self.ai_settings.ship_speed_factor
        # 根据self.center更新rect对象
        self.rect.centerx = self.center

    def blitme(self):
        """ 在指定位置绘制飞船 """
        self.screen.blit(self.image, self.rect)

    def center_ship(self):
        """ 让飞船在屏幕底部中央 """
        self.center = self.screen_rect.centerx
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
r'''
ship模块，其中包含Ship类，它负责管理飞船的大部分行为。 
'''
import os
import pygame
from pygame.sprite import Sprite

import game_functions as gf

class Ship(Sprite):
    """ Ship类，负责管理飞船大部分行为 """
    def __init__(self, ai_settings, screen):
        """ 初始化飞船并设置其初始位置 """
        super(Ship, self).__init__()
        self.screen = screen
        self.ai_settings = ai_settings
        # 加载飞船图像并获取其外接矩形
        image_ship_path = os.path.join(os.path.join(gf.get_cur_path(), 'images'), 'ship.bmp')
        self.image = pygame.image.load(image_ship_path)    # r'E:\PythonWorkspace\alien_invasion\images\ship.bmp'
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()
        # 将每艘新飞船放于屏幕底部中央
        self.rect.centerx = self.screen_rect.centerx    # 飞船（矩形）中心的x坐标
        self.rect.bottom = self.screen_rect.bottom    # 飞船（矩形）下边缘的y坐标
        # 在飞船的属性center中存储小数值
        self.center = float(self.rect.centerx)
        # 移动标志；飞船不动时，标志moving_right将为False 。玩家按下右箭头键时，我们将这个标志设置为True ；而玩家松开时，我们将这个标志重新设置为False 。 
        # 该标志是为了实现按住右箭头键不放时，飞船不断地向右移动；向左移动标志moving_left同理
        self.moving_right = False
        self.moving_left = False

    def update(self):
        """ 根据移动标志调整飞船的位置 """
        # 更新飞船的center值，而不是rect；因为：self.center = float(self.rect.centerx)，center中存储的为飞船（矩形）中心的x坐标
        if self.moving_right and self.rect.right < self.screen_rect.right:
            self.center += self.ai_settings.ship_speed_factor
        if self.moving_left and self.rect.left > 0:
            self.center -= self.ai_settings.ship_speed_factor
        # 根据self.center更新rect对象
        self.rect.centerx = self.center

    def blitme(self):
        """ 在指定位置绘制飞船 """
        self.screen.blit(self.image, self.rect)

    def center_ship(self):
        """ 让飞船在屏幕底部中央 """
        self.center = self.screen_rect.centerx
#!/usr/bin/env python3 # -*- coding: utf-8 -*- ship模块，其中包含Ship类，它负责管理飞船的大部分行为。 Ship类，负责管理飞船大部分行为 初始化飞船并设置其初始位置 # 加载飞船图像并获取其外接矩形 # r'E:\PythonWorkspace\alien_invasion\images\ship.bmp' # 将每艘新飞船放于屏幕底部中央 # 飞船（矩形）中心的x坐标 # 飞船（矩形）下边缘的y坐标 # 在飞船的属性center中存储小数值 # 移动标志；飞船不动时，标志moving_right将为False 。玩家按下右箭头键时，我们将这个标志设置为True ；而玩家松开时，我们将这个标志重新设置为False 。 # 该标志是为了实现按住右箭头键不放时，飞船不断地向右移动；向左移动标志moving_left同理 根据移动标志调整飞船的位置 # 更新飞船的center值，而不是rect；因为：self.center = float(self.rect.centerx)，center中存储的为飞船（矩形）中心的x坐标 # 根据self.center更新rect对象 在指定位置绘制飞船 让飞船在屏幕底部中央