15 个版本
0.3.5 | 2023年3月18日 |
---|---|
0.3.4 | 2022年10月1日 |
0.3.3 | 2021年7月3日 |
0.2.3 | 2021年2月20日 |
0.1.1 | 2020年1月26日 |
#442 in 游戏开发
被 rlifesrc-lib 使用
59KB
1.5K SLoC
CA 格式解析器
解析康威生命游戏的模式文件。
解析器读取一个字符串,并返回活细胞坐标的迭代器。
支持的格式
示例
从字符串读取
use ca_formats::rle::Rle;
const GLIDER: &str = r"#N Glider
#O Richard K. Guy
#C The smallest, most common, and first discovered spaceship. Diagonal, has period 4 and speed c/4.
#C www.conwaylife.com/wiki/index.php?title=Glider
x = 3, y = 3, rule = B3/S23
bob$2bo$3o!";
let glider = Rle::new(GLIDER).unwrap();
assert_eq!(glider.header_data().unwrap().x, 3);
assert_eq!(glider.header_data().unwrap().y, 3);
assert_eq!(glider.header_data().unwrap().rule, Some(String::from("B3/S23")));
let cells = glider.map(|cell| cell.unwrap().position).collect::<Vec<_>>();
assert_eq!(cells, vec![(1, 0), (2, 1), (0, 2), (1, 2), (2, 2)]);
从文件读取
use std::fs::File;
use ca_formats::rle::Rle;
let file = File::open("tests/sirrobin.rle").unwrap();
let sirrobin = Rle::new_from_file(file).unwrap();
assert_eq!(sirrobin.count(), 282);
未知单元格
当启用 unknown
功能时,Rle
类型将提供额外的 with_unknown
方法,将 RLE 转换为 RLE 格式的特殊变体。在这个变体中,还有一个符号,?
,它代表未知单元格。现在未知单元格是背景。每行末尾的已死单元格不得省略。迭代器还将显式输出已死单元格。
这仅支持 RLE。
另请参阅
- ca-rules - 规则字符串的解析器。
- game-of-life-parsers by René Perschon - Life 1.05 和 Life 1.06 格式的解析器。
依赖项
~3.5–4.5MB
~89K SLoC