#game-of-life #life #game #conway #of

simple_game_of_life

使用 Rust 构建的简单生命游戏库

3 个稳定版本

1.1.1 2024 年 5 月 11 日
1.1.0 2024 年 5 月 10 日
1.0.0 2024 年 5 月 7 日

#76游戏

每月 31 次下载

MIT 许可证

69KB
991

生命游戏

这个库帮助创建简单的生命游戏模拟。它基于由 John Conway 于 1970 年发明的 康威的生命游戏。与这个库的主要区别是,没有无限平面,而是通过 SurfaceType 枚举定义了四个不同的有限表面。这是我第一个 Rust 项目,选择模拟生命游戏来学习这门语言。

要使用此库,将其添加到项目的 Cargo.toml 文件的依赖部分,如下所示。您可以选择特定版本或使用 '*' 以使用最新版本。

[dependencies]
simple_game_of_life = "*"

依赖关系

此库依赖于 simple 图形库,它本身依赖于 SDLSDL Image。如果您想使用显示窗口,则需要安装这些库。

文档

此项目的文档是用 rustdoc 编译的,可在 包的网站 上找到。

入门指南

这是一个带有显示和连续模拟生成演示的简单 5x5 模拟。

use std::time::Duration;
use game_of_life::simulation::{Simulation, SurfaceType};
use game_of_life::simulation_builder::SimulationBuilder;

let mut simulation: Simulation = SimulationBuilder::new()
    .rows(5) // 5 rows high
    .columns(5) // 5 columns wide
    .surface_type(SurfaceType::Rectangle) // Rectangle (non-wrapping) surface
    .display(true) // Declaring that the simulation should display the generations in a window
    .cell_size(50) // Cell size of 50x50 pixels
    .build() // Build into a simulation
    .unwrap();

// This will run the entire simulation with a display window,
// updating the display with each generation every 250 milliseconds
// until it detects a still or periodic simulation
simulation.simulate_continuous_generations(Duration::from_millis(250), true)

表面类型

以下每个示例都将使用相同的 7x7 种子,并使用窗口显示来展示它们的功能。

矩形

矩形 是最简单的表面类型,其中没有环绕,这意味着所有边缘都是“死亡区域”。

Rectangle Surface Demonstration GIF

球体

球体 是一个没有“死亡区域”的表面类型。模拟的每一侧都会环绕到对面。

Ball Surface Demonstration GIF

水平环

水平环是模拟的表面类型,其中模拟的顶部和底部是“死亡区域”,而左右两侧将相互环绕。这与视频游戏《吃豆人》的行为相同。

Horizontal Loop Surface Demonstration GIF

垂直环

垂直环是模拟的表面类型,其中模拟的左右两侧是“死亡区域”,而顶部和底部将相互环绕。

Vertical Loop Surface Demonstration GIF

显示类型和自定义

打印

查看模拟的最简单和最基本的方法是通过终端打印。模拟实现了Display,因此可以轻松打印。模拟不需要.print(true)标志来打印,但如果你希望模拟每次模拟一代时自动打印,则需要此标志。

println!("{}", simulation)
1
-----
--**-
-*-*-
--**-
-----

显示窗口

还可以选择以更丰富多彩的方式在窗口中显示模拟,就像你在演示中看到的那样。与打印不同,查看窗口中的模拟需要.display(true)标志。在模拟的每次迭代之后,窗口将自动更新下一帧以显示当前细胞代。

窗口显示可以通过不同的颜色和大小选项进行自定义。每个自定义标志可以在SimulationBuilder文档页面上查看,以下是一些可以做的示例。

.cell_color(255, 0, 0, 255) // Red cells
.background_color(0, 0, 0, 255) // Black background

Red and Black Example

.cell_color(0, 255, 20, 255) // Green cells
.line_color(0, 20, 200, 255) // Blue lines

Green and Blue Example

.cell_width(50) // 50px cell width
.cell_height(85) // 85px cell height

Stretched Example

依赖关系

~17MB
~358K SLoC