Python:飞机大战游戏7:发射子弹以及碰撞检测

简介: Python:飞机大战游戏7:发射子弹以及碰撞检测

image.png


一、发射子弹



  • 1.1、回顾一下英雄发射子弹的需求
  • (1)、游戏启动后,英雄 出现在屏幕的 水平中间 位置,距离屏幕底部 120像素
  • (2)、英雄 每隔 0.5 秒 发射一次子弹,每次 连发三枚子弹
  • (3)、英雄 默认不会移动,需要通过 左/右 方向键,控制 英雄 在水平方向移动
  • 1.2、添加发射子弹事件pygame  的 定时器 使用套路非常固定
  • (1)、定义 定时器 常量 --- eventid
  • (2)、在 初始化方法 中,调用 set_timer 方法 设置定时器事件
  • (3)、在 英雄循环 中,监听定时器事件
  • 代码实现: 在hero 中定义 fire 方法


def fire(self):
       print("发射子弹")
  • 定义英雄发射子弹事件
# 定义英雄发射子弹事件常量(创建敌机的定时器常量)
HERO_FIRE_EVENT = pygame.USEREVENT + 1
  • 初始化方法 中,调用 set_timer 方法 设置定时器事件


# 5、设置英雄发射子弹定时器事件(每0.5秒发射一次子弹)
pygame.time.set_timer(CREATE_HERO_FIRE_EVENT, 500)
  • 英雄循环 中,监听定时器事件


elif event.type == CREATE_HERO_FIRE_EVENT:
         # 英雄发射子弹
         self.hero.fire()
  • 1.3、定义子弹类
  • 对子弹的需求:
  • 子弹 从英雄 的正上方发射 沿直线上方 飞行
  • 飞出屏幕后,需要从 精灵组 中删除
  • Bullet - 子弹类
  • 初始化方法: 指定子弹的 图片 和初始速度 = -2向上飞


def __init__(self):
     super().__init__("./images/bullet1.png",-2)
  • 重写 update() 方法:判断子弹是否飞出了屏幕,如果是:把子弹从子弹的精灵组删除


# 判断子弹是否从屏幕顶部飞出去
if self.rect.bottom < 0:
      # 从子弹精灵组删除子弹
      self.kill()
  • 1.4、发射子弹
  • Hero 的初始化方法中创建 子弹精灵组 属性


# 3、定义子弹的精灵组
self.bullets_group = pygame.sprite.Group()
  • 修改 plan_main.py__update_sprites 方法,让子弹精灵组 调用 updatedraw来显示子弹


# update - 让组中的所有精灵更新位置
self.hero.bullets_group.update()
# draw - 在screen上绘制所有的精灵
self.hero.bullets_group.draw(self.screen)
  • 实现 fire() 方法,并且利用元组循环一次创建三个子弹精灵组


def fire(self):
      print("发射子弹")
      for i in (0,1,2):
             # 1、创建子弹精灵
             bullet = Bullet()
             # 2、设置精灵的位置
             bullet.rect.x = self.rect.centerx
             bullet.rect.y = self.rect.y - i * 20 - 5
             # 3、将精灵添加到精灵组
             self.bullets_group.add(bullet)


二、碰撞检测



  • 2.1、了解碰撞检测方法
  • pygame 提供了 两个非常方便 的方法可以实现碰撞检测:
  • (1)、pygame.sprite.groupcollide()
  • 两个精灵组所有的精灵 的碰撞检测


pygame.sprite.groupcollide(group1,group2,dokill1,dokill2,collided = None) -> Sprite_dic
  • 如果将 dokill 设置为 True ,则发生碰撞的精灵将被自动移除,dokill1是与group1关联的,dokill2是与group2关联的;collided 参数是用于 计算碰撞的回调函数,如果没有指定,则每一个精灵必须有一个 rect属性
  • (2)、pygame.sprite.spritecollide()
  • 判断 某个精灵指定精灵组 中的精灵的碰撞(sprite是某一个独立的精灵,group与dokill是绑定的)


pygame.sprite.spritecollide(sprite,group,dokill,collided = None) -> Sprite_list
  • 如果将 dokill 设置为 true,则 指定精灵组方式碰撞的精灵将被自动移除
  • collided 参数是用于 计算碰撞的回调函数,如果没有指定,则每个精灵必有一个 rect 属性
  • 返回 精灵组  中跟 精灵 发生碰撞的 精灵列表(可以根据列表是否有值来判断精灵的去留)
  • 2.2、碰撞的实现


def __check_collide(self):
     print("碰撞检测")
     # 1、子弹摧毁敌机
     pygame.sprite.groupcollide(self.hero.bullets_group,self.enemy_group,True,True)
      # 2、敌机撞毁英雄
      enemies = pygame.sprite.spritecollide(self.hero,self.enemy_group,True)
      if len(enemies) > 0:
          # 让英雄牺牲
          self.hero.kill()
          # 游戏结束
          self.__game_over()


目录
相关文章
|
6月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
818 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
8月前
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
461 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
2月前
|
监控 编译器 Python
如何利用Python杀进程并保持驻留后台检测
本教程介绍如何使用Python编写进程监控与杀进程脚本,结合psutil库实现后台驻留、定时检测并强制终止指定进程。内容涵盖基础杀进程、多进程处理、自动退出机制、管理员权限启动及图形界面设计,并提供将脚本打包为exe的方法,适用于需持续清理顽固进程的场景。
|
3月前
|
人工智能 搜索推荐 数据可视化
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
260 1
|
8月前
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
239 7
|
8月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
328 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
8月前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
228 20
|
7月前
|
监控 Java 计算机视觉
Python图像处理中的内存泄漏问题:原因、检测与解决方案
在Python图像处理中,内存泄漏是常见问题,尤其在处理大图像时。本文探讨了内存泄漏的原因(如大图像数据、循环引用、外部库使用等),并介绍了检测工具(如memory_profiler、objgraph、tracemalloc)和解决方法(如显式释放资源、避免循环引用、选择良好内存管理的库)。通过具体代码示例,帮助开发者有效应对内存泄漏挑战。
332 1
|
11月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:智能质量检测与控制
使用Python实现深度学习模型:智能质量检测与控制 【10月更文挑战第8天】
725 62
使用Python实现深度学习模型:智能质量检测与控制
|
9月前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
180 33

推荐镜像

更多