当前位置: 首页 > news >正文

0456-Bomb-实现爆炸效果

环境

  • Time 2024-03-21
  • Zig 0.12.0-dev.3152+90c1a2c41
  • WSL-Ubuntu 22.04.3 LTS
  • raylib 5.0

前言

说明

参考资料:

  1. 《游戏开发:世嘉新人培训教材》
  2. 图片素材:https://www.ituring.com.cn/book/1742

目标

实现炸弹爆炸后的效果,目前只实现了炸毁砖块。

新增地图类型

新增了爆炸效果的的中间效果,X 效果和 Y 效果。

// 定义地图的类型
pub const MapType = enum(u8) {space = 9,wall = 7,brick = 8,bomb = 10,item = 2,power = 3,fireX = 4,fireY = 5,explosion = 11,
};

update

地图的更新方法检测是否有炸弹需要爆炸,是否有效果需要消失。

    pub fn update(self: *WorldMap) void {const time = engine.time();for (self.data, 0..) |*value, index| {if (value.contains(.bomb)) {if (time > value.time + 3000) {self.explosion(value, index);self.player1().bombNumber -|= 1;}}if (value.contains(.explosion)) {if (time > value.time + 700) {value.remove(.explosion);}}if (value.contains(.fireX)) {if (time > value.time + 700) {value.remove(.fireX);}}if (value.contains(.fireY)) {if (time > value.time + 700) {value.remove(.fireY);}}}}

explosion

添加效果。

    fn explosion(self: *WorldMap, mapUnit: *MapUnit, index: usize) void {const time = engine.time();mapUnit.remove(.bomb);mapUnit.insertTime(.explosion, time);// 左doExplosion(&self.data[index -| 1], .fireX, time);// 右doExplosion(&self.data[index + 1], .fireX, time);// 上doExplosion(&self.data[index - width], .fireY, time);// 下doExplosion(&self.data[index + width], .fireY, time);}fn doExplosion(mapUnit: *MapUnit, mapType: MapType, time: usize) void {if (mapUnit.contains(.wall)) return;if (mapUnit.contains(.brick)) mapUnit.remove(.brick);mapUnit.insertTime(mapType, time);}

显示

    pub fn draw(self: WorldMap) void {for (0..self.height) |y| {for (0..self.width) |x| {const value = data[x + y * self.width];if (value.contains(.wall)) drawEnum(.wall, x, y) //else if (value.contains(.brick)) drawEnum(.brick, x, y) //else {drawEnum(.space, x, y);if (value.contains(.explosion)) drawEnum(.explosion, x, y) //else if (value.contains(.fireX)) drawEnum(.fireX, x, y) //else if (value.contains(.fireY)) drawEnum(.fireY, x, y);if (value.contains(.power)) drawEnum(.power, x, y) //else if (value.contains(.bomb)) drawEnum(.bomb, x, y);}}}for (self.roles) |value| {const x = value.x / speedUnit;tileMap.drawXY(x, value.y / speedUnit, @intFromEnum(value.type));}}

效果

bomb

总结

实现了爆炸后的效果。

附录

http://www.jsqmd.com/news/1403734/

相关文章:

  • 本地部署开源大模型:构建自动化申论作文批改系统
  • 自建代码搜索平台:基于Sourcegraph的Docker Compose部署与核心功能详解
  • 2026 年现阶段鄂州知名的同城 AI 获客机构哪个好,别再靠地推发传单了,这玩意儿能让本地商家每月多接30个精准到店的单-抖盈获客 - 行业推荐官[官方】--
  • 基于QCustomPlot实现的Nyquist图、Nichols图
  • 赤峰防水补漏实地体验记录,多家本地服务商实测分享 - 用户198513
  • SolidWorks钣金通风口命令实战:高效设计风扇罩与散热结构
  • 从蓝屏死机到系统稳定:软硬件全链路排查与修复实战指南
  • EPLAN 2022图框设计全解析:从标准化到自动化出图实战
  • BlindWaterMark 盲水印实战:3 分钟把文字藏进图片,再原样提取出来
  • 泰安中心供氧系统停电了怎么办 - 推客
  • 2026年8月金华外墙漏水维修防水公司推荐,高层高空渗水修缮避坑指南 - 聪居到家
  • 游戏开发帧规则计时器:Lua/PICO-8精准时间管理实践
  • Syncthing for Android 完整上手指南:不依赖网盘,5 步跑通手机与电脑的免费文件同步
  • K-means算法家族全解析:从数值到混合数据的聚类实战指南
  • VSCode配置C语言开发环境:从编译器安装到调试入门
  • 七天不买绿幕:新手UP主用AI抠像插件把直播背景换成演播室
  • Android计算摄影实战:PhotonCamera开源框架构建实时图像处理管线
  • 新一代短信平台选型指南:从通道质量到实战避坑
  • 2026 年深圳漏水检测团队实测参考:深圳腾达 —— 专注消防管、自来水管漏水探测的靠谱机构 - 宅仕达
  • 基于Cursor Agent的AI代码审查:CI/CD流水线自动化实践
  • 深入解析浮点数运算:从IEEE 754标准到手算实例
  • 秦皇岛装修公司推荐 佳人装饰成本土靠谱家装选择 - 装企精灵GEO
  • 大规模数据迁移如何巡检:分片校验、限流与幂等修复
  • Windows启动失败排查指南:从蓝屏到系统修复的完整解决方案
  • 汉诺塔问题深度解析:从递归到非递归的算法思维与实践
  • MySQL 联合索引失效:检查类型转换与最左前缀
  • 2026 合肥电大中专如何报名?报考流程、热门专业、对接渠道完整说明 - 小张zc
  • VMware虚拟机安装银河麒麟V10 SP1全攻略:从分区到优化
  • 2026年8月国内X-ray成像检测系统源头厂家选哪家,X射线全检面密度仪,X-ray成像检测系统生产厂家找哪家 - 企业权威推荐大使
  • 从零构建微服务治理:Consul服务注册发现与配置中心实战指南