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

0458-Bomb-道具和效果

环境

  • Time 2024-03-22
  • 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

目标

实现道具的获取和增加道具功能。

player.zig

增加了道具的数量和长度的变量。

const std = @import("std");
const engine = @import("../engine.zig");
const core = @import("core.zig");const speedUnit = 1000;pub const Player = struct {x: usize,y: usize,bombNumber: usize = 0,maxBombNumber: usize = 1,maxBombLength: usize = 1,type: core.MapType,pub fn genEnemy(x: usize, y: usize) Player {return init(x, y, .enemy);}pub fn genPlayer(x: usize, y: usize) Player {return init(x, y, .player1);}fn init(x: usize, y: usize, t: core.MapType) Player {return Player{.x = x * core.getMapUnit() * speedUnit,.y = y * core.getMapUnit() * speedUnit,.type = t,};}pub fn getCell(self: Player) engine.Vector {const unit = core.getMapUnit();return .{.x = (self.x / speedUnit + (unit / 2)) / unit,.y = (self.y / speedUnit + (unit / 2)) / unit,};}pub fn draw(self: Player) void {const x = self.x / speedUnit;core.drawXY(self.type, x, self.y / speedUnit);}pub fn toCollisionRec(self: Player) engine.Rectangle {return engine.Rectangle{.x = self.x / speedUnit + 5,.y = self.y / speedUnit + 5,.width = core.getMapUnit() - 10,.height = core.getMapUnit() - 7,};}
};

map.zig

增加了获取道具的功能。

    pub fn update(self: *Map) void {const pos = self.player1().getCell();const mapUnit = self.world.indexRef(pos.x, pos.y);if (mapUnit.contains(.item)) {mapUnit.remove(.item);self.player1().maxBombNumber += 1;}if (mapUnit.contains(.power)) {self.player1().maxBombLength += 1;mapUnit.remove(.power);}self.world.update();}

world.zig

重新实现了道具的效果,具有加长的功能。

    fn explosion(self: *World, mapUnit: *core.MapUnit, idx: usize) void {const time = engine.time();mapUnit.remove(.bomb);mapUnit.insertTimedType(.explosion, time);// 左self.explosionLeft(time, idx);// 右self.explosionRight(time, idx);// 上self.explosionUp(time, idx);// 下self.explosionDown(time, idx);}fn explosionLeft(self: *World, time: usize, idx: usize) void {for (1..self.player1().maxBombLength + 1) |i| {const mapUnit = &self.data[idx -| i];if (mapUnit.contains(.wall)) return;if (mapUnit.contains(.brick)) mapUnit.remove(.brick);mapUnit.insertTimedType(.fireX, time);}}fn explosionRight(self: *World, time: usize, idx: usize) void {for (1..self.player1().maxBombLength + 1) |i| {const mapUnit = &self.data[idx + i];if (mapUnit.contains(.wall)) return;if (mapUnit.contains(.brick)) mapUnit.remove(.brick);mapUnit.insertTimedType(.fireX, time);}}fn explosionUp(self: *World, time: usize, idx: usize) void {for (1..self.player1().maxBombLength + 1) |i| {const mapUnit = &self.data[idx -| (self.width * i)];if (mapUnit.contains(.wall)) return;if (mapUnit.contains(.brick)) mapUnit.remove(.brick);mapUnit.insertTimedType(.fireY, time);}}fn explosionDown(self: *World, time: usize, idx: usize) void {for (1..self.player1().maxBombLength + 1) |i| {const mapUnit = &self.data[idx + (self.width * i)];if (mapUnit.contains(.wall)) return;if (mapUnit.contains(.brick)) mapUnit.remove(.brick);mapUnit.insertTimedType(.fireY, time);}}

效果

bomb

总结

实现了道具的获取,并且增加玩家获取道具的功能。

附录

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

相关文章:

  • 学术论文AI率控制与降AI率实操指南
  • 操作系统文件管理:从FCB到inode,深入理解文件系统核心原理与实战
  • 智能体与AI数据分析平台:DiFy、FastGPT、MaxKB整合实践
  • Prometheus 日常巡检:抓住采集延迟、基数和规则错误
  • 2026年8月昆明外墙漏水维修防水公司推荐,高层高空渗水修缮避坑指南 - 聪居到家
  • AI辅助形式化验证:从黎曼猜想看Lean与Mathlib的工程实践
  • Windows端口检查全攻略:从Netstat到TCPView的实战指南
  • Maven镜像配置全解析:原理、国内镜像源对比与多环境实战指南
  • Cargo Workspace 漏配 feature:把复现命令和检查补进 CI
  • Node.js多版本管理利器nvm:原理、安装与实战指南
  • 2026年8月沈阳外墙漏水维修防水公司推荐,高层高空渗水修缮避坑指南 - 聪居到家
  • P14468 [COCI 2025/2026 #1] 和谐 / Harmonija
  • 后端巡检从哪开始:盯住错误率、延迟和队列积压
  • 2019年信息安全工程师 上午综合知识真题【整理完整版+答案+详细解析】
  • 2026 太原板材行业深度盘点,千山板材剖析家装选材避坑要点 - 收录优先
  • 宏智树 AI|解锁实证论文新思路,让零散数据转化为学术论证
  • 2026年8月福州外墙漏水维修防水公司推荐,高层高空渗水修缮避坑指南 - 聪居到家
  • 微前端依赖冲突复盘:先保留证据,再隔离版本
  • AI服务容错设计:双层故障处理与四级退避策略实践
  • 【无人机】自主四轴飞行器的模型预测控制附Matlab代码
  • 2026年江苏小型针织大圆机厂家优选:高效规格与精密制造的源头实力解析 - 卓企推荐
  • Azure免费虚拟机零成本创建与避坑指南:12个月B1s实例实战
  • 靠谱的旅行社哪个好
  • 原材料反复波动,工厂供应链降本到底该怎么做?
  • RTP协议解析与实时音视频传输优化实践
  • 爱普生机器人SPEL+编程核心语法与实战应用指南
  • 2026年小型毛皮大圆机厂家供应实力解析:高效编织与精密成型技术观察 - 卓企推荐
  • Arduino智能小车状态机设计:从三模切换理解嵌入式系统核心
  • 从Demo到生产:跨越AI Agent工程化的四道鸿沟
  • AI 生活应用 Python 环境:锁定依赖并一键自检