3 个版本
0.0.2 | 2023年6月25日 |
---|---|
0.0.1 | 2023年6月18日 |
0.0.0 | 2023年6月16日 |
#277 in 科学
140KB
2.5K SLoC
life-backend
康威生命游戏的后端实现。
此库为模拟类似生命游戏的细胞自动机提供了多种功能,包括康威生命游戏。
支持以下操作
- 解析或写入类似生命游戏的模式(支持纯文本和 RLE 格式)
- 解析或写入出生/存活符号表示法中的规则(例如,
"B3/S23"
) - 管理棋盘,活细胞和死细胞的两维正交网格地图(位置 x 和 y 坐标的类型已推广)
- 根据给定的规则和棋盘创建新游戏,推进世代并查询其状态
它不提供通过用户界面查看或编辑模式的界面功能。
示例
以下代码示例演示了如何从模式文件创建新游戏,推进游戏并打印其最终状态
use life_backend::format;
use life_backend::{Board, Game, Position};
// Read a pattern file
let handler = format::open("patterns/glider.rle")?;
// Create a new game (the type parameter is `i16`)
let rule = handler.rule();
let board = handler
.live_cells()
.map(Position::try_from)
.collect::<Result<Board<i16>, _>>()?;
let mut game = Game::new(rule, board);
// Advance the generation
let generation = 4;
for _ in 0..generation {
game.advance();
}
// Print the last state
let bbox = game.board().bounding_box();
let population = game.board().iter().count();
println!("Generation {generation}: bounding-box = {bbox}, population = {population}");
println!("{game}");
examples/game.rs
是一个简单的生命游戏程序。它从模式文件创建新游戏,推进游戏并将状态打印到标准输出。您可以像运行此程序一样运行此程序
$ cargo run --example game -- --generation=1 patterns/glider.rle
...
Generation 0: bounding-box = (x:[0, 2], y:[0, 2]), population = 5
.O.
..O
OOO
Generation 1: bounding-box = (x:[0, 2], y:[1, 3]), population = 5
O.O
.OO
.O.
许可证
根据以下之一许可
- Apache 许可证 2.0 (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/license/mit/)
您自行选择。
贡献
除非您明确表示,否则根据 Apache-2.0 许可证定义的您有意提交的工作中的任何贡献,均应按上述方式双重许可,不附加任何额外条款或条件。
依赖项
~280–375KB