1个不稳定版本
0.1.0 | 2021年12月8日 |
---|
#1071 在 游戏开发
159 星 & 7 关注者
295KB
3K SLoC
Bevy Roguelike游戏
现在已更新到Bevy 0.12。
我在尝试做一个Roguelike游戏,使用Rust和Bevy。我正在仔细阅读Herbert Wolverson的令人惊叹的书籍《Hands-on Rust》。想法是重写他的代码,但使用Bevy而不是Legion 和Bracket-lib。不直接与Legion或Bracket-lib相关的功能将使用Bevy实现,如果它提供“更好的”替代方案。为什么?这只是个学习经历。如果你检查这个,请随时提供任何形式的反馈。
点击此处前往YouTube观看游戏的最新视频 或这个视频来查看不同的地图和主题.
目前已实现的功能
第五章。 这是书中涵盖地下城探险者的第一部分。在这里,我们实现了一个使用箭头键移动的玩家“@”。我们还创建了随机地图(房间和走廊),我们还实现了跟随玩家的摄像头。本书在第五章末尾添加了艺术,但我会将其保持为ASCII,直到你只需要替换字体文件,它就会获取艺术。与第五章的主要区别在于,我完全使用了ECS模型,正如他在第六章中稍后所做的那样。我还创建了房间作为地板和墙壁,让其他单元格为空,而不是所有墙壁。每个单元格都是一个实体,摄像头完全使用Bevy,所以这与书籍相当不同。如果你想看代码,查看这个提交。
第六章。 添加了敌人,并实现了碰撞检测(如果玩家移动到敌人身上,敌人消失)。如果你想看代码,查看这个提交。
第七章。 敌人随机移动。游戏现在在玩家和敌人移动之间轮流进行。这与书籍有点不同,因为我们使用Bevy中的“状态”。我认为这使它更容易。移动被重新工作,以发送意图消息,类似于书籍。如果你想看代码,查看这个提交。
第8章. 这部分比较困难,因为这里实现了很多功能在Bevy中都不是原生支持的。从UI开始,我完全使用Bevy重新编写了。我还改变了书中的设计,而不是使用浮动在顶部的HP条,我决定使用一个更传统的底部UI面板。左侧显示日志,尚未实现(现在只显示3条静态消息),右侧显示HP信息,随着游戏的进行而更新。我还实现了鼠标点击提示信息,这很麻烦,因为Bevy没有简单的方式来识别哪个实体被点击了,所以这必须手动完成,然后才能显示或消失提示信息。最后,战斗通过消息实现,在这种情况下Bevy表现出色。查看这个提交 和 查看这个YouTube视频以查看游戏。
第9章. 这一部分并不困难,但需要大量的模板代码。本章全部关于路径规划和敌人跟随你。之前我说过我想避免使用Bracket-lib,但他们的路径查找库非常好,我不愿意花时间去自己写A*。我花了一些时间玩Rust的路径查找库,它工作得很好,但最终我决定使用Bracket-lib并遵循书籍。未来我可能改变这个决定。无论如何,现在敌人会追着你,攻击你。此外,当发生重要动作时(如攻击),游戏日志会更新。还有一个开始屏幕、胜利屏幕和游戏结束屏幕,游戏可以重新开始。要实现这一点,Bevy非常好用,而且非常简单。查看这个提交 和 查看这个YouTube视频以查看游戏。
第10章. 本章实现了视野,这是经典Roguelike游戏的关键元素之一。这部分很简单,也很迅速。基本上,由于我决定使用Bracketlib,他们的视野库很棒,所以我只是使用了那个库。我感到有些烦恼,因为它强迫我使用点(Point)相关的东西(据我所知,也许还有其他在Rust中绕过的方法),而我所有的位置都使用Position(3d)。但这就是这样。代码本身也相当不同,因为在Bevy中我们不处理渲染(至少我不处理),所以主要是通过不同的Sprite结构体来控制东西的可见性或改变颜色。查看这个提交 和 查看这个YouTube视频以查看游戏。
第11章. 这部分读起来很有趣,但实现起来并不有趣,主要是因为没有ECS,所以没有Bevy,这部分主要是复制粘贴原始代码。我只需更改一些不重要的东西,以便与我的游戏兼容。我唯一做的更改是创建了一个“预制件建筑师”,而不是像函数一样将预制件应用于任何地图。我计划将这个预制件建筑师用于BOSS关卡。查看这个提交。
第12章 本章是关于添加主题。同样,就像上一章一样,没有涉及ECS,所以这部分主要是复制粘贴。主要区别是Bevy的渲染不同,所以我必须围绕这个进行工作。查看这个提交 和 查看这个视频以查看游戏。
第13章 这一章主要介绍添加物品,如药水,以及库存管理。到目前为止,这是花费我最多时间的一章。后端与书中内容非常相似,但使用了Bevy。前端则非常不同。我想要实现一个更“经典”的弹出式库存菜单,用户可以通过滚动菜单来选择物品。在Bevy中实现这一点有点困难。我认为UI是我最喜欢的部分最少的。查看此提交和查看此视频以查看游戏。
第14章 这一章是关于制作更深的地下城,你到达一些楼梯,走进它们会将你带到下一级。由于Bevy的整个ECS与书中描述的代码有所不同,这里的实现也非常不同。它完全是关于玩状态,并在玩家改变级别时在状态之间切换,以及启用和禁用不同的系统。在书中有一个“下一级”函数来执行所有操作,而在这里它被分散在不同的脚本中。查看此提交和查看此视频以查看游戏。
第15章 这一章有两个不同的目标。第一个目标是通过实现数据驱动的方法,从模板文件中获取不同的实体,而不是在代码中以编程方式生成。这个想法是将开发工作分为游戏设计和引擎设计。第二个目标是添加装备,如剑,以及根据使用的装备造成的不同伤害。 查看此提交并查看这两个YouTube视频:装备和数据驱动设计。这一章也完成了书籍!
依赖项
~25MB
~470K SLoC