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游戏开发

Download history 3/week @ 2024-07-05 220/week @ 2024-07-12 14/week @ 2024-07-19 5/week @ 2024-07-26 1/week @ 2024-08-02

每月240次下载

自定义许可

61KB
1K SLoC

Bevy细胞自动机

workflow

MIT licensed unsafe forbidden Crates.io Docs.rs dependency status

bevy_life是一个通用的细胞自动机插件。从经典的2D 康威生命游戏WireWorld 和3D规则,该插件完全通用且动态。

查看

Bevy版本

main分支遵循bevy的发布版本,但我也提供了一个bevy-main分支,以便遵循bevymain分支

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 Cellimpl CellState 组件。该库提供了一些实现,例如为细胞提供 MooreCell2dMooreCell3d,以及为状态提供 ConwayCellStateWireWorldCellState 等。

您可以按照自己的意愿实现自己的 细胞(坐标系)和 状态(规则),细胞自动机系统是完全动态和通用的。

有关更多信息,您可以查看一些示例

暂停

插入一个 SimulationPause 资源将暂停模拟,移除它将恢复。

并行执行和批处理

插入一个 SimulationBatch 资源将允许以自定义批大小并行计算细胞。

Cargo 功能

插件运行不需要任何功能,主要特质 CellCellState 总是可用。但您可以启用以下功能

  • 2D(默认启用):启用二维类型,如
    • MooreCell2d(8个邻居的正方形细胞)
    • NeumannCell2d(4个邻居的正方形细胞)
    • HexagonCell2d(6个邻居的六边形细胞)
    • 插件预设:GameOfLife2dPluginImmigrationGame2dPluginRainbowGame2dPluginWireWorld2dPluginCyclicAutomaton2dPlugin
  • 3D:启用三维类型,如
    • MooreCell3d(26个邻居的立方体细胞)
    • NeumannCell3d(6个邻居的立方体细胞)
    • 插件预设:GameOfLife3dPluginImmigrationGame3dPluginRainbowGame3dPluginWireWorld3dPluginCyclicAutomaton3dPlugin
  • auto-coloring(示例或调试目的)
    • 现在 CellState 特质需要 color 方法
  • bevy_reflect(默认启用):启用对常见类型的反射支持

免责声明

这可能不是 Rust 中最快的细胞自动机实现。例如,使用 Gosper 的 HashLife,经典的“生命游戏”可能会更快。

该库的目标是通用和动态,以便您可以将细胞自动机集成到任何 Bevy 项目中,使用任何规则,在 2D 或 3D 中。

示例项目

电线世界

使用 bevy_life 和电线世界规则来模拟电气系统的 wireworld-rs 项目。

Alt

Alt

内部示例

对于每个示例,按空格键可以重新加载板。

注意:添加发布标志会增加示例的性能

二维生命游戏

运行 cargo run --example 2d_game_of_life --features auto-coloring

Alt

2D 移民游戏

运行 cargo run --example 2d_immigration_game --features auto-coloring

Alt

2D 彩虹游戏

运行 cargo run --example 2d_rainbow_game --features auto-coloring

Alt

2D 循环颜色

运行 cargo run --example 2d_cyclic_colors --features auto-coloring

Alt

2D 石头剪刀布

此示例展示了如何定义自定义规则

运行 cargo run --example 2d_rock_paper_scissor

Alt

3D 生命游戏(4555 规则)

运行 cargo run --example 3d_game_of_life --features "3D auto-coloring" --no-default-features

Alt

依赖项

~33–71MB
~1M SLoC