1. 和平精英(三)
    1. 目标
      1. 添加移动靶
    2. 知识点
      1. 1、加载图片和声音
        1. 加载靶子的图片和射击子弹的声音可通过如下两步实现:首先,使用pygame.image.load()方法加载图片,图片文件是 target.png;其次,使用 pygame.mixer.Sound()加载音乐文件,音乐文件是 shoot.wav。
      2. 2、定义靶子类
        1. 定义靶子类需要确定属性和方法。靶子的属性有:坐标,用 x 和 y 表示;大小,用 width和 height 表示;图片,用 img 表示;移动间距,用 perx 表示,每次出现一个靶子,就随机一个移动间距值,这样就可以实现靶子移动速度的不同了。
          1. 代码实现
      3. 3、添加靶子对象
        1. 使用列表存储创建好的靶子对象,因为屏幕中每次只有一个靶子,所以当列表为空时,就向其添加一个靶子对象,否则就不用添加。具体方法如下:首先,定义一个空列表 targets,用来存储靶子对象;然后,定义 targetEnter 方法,在方法中判断列表 targets 的长度,如果为 0,向列表中添加靶子对象Target(1260,280,60,90,target,random.randint(3,9))。
      4. 4、画出靶子并移动
        1. 游戏的效果为靶子从右侧逐渐移动到左侧,如果打中,则立刻再重新出现一个靶子。这个效果可以通过如下三步实现:首先,定义 drawTarget 方法,在方法中使用 for in 循环遍历 targets 列表,调用 target 的 draw 方法;然后,定义 targetMove 方法,在方法中使用 for in 循环遍历 targets 列表,调用 target 的 move 方法;最后,找到主程序循环中, 在判断游戏状态为运行状态下,调用 targetEnter 方法、drawTarget 方法以及 targetMove方法
      5. 单词
  2. 和平精英(四)
    1. 目标
      1. 瞄准打靶
    2. 流程
      1. 1、删除无效靶子
        1. 为实现当靶子移出屏幕后会再次从右侧出现的效果,可通过如下三步:
          1. 首先,定义deleteTarget 方法,使用 for in 循环遍历 targets 列表;然后,判断靶子的 x 坐标,如果小于-60,调用 remove 方法将靶子移除;最后,在主程序循环中调用 deleteTarget 方法。
      2. 2、检测射中靶子
        1. 当瞄准镜的中心点打中头部时,即为射中靶子,所以需要分析出镜头中心点的 x 坐标 和靶子头部的 x 坐标之间存在的关系。靶子的宽度为 60,镜头的宽度为 100,可得镜头中 心点的坐标是 camera.x+50,靶子头部左侧的坐标约为 target.x+20,右侧的坐标约为 target.x+40。所以想要射中靶子,镜头就需要在这两个坐标之间
          1. 分析出坐标后,为靶子类添加检测方法 hit,并传入参数 c,用来表示镜头。方法中使 用 return 返回镜头的 x 坐标的取值范围。
      3. 3、完成射击靶子
        1. 当发生鼠标点击事件,并且游戏处在运行状态时:调用 play 方法,播放发射子弹声音; 使用 for in 循环遍历 targets 列表,判断是否被击中;如果击中,则使用 remove 方法移除目标靶子。
      4. 单词