1 个版本 (0 个不稳定版本)
使用旧Rust 2015
2.0.0-alpha2 | 2014年8月7日 |
---|
#5 in #edition
101 星 & 4 关注者
270KB
4K SLoC
安哥鲁莫斯 Rust 版本
这是将安哥鲁莫斯直接翻译为Rust编程语言的过程。 安哥鲁莫斯是一个类似BM98的简约音乐视频游戏,支持BMS格式进行播放。
安哥鲁莫斯将字符串解析、路径操作、二维图形和复杂游戏玩法精心封装在几千行代码中。这个翻译旨在提供一个将中等规模C代码转换为Rust的示例,并研究此类中等规模程序所需的额外库支持。结果翻译是迄今为止用Rust编写的最大应用程序之一(目前大多数Rust项目都是库),包含超过6,000行Rust代码。这部分原因是因为,与原始安哥鲁莫斯代码(由于代码大小问题而牺牲了大部分注释)不同,Rust版本有更多的注释,这也有助于理解安哥鲁莫斯本身。
有关更多信息(尤其是使用方法),请参阅原始安哥鲁莫斯的README文件。如果您想了解BMS格式是什么以及安哥鲁莫斯的结构,我已写了大量相关内容。
截图
游戏数据来源:"sunken azure world",音乐由maki创作,由Daida Three Brothers提供。版权所有。
许可证
安哥鲁莫斯根据GNU GPL版本2+分发,本翻译也是如此。其中一部分打算作为补丁发送到Rust,因此这些部分根据Apache License 2.0和MIT许可证授权。请参阅代码获取详细信息。
常见问题解答
如何编译?
克隆此仓库并运行以下命令(是的,您需要MinGW shell才能在Windows上运行)
cargo build --release
target/release/angolmois --help
您需要最新的Rust master版本和Cargo。您可以为两者都安装夜间版本。
为什么把所有内容都放在一个文件里?
主要是因为这是对Angolmois的直接翻译,它由一个包含不到2,000行代码的单个C文件组成。我在进行一些重构的同时尽量保持整个代码结构,因为这使翻译变得更加明显。这也解释了为什么我们的绑定相对较大;原始的Angolmois除了SDL库外也是自包含的。
现在有一个名为Sonorous的Angolmois分支,它已经从一个完整的游戏发展而来。如果您不喜欢一个大的文件,请考虑看一下它。
Rust版本与原始Angolmois之间的区别是什么?
在理论上,Angolmois Rust Edition应该与Angolmois 2.0.0 alpha 2完全相同。在实践中,有一些区别
- 它们在包含无效UTF-8序列的文件上表现不同。
- Rust版本缓存目录条目,以避免因不同的目录列出语义而导致的性能损失。
- C版本无法处理显示中的2,000个或更多措施。(在2.0 alpha 3中修复)
- C版本允许在
#PATH_WAV
中使用非本地路径分隔符;Rust版本不允许。 - C版本允许通过重复设置相同的字母数字键到BGA层来“倒带”电影;Rust版本不允许。我不确定这个特性是否真的可移植。
请注意,基于2.0.0 alpha 2的Rust Edition在开发中也与2.0 alpha 3有相当大的不同。针对2.0 alpha 3的目标并不困难,但目前由于Rust对SDL 2.0绑定的不成熟而受阻。