3 个稳定版本
1.1.1 | 2024 年 5 月 11 日 |
---|---|
1.1.0 | 2024 年 5 月 10 日 |
1.0.0 | 2024 年 5 月 7 日 |
#76 在 游戏
每月 31 次下载
69KB
991 行
生命游戏
这个库帮助创建简单的生命游戏模拟。它基于由 John Conway 于 1970 年发明的 康威的生命游戏。与这个库的主要区别是,没有无限平面,而是通过 SurfaceType
枚举定义了四个不同的有限表面。这是我第一个 Rust 项目,选择模拟生命游戏来学习这门语言。
要使用此库,将其添加到项目的 Cargo.toml
文件的依赖部分,如下所示。您可以选择特定版本或使用 '*' 以使用最新版本。
[dependencies]
simple_game_of_life = "*"
依赖关系
此库依赖于 simple 图形库,它本身依赖于 SDL 和 SDL 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 种子,并使用窗口显示来展示它们的功能。
矩形
矩形 是最简单的表面类型,其中没有环绕,这意味着所有边缘都是“死亡区域”。
球体
球体 是一个没有“死亡区域”的表面类型。模拟的每一侧都会环绕到对面。
水平环
水平环是模拟的表面类型,其中模拟的顶部和底部是“死亡区域”,而左右两侧将相互环绕。这与视频游戏《吃豆人》的行为相同。
垂直环
垂直环是模拟的表面类型,其中模拟的左右两侧是“死亡区域”,而顶部和底部将相互环绕。
显示类型和自定义
打印
查看模拟的最简单和最基本的方法是通过终端打印。模拟实现了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
.cell_color(0, 255, 20, 255) // Green cells
.line_color(0, 20, 200, 255) // Blue lines
.cell_width(50) // 50px cell width
.cell_height(85) // 85px cell height
依赖关系
~17MB
~358K SLoC