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()


目录
相关文章
|
30天前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
227 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
8月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
912 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
2月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
4月前
|
存储 算法 区块链
从零实现Python扫雷游戏:完整开发指南与深度解析
扫雷作为Windows经典游戏,承载了许多人的童年回忆。本文将详细介绍如何使用Python和Tkinter库从零开始构建一个功能完整的扫雷游戏,涵盖游戏设计、算法实现和界面开发的全过程。
275 0
|
4月前
|
监控 编译器 Python
如何利用Python杀进程并保持驻留后台检测
本教程介绍如何使用Python编写进程监控与杀进程脚本,结合psutil库实现后台驻留、定时检测并强制终止指定进程。内容涵盖基础杀进程、多进程处理、自动退出机制、管理员权限启动及图形界面设计,并提供将脚本打包为exe的方法,适用于需持续清理顽固进程的场景。
|
10月前
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
283 7
|
5月前
|
人工智能 搜索推荐 数据可视化
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
464 1
|
5月前
|
存储 算法 数据可视化
用Python开发猜数字游戏:从零开始的手把手教程
猜数字游戏是编程入门经典项目,涵盖变量、循环、条件判断等核心概念。玩家通过输入猜测电脑生成的随机数,程序给出提示直至猜中。项目从基础实现到功能扩展,逐步提升难度,适合各阶段Python学习者。
239 0
|
10月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
384 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本

推荐镜像

更多
下一篇
开通oss服务