部分初识rust
章rust及其开发环境2
1.1安装rust2
1.1.1在microsoftwindows上安装rust3
1.1.2在其他作系统上安装rust3
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,world8
1.3.4与版本控制系统的集成8
1.4创建个rust程序9
1.4.1cargo的元数据9
1.4.2hello,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-terminal44
3.1.2创建一个使用bracket-lib的新项目45
3.1.3hello,bracketterminal46
3.1.4存储46
3.1.5codepage437:由ibm扩展的ascii字符集50
3.2创建不同的游戏模态50
3.2.1根据当前模态做出反应51
3.2.2y()函数的桩形式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完善游戏程序的y()函数59
3.3.7扇动翅膀60
3.4创建障碍物并实现计分逻辑60
3.4.1渲染障碍物61
3.4.2一头撞到墙上62
3.4.3记录得分和障碍物的63
3.4.4在y()函数中加入障碍物和计分逻辑64
3.4.5将得分显示在游戏结束画面上64
3.4.6在重玩游戏时重置得分和障碍物65
3.4.7flappydragon游戏效果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.1crate与模块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使用地图模块的api80
5.4加入探险家81
5.4.1扩展地图的api接81
5.4.2创建玩家角的数据结构82
5.4.3渲染玩家角83
5.4.4移动玩家角83
5.4.5使用玩家模块的api84
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组件的api91
5.6graphics,camera,action92
5.6.1地下城所使用的programmerart92
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安装并使用legion102
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在回合制的游戏中移动entity127
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
0章视场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
1章更具可玩的地下城200
11.1创建trait200
11.1.1拆分地图建造器201
11.1.2用mapbuilder来提供地图建造服务201
11.1.3定义代表架构的trait202
11.1.4用参实现来测试trait203
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’swalk算法来创建地图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
2章地图的主题风格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
3章背包和道具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
4章更深的地下城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
5章战斗系统和战利品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
6章后的步骤和润281
16.1打包游戏以进行分发281
16.1.1开启发布模式和时优化281
16.1.2分发游戏282
16.2开发属于自己的地下城探险类游戏283
16.3更多内容283
16.4小结284
第三部分其他资源
附录aasciicodepage437对照表286
附录b简短的游戏设计文档287
附录crust语法速查表294