15个版本 (9个破坏性更新)
0.10.1 | 2024年7月15日 |
---|---|
0.9.0 | 2024年2月20日 |
0.8.0 | 2023年7月12日 |
0.6.0 | 2022年11月13日 |
0.2.3 | 2021年10月16日 |
#251 在 游戏开发
每月240次下载
61KB
1K SLoC
Bevy细胞自动机
bevy_life
是一个通用的细胞自动机插件。从经典的2D 康威生命游戏 到 WireWorld
和3D规则,该插件完全通用且动态。
查看
- 生命游戏的变体
WireWorld
实现 (查看此库的 实现)
Bevy版本
main
分支遵循bevy
的发布版本,但我也提供了一个bevy-main
分支,以便遵循bevy
的main
分支
bevy_life |
bevy |
---|---|
0.3.x | 0.6.x |
0.4.x | 0.7.x |
0.5.x | 0.8.x |
0.6.x | 0.9.x |
0.7.x | 0.10.x |
0.8.x | 0.11.x |
0.9.x | 0.13.x |
0.10.x | 0.14.x |
如何使用
将CellularAutomatonPlugin
添加到您的bevy应用程序中
CellularAutomatonPlugin<C, S>
有两个泛型类型
C
-> 实现Cell
的任何类型,定义坐标系S
-> 实现CellState
的任何类型,定义模拟规则
您可以添加任意多的泛型CellularAutomatonPlugin
,该库提供了一些实现,例如
GameOfLife2dPlugin
GameOfLife3dPlugin
ImmigrationGame2dPlugin
ImmigrationGame3dPlugin
RainbowGame2dPlugin
RainbowGame3dPlugin
WireWorld2dPlugin
WireWorld3dPlugin
CyclicColors2dPlugin
CyclicColors3dPlugin
然后您可以像往常一样使用 bevy,并向实体添加 impl Cell
和 impl CellState
组件。该库提供了一些实现,例如为细胞提供 MooreCell2d
或 MooreCell3d
,以及为状态提供 ConwayCellState
、WireWorldCellState
等。
您可以按照自己的意愿实现自己的 细胞(坐标系)和 状态(规则),细胞自动机系统是完全动态和通用的。
有关更多信息,您可以查看一些示例
暂停
插入一个 SimulationPause
资源将暂停模拟,移除它将恢复。
并行执行和批处理
插入一个 SimulationBatch
资源将允许以自定义批大小并行计算细胞。
Cargo 功能
插件运行不需要任何功能,主要特质 Cell
和 CellState
总是可用。但您可以启用以下功能
2D
(默认启用):启用二维类型,如MooreCell2d
(8个邻居的正方形细胞)NeumannCell2d
(4个邻居的正方形细胞)HexagonCell2d
(6个邻居的六边形细胞)- 插件预设:
GameOfLife2dPlugin
、ImmigrationGame2dPlugin
、RainbowGame2dPlugin
、WireWorld2dPlugin
、CyclicAutomaton2dPlugin
3D
:启用三维类型,如MooreCell3d
(26个邻居的立方体细胞)NeumannCell3d
(6个邻居的立方体细胞)- 插件预设:
GameOfLife3dPlugin
、ImmigrationGame3dPlugin
、RainbowGame3dPlugin
、WireWorld3dPlugin
、CyclicAutomaton3dPlugin
auto-coloring
(示例或调试目的)- 现在
CellState
特质需要color
方法
- 现在
bevy_reflect
(默认启用):启用对常见类型的反射支持
免责声明
这可能不是 Rust 中最快的细胞自动机实现。例如,使用 Gosper 的 HashLife
,经典的“生命游戏”可能会更快。
该库的目标是通用和动态,以便您可以将细胞自动机集成到任何 Bevy 项目中,使用任何规则,在 2D 或 3D 中。
示例项目
电线世界
使用 bevy_life
和电线世界规则来模拟电气系统的 wireworld-rs 项目。
内部示例
对于每个示例,按空格键可以重新加载板。
注意:添加发布标志会增加示例的性能
二维生命游戏
运行 cargo run --example 2d_game_of_life --features auto-coloring
2D 移民游戏
运行 cargo run --example 2d_immigration_game --features auto-coloring
2D 彩虹游戏
运行 cargo run --example 2d_rainbow_game --features auto-coloring
2D 循环颜色
运行 cargo run --example 2d_cyclic_colors --features auto-coloring
2D 石头剪刀布
此示例展示了如何定义自定义规则
运行 cargo run --example 2d_rock_paper_scissor
3D 生命游戏(4555 规则)
运行 cargo run --example 3d_game_of_life --features "3D auto-coloring" --no-default-features
依赖项
~33–71MB
~1M SLoC