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

0425-Box-新增地图模块

环境

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

前言

说明

参考资料:

  1. 《游戏开发:世嘉新人培训教材》

目标

将所有的代码全部放到 main.zig 中太多了,新增一个 map.zig 存放地图相关的逻辑。

main

将 initialize 和 draw 方法移动到 map.zig 中,重命名为 init 方法,新增了 deinit 方法来清理资源。
所有涉及到地图相关的定义需要加 map 进行访问。

pub fn main() void {// 初始化地图var state: [map.stageLength]map.MapItem = undefined;map.init(&state);defer map.deinit();const stdin = std.io.getStdIn().reader();while (true) {// 画出游戏地图ray.BeginDrawing();ray.ClearBackground(ray.WHITE);map.draw(&state);ray.EndDrawing();// 检查游戏胜利条件if (checkClear(&state)) break;std.debug.print("a:left d:right w:up s:down. command?\n", .{});// 获取用户输入const char = inputChar(stdin);// 根据输入更新游戏地图update(&state, char);}// 游戏胜利std.debug.print("Congratulation's! you win.\n", .{});
}

MapItem

const std = @import("std");
const ray = @import("raylib.zig");// 定义地图的类型
pub const MapItem = enum(u8) {SPACE = ' ',WALL = '#',GOAL = '.',BLOCK = 'o',BLOCK_ON_GOAL = 'O',MAN = 'p',MAN_ON_GOAL = 'P',fn fromInt(value: u8) MapItem {return @enumFromInt(value);}fn toInt(self: MapItem) u8 {return @intFromEnum(self);}
};

地图相关变量

// 定义地图
const stageMap =\\########\\# .. p #\\# oo   #\\#      #\\########
;pub const stageWidth = 8;
pub const stageHeight = 5;
pub const stageLength = stageHeight * stageWidth;
const SCALE = 32; // 放大倍数
const BOARDER = 1; // 边框

init 和 deinit

pub fn init(stage: []MapItem) void {var index: usize = 0;for (stageMap) |value| {if (value == '\n') continue;stage[index] = MapItem.fromInt(value);index += 1;}ray.InitWindow(320, 240, "推箱子");
}pub fn deinit() void {ray.CloseWindow();
}

剩下的 draw 等方法,直接从 main.zig 复制到 map.zig 中即可。

效果

和前一节的效果一致,只修改了代码的结构,未修改逻辑。

总结

将源码拆分成了两个文件,一个 main.zig,另一个是 map.zig。

附录

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

相关文章:

  • 江西省九江市诚信可靠服务好的合同纠纷律师怎么联系?洪亮亮经验丰富、专业靠谱 - 专业优选推荐榜
  • Galgame翻译工具YUKI实测:从下载到多引擎对照,15分钟跑通全流程
  • 如何自学网络安全
  • 降重降AIGC率工具实测与推荐
  • 两阶段鲁棒优化与CCG算法:应对不确定性的决策框架与MATLAB实现
  • 2026专业空净选购评测|6大品牌硬核对比,避坑六大准则,无滤网成主流趋势 - 互联网科技品牌测评
  • 2026年济宁做智慧燃气安全监管平台的公司有哪些?
  • 终极PDF对比神器diff-pdf:5分钟快速上手,告别手动核对烦恼!
  • NHSE动物森友会存档编辑器:5分钟掌握终极岛屿改造神器
  • 萍乡本地防水维修科普:漏水原因、施工方案与选择建议 - 筑宅安
  • 从代码补全到多智能体协作:AI编程的演进与CrewAI实战
  • 江苏宽带隐藏套餐揭秘:日均8毛背后的真实价值与办理全攻略
  • 3步掌握MelonLoader:Unity游戏模组加载器终极指南
  • 快可美纹理天缝剂 - 甄选测评官
  • DeepSeek-V4-Pro 正式版深夜突袭:Agent 评测暴涨 50 分,一套代码通吃 OpenAI 与 Anthropic 双生态
  • 如何让SQL格式化一键完成?SQL Beautify VSCode插件上手全攻略
  • 2026 年江苏混凝土切割水钻打孔,开窗开门口施工公司推荐 - LYL仔仔
  • Web前端周刊2026W32 | Next.js 16.3发布,React Router v8发布,Astro 7.2发布,Node.js v26.6.0发布,ioredis 6.0发布
  • Linux PipeWire深度解析之pw_properties_update_keys调用流程与实战(六十)
  • 【Linux系统】动静态库
  • 医疗AI新范式:基于Agent的临床诊断思维模拟与循证推理工作流
  • 想要离线跑通的电路仿真:CircuitJS1 Desktop Mod 帮你把 Falstad 装进本地
  • RAG知识库搭建全流程解析:从数据爬取到向量检索的工程实践
  • 14 - 《英伟达启示录》深度理解测试(答案)
  • 2026 年武汉马桶疏通水电维修上门维修找谁 - LYL仔仔
  • 2026年合肥理工学校怎么报名?在哪报名?招生办联系电话是多少? - 最新资讯
  • 瑞幸咖啡兑换码到底值多少钱?2026年最新回收行情,一文给你讲透 - 沃卡回收
  • Kimi K3大模型本地部署实战:从环境配置到推理优化全指南
  • iPhone激活锁免费绕过指南:5分钟上手applera1n(iOS 15-16.6)
  • 机器学习算法分类与数据处理实战:从问题定义到模型评估的完整指南