#ship.py

class Ship(Sprite):

def __init__(self,ai_settings,screen):
"""初始化飞船并设置其初始位置"""
super(Ship,self).__init__()
self.screen = screen
self.ai_settings = ai_settings

#加载飞船图像并获取其外接矩形
self.image = pygame.image.load('images/ship.png')
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()

#将每艘新飞船放在屏幕底部中央
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom

#在飞船的属性center中存储小数值
self.center = float(self.rect.centerx)

#移动标志
self.moving_right = False
self.moving_left = False

def update(self):
"""根据移动标志调整飞船的位置"""
#更新飞船的center值而不是rect
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 center_ship(self):
"""让飞船在屏幕上居中"""
self.center = self.screen_rect.centerx


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


#bullet.py

class Bullet(Sprite):
"""一个对飞船发射的子弹进行管理的类"""

def __init__(self,ai_settings,screen,ship):
"""在飞船所处的位置创建一个子弹对象"""
super().__init__()
self.screen = screen

#在(0,0)处创建一个表示子弹的矩形,再设置正确的位置
self.rect = pygame.Rect(0,0,ai_settings.bullet_width,
ai_settings.bullet_height)
self.rect.centerx = ship.rect.centerx
self.rect.top = ship.rect.top

#存储用小数表示的子弹位置
self.y = float(self.rect.y)

self.color = ai_settings.bullet_color
self.speed_factor = ai_settings.bullet_speed_factor
def update(self):
"""向上移动子弹"""
#更新表示子弹位置的小数值
self.y -= self.speed_factor
#更新表示子弹的rect的位置
self.rect.y = self.y

def draw_bullet(self):
"""在屏幕上绘制子弹"""
pygame.draw.rect(self.screen,self.color,self.rect)


#alien.py

class Alien(Sprite):
"""表示单个外星人的类"""

def __init__(self,ai_settings,screen):
"""初始化外星人并设置其起始位置"""
super(Alien,self).__init__()
self.screen = screen
self.ai_settings = ai_settings

#加载外星人图像 并设置其rect属性
self.image = pygame.image.load('images/alien.png')
self.rect = self.image.get_rect()

#每个外星人最初都在屏幕左上角附近
self.rect.x = self.rect.width
self.rect.y = self.rect.height

#存储外星人的准确位置
self.x = float(self.rect.x)

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

def check_edges(self):
"""如果外星人位于屏幕边缘 返回True"""
screen_rect = self.screen.get_rect()
if self.rect.right >= screen_rect.right:
return True
elif self.rect.left <= 0:
return True


def update(self):
"""向右移动外星人"""
self.x += (self.ai_settings.alien_speed_factor *
self.ai_settings.fleet_direction)
self.rect.x = self.x


#gamestats

class GameStats():
"""跟踪游戏的信息"""

def __init__(self,ai_settings):
"""初始化统计信息"""
self.ai_settings = ai_settings
self.reset_stats()

#游戏刚启动时处于 非 活动状态
self.game_active = False

#在任何情况下都不应重置最高得分
self.high_score = 0

def reset_stats(self):
"""初始化在游戏运行期间可能变化的统计信息"""
self.ships_left = self.ai_settings.ship_limit
self.score = 0

self.level = 1

#button.py

class Button():

def __init__(self,ai_settings,screen,msg):
"""初始化按钮的属性"""
self.screen = screen
self.screen_rect = screen.get_rect()

#设置按钮的尺寸和其他属性
self.width,self.height = 200,50
self.button_color = (255,220,0)
self.text_color = (255,255,255)
self.font = pygame.font.SysFont(None,48)

#创建按钮的rect图像居中
self.rect = pygame.Rect(0,0,self.width,self.height)
self.rect.center = self.screen_rect.center

#按钮的标签只需要创建一次
self.prep_msg(msg)

def prep_msg(self,msg):
"""将msg渲染为图像在按钮居中"""
self.msg_image = self.font.render(msg,True,self.text_color,
self.button_color)
self.msg_image_rect = self.msg_image.get_rect()
self.msg_image_rect.center = self.rect.center

def draw_button(self):
#绘制一个用颜色填充的按钮还有文本
self.screen.fill(self.button_color,self.rect)

self.screen.blit(self.msg_image,self.msg_image_rect


更多相关文章

  1. sqlserver2008r2查找非中文字母数字出现的第一个位置
  2. 如何将图像加载到PictureBox;基于存储在DataBase中的图像位置
  3. Google Play服务API(位置服务)是否需要数据计划?
  4. 路径提供者文档目录是一个安全的位置吗?
  5. 设置自定义Dialog的大小和位置
  6. 以编程方式将位置模式更改为高精度Android
  7. 【Based Android】android通过criteria选择合适的地理位置服务
  8. Settings点击Location(位置)后右上角的开关button不会消失
  9. 在android上滚动时,列表视图的位置会发生变化

随机推荐

  1. 深入理解MySQL 5.7 GTID系列(十):实际案例二
  2. 如何把mysql服务添加到windows系统服务当
  3. 转!mysql 查询 distinct多个字段 注意!!
  4. 如何在MySQL中创建关系
  5. mysql查询统计连接情况
  6. Django dumpdata无法序列化现有列
  7. mysql5.7.23免安装配置说明in win7
  8. MySQL是一个非常流行的小型关系型数据库
  9. mysql5.7 Access denied for user 'root'
  10. 分页检索大型ResultSet