描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787115626608
1.本书主要介绍如何基于Rust语言开发游戏
2.引导读者制作自己的Flappy Bird,借实例讲解Rust语言的基础知识。
3.引导读者从0到1用Rust实现游戏项目。
本书主要介绍基于Rust语言开发游戏的方法,还介绍了适用于Unity、Unreal等游戏引擎的技巧。
本书先设置开发环境,然后引导读者制作自己的Flappy Bird,借实例讲解Rust语言的基础知识。全书引导读者逐步完成一个《地下城爬行者》(Dungeon Crawler)游戏项目,通过实战帮助读者掌握Rust的相关知识,掌握用Bevy开发游戏的方法,以及在不影响程序调试的情况下运行游戏系统,对所开发的游戏进行优化。
本书适合所有对Rust语言感兴趣的读者阅读,也适合从事游戏开发的读者参考。
第 一部分 初识Rust
第 1章 Rust及其开发环境 2
1.1 安装Rust 2
1.1.1 在Microsoft Windows上安装Rust 3
1.1.2 在其他操作系统上 安装Rust 3
1.1.3 完成安装 3
1.1.4 验证安装是否成功 4
1.1.5 测试Rust能否正常使用 5
1.1.6 版本更新 5
1.2 安装并配置开发环境 6
1.3 用Cargo管理项目 7
1.3.1 为代码选择一个主目录 7
1.3.2 用Cargo来开启一个新项目 7
1.3.3 运行Hello,World 8
1.3.4 与版本控制系统的集成 8
1.4 创建第 一个Rust程序 9
1.4.1 Cargo的元数据 9
1.4.2 Hello,World程序 10
1.5 用Cargo来构建、检查并运行项目 11
1.6 修正代码格式 12
1.7 用Clippy来发现常见错误 13
1.8 用Cargo进行包管理 15
1.9 小结 16
第 2章 Rust的第 一步 17
2.1 创建一个新的项目 17
2.2 捕捉用户输入 17
2.2.1 提示访客输入姓名 18
2.2.2 用变量存储姓名 18
2.2.3 接收键盘输入 19
2.2.4 读取用户输入 20
2.2.5 用占位符实现格式化打印 21
2.2.6 完整的问候程序 21
2.3 将输入处理逻辑移入函数 22
2.4 修剪输入数据 23
2.5 在数组中存储字符串 24
2.5.1 声明一个数组 25
2.5.2 在数组中查找元素 26
2.6 用结构体来组织数据 27
2.7 用向量来存储数量可变的数据 32
2.7.1 派生调试信息 32
2.7.2 用向量代替数组 33
2.7.3 用break跳出循环 34
2.7.4 为向量添加新元素 34
2.8 用枚举体来实现分类 36
2.8.1 枚举体 36
2.8.2 使用枚举类型和整数类型的数据成员 37
2.8.3 将枚举类型赋值给变量 38
2.8.4 枚举体的匹配 38
2.9 小结 41
第3章 构建第 一个Rust游戏 42
3.1 理解游戏循环 42
3.1.1 什么是bracket-lib以及bracket-terminal 44
3.1.2 创建一个使用bracket-lib的新项目 45
3.1.3 Hello,bracket Terminal 46
3.1.4 存储状态 46
3.1.5 Codepage 437: 由IBM扩展的ASCII字符集 50
3.2 创建不同的游戏模态 50
3.2.1 根据当前模态做出反应 51
3.2.2 play()函数的桩形式 52
3.2.3 主菜单 52
3.2.4 游戏结束菜单 54
3.2.5 完整的游戏控制流 54
3.3 添加游戏角色 55
3.3.1 渲染游戏角色 56
3.3.2 坠向不可避免的死亡 56
3.3.3 扇动翅膀 57
3.3.4 实例化玩家 57
3.3.5 常量 58
3.3.6 完善游戏程序的play()函数 59
3.3.7 扇动翅膀 60
3.4 创建障碍物并实现计分逻辑 60
3.4.1 渲染障碍物 61
3.4.2 一头撞到墙上 62
3.4.3 记录得分和障碍物的状态 63
3.4.4 在play()函数中加入障碍物和计分逻辑 64
3.4.5 将得分显示在游戏结束画面上 64
3.4.6 在重玩游戏时重置得分和障碍物 65
3.4.7 Flappy Dragon游戏效果 65
3.5 小结 65
第二部分 开发地下城探险类游戏
第4章 设计地下城探险类游戏 68
4.1 设计文档**的几个段落标题 68
4.1.1 为游戏命名 68
4.1.2 游戏的简要介绍 68
4.1.3 游戏剧情 69
4.1.4 基本的游戏流程 69
4.1.5 最简可行产品 69
4.1.6 延展目标 70
4.2 小结 70
第5章 编写地下城探险类游戏 72
5.1 将代码划分为模块 72
5.1.1 crate与模块 72
5.1.2 新建一个空的地图模块 73
5.1.3 模块的作用域 74
5.2 用prelude模块来管理导入项 74
5.3 存储地下城地图 76
5.3.1 图块在程序中的表示方法 77
5.3.2 创建一个空地图 77
5.3.3 为地图建立索引 78
5.3.4 渲染地图 79
5.3.5 使用地图模块的API 80
5.4 加入探险家 81
5.4.1 扩展地图的API接口 81
5.4.2 创建玩家角色的数据结构 82
5.4.3 渲染玩家角色 83
5.4.4 移动玩家角色 83
5.4.5 使用玩家模块的API 84
5.5 创建地下城 85
5.5.1 编写地图生成器模块 86
5.5.2 用石墙把地图填满 87
5.5.3 开凿房间 87
5.5.4 开凿走廊 88
5.5.5 建造地图并放置玩家角色 91
5.5.6 使用MapBuilder组件的API 91
5.6 Graphics,Camera,Action 92
5.6.1 地下城所使用的
Programmer Art 92
5.6.2 图层 94
5.6.3 制作摄像机 95
5.6.4 用摄像机来渲染地图 97
5.6.5 将玩家角色关联到
摄像机 98
5.6.6 清理图层,并关联函数和摄像机 98
5.7 小结 99
第6章 创建地下城居民 100
6.1 名词解释 100
6.2 用组件编排出实体 101
6.3 安装并使用Legion 102
6.3.1 将Legion添加到prelude中 103
6.3.2 删除一些老代码 103
6.3.3 创造游戏世界 104
6.4 编排出玩家角色 105
6.5 使用系统来实现复杂的逻辑 107
6.5.1 多个文件组成的模块 108
6.5.2 理解什么是查询 109
6.5.3 将处理玩家输入作为一个系统 111
6.5.4 批量渲染 114
6.5.5 地图渲染系统 115
6.5.6 实体渲染系统 116
6.6 添加怪兽 119
6.7 碰撞检测 121
6.8 小结 123
第7章 与怪兽交替前行 124
7.1 让怪兽随机游走 124
7.2 在回合制的游戏中移动Entity 127
7.2.1 存储回合状态 127
7.2.2 轮番上阵 128
7.2.3 拆分调度器 129
7.2.4 结束玩家的回合 131
7.3 发送意图消息 133
7.3.1 实体还可以当作消息来
使用 133
7.3.2 接收消息并进行移动 133
7.3.3 简化玩家输入处理逻辑 135
7.3.4 怪兽的移动消息 137
7.4 小结 137
第8章 生命值和近身战斗 138
8.1 为实体赋予生命值 138
8.2 添加平视显示系统 139
8.2.1 添加另一个渲染图层 139
8.2.2 渲染平视显示区 141
8.2.3 为怪兽添加名字 143
8.2.4 为怪兽添加名称和生命值 143
8.2.5 用悬浮提示来区分怪兽 145
8.2.6 注册各个系统 147
8.3 实现战斗功能 148
8.3.1 删除碰撞检测系统 148
8.3.2 表示攻击意图 148
8.3.3 玩家主动攻击 149
8.3.4 创建战斗系统 151
8.3.5 怪兽的反击 153
8.3.6 运行各个系统 154
8.4 将等待作为一种策略 155
8.5 小结 157
第9章 胜与负 158
9.1 创造更聪明的怪兽 158
9.1.1 标记新的行为 159
9.1.2 通过trait来支持寻路 160
9.1.3 映射地图 160
9.1.4 在地图中导航 161
9.1.5 具备热成像追踪能力的怪兽 164
9.1.6 定位玩家角色 165
9.1.7 迪杰斯特拉图 165
9.1.8 追杀玩家角色 167
9.1.9 缩减玩家角色的生命值 169
9.2 实现游戏结束画面 170
9.2.1 增加表示游戏结束的回合状态 170
9.2.2 检测游戏何时结束 171
9.2.3 显示游戏结束画面 172
9.3 寻找亚拉的护身符 173
9.3.1 构建护身符 173
9.3.2 安放护身符 174
9.3.3 判断玩家是否胜利 177
9.3.4 恭贺玩家取得胜利 178
9.4 小结 181
第 10章 视场 182
10.1 定义实体的视场 182
10.1.1 图块的透明度 183
10.1.2 用HashSet来整理数据 183
10.1.3 用组件来存储可见图块的集合 184
10.1.4 计算视场 187
10.1.5 渲染视场 189
10.1.6 隐藏实体 191
10.1.7 更新视场 192
10.2 限制怪兽的视场 193
10.3 添加空间记忆 195
10.3.1 逐步揭示地图 195
10.3.2 更新地图 196
10.3.3 渲染记忆中的地图 196
10.3.4 视场的其他用途 198
10.4 小结 199
第 11章 更具可玩性的地下城 200
11.1 创建trait 200
11.1.1 拆分地图建造器 201
11.1.2 用MapBuilder来提供地图 建造服务 201
11.1.3 定义代表架构的trait 202
11.1.4 用参考实现来测试 trait 203
11.1.5 调用空地图的架构 205
11.1.6 修改房间生成器 206
11.2 用元胞自动机算法来创建地图 207
11.2.1 元胞自动机理论 207
11.2.2 实现元胞自动机 208
11.2.3 生成一些随机噪声 209
11.2.4 计算邻居的数量 209
11.2.5 用迭代消除混乱 210
11.2.6 放置玩家角色 211
11.2.7 在没有房间的情况下生成怪兽 213
11.2.8 建造地图 214
11.2.9 调用基于元胞自动机的地图架构 214
11.3 用Drunkard’s Walk算法来创建地图 215
11.3.1 编写初始代码 216
11.3.2 用喝醉的矿工开凿洞穴 216
11.3.3 评估地图建造的完成度 217
11.3.4 一直挖到地图生成完毕 218
11.3.5 激活新的地图类型 220
11.3.6 随机挑选架构 220
11.4 在地图中使用预制区域 221
11.4.1 手工打造的地下城 221
11.4.2 放置金库 222
11.5 小结 226
第 12章 地图的主题风格 227
12.1 为地下城引入主题风格 227
12.1.1 用trait实现地下城主题风格 228
12.1.2 创建一片森林 229
12.2 使用主题风格进行渲染 230
12.2.1 挑选一个主题风格 231
12.2.2 使用选中的主题风格 232
12.2.3 根据主题风格来渲染地图 233
12.3 释放想象力 235
12.4 小结 235
第 13章 背包和道具 236
13.1 设计物品 236
13.1.1 用组件来描述物品 236
13.1.2 生成药水和地图 237
13.2 管理背包 239
13.2.1 捡起物品 240
13.2.2 显示背包物品 241
13.2.3 发送物品激活消息 243
13.2.4 激活物品 245
13.2.5 应用治疗特效 245
13.2.6 迭代物品并应用效果 246
13.2.7 处理疗伤事件 247
13.2.8 添加到调度器 248
13.2.9 去掉通过休息恢复生命值 249
13.3 小结 250
第 14章 更深的地下城 251
14.1 为地图添加楼梯 251
14.1.1 生成并渲染楼梯 251
14.1.2 更新地下城的行走逻辑 252
14.1.3 生成楼梯并替代护身符 253
14.2 追踪游戏关卡 255
14.2.1 关卡切换状态 256
14.2.2 切换关卡 257
14.2.3 找到玩家角色 258
14.2.4 标记需要保留的实体 258
14.2.5 删除其余的实体 259
14.2.6 将视场设置为脏 259
14.2.7 创建新地图 260
14.2.8 将玩家角色放置在新地图中 260
14.2.9 创建亚拉的护身符或者楼梯 260
14.3 在平视显示区中显示当前关卡 261
14.4 小结 262
第 15章 战斗系统和战利品 263
15.1 设计数据驱动的地下城 263
15.1.1 读取地下城的数据 265
15.1.2 扩展Spawner模块 266
15.1.3 映射并加载模板 266
15.1.4 用数据驱动的方式生成实体 268
15.1.5 新春大扫除 272
15.2 扩展战斗系统 274
15.2.1 由武器和爪子造成的伤害 274
15.2.2 伤害值组件 276
15.2.3 产生一些伤害 277
15.2.4 探险家不是八爪鱼 278
15.3 添加更多宝剑 279
15.4 小结 280
第 16章 最后的步骤和润色 281
16.1 打包游戏以进行分发 281
16.1.1 开启发布模式和链接时
优化 281
16.1.2 分发游戏 282
16.2 开发属于自己的地下城探险类游戏 283
16.3 更多内容 283
16.4 小结 284
第三部分 其他资源
附录A ASCII/Codepage 437对照表 286
附录B 简短的游戏设计文档 287
附录C Rust语法速查表 294
评论
还没有评论。