#fireworks #terminal #ascii #cli #simulation #command-line-arguments

bin+lib firework-rs

跨平台的终端 ASCII 艺术烟花模拟器

4 个版本 (2 个破坏性更新)

0.3.1 2024 年 4 月 30 日
0.3.0 2024 年 4 月 12 日
0.2.0 2024 年 3 月 22 日
0.1.0 2024 年 3 月 15 日

#897命令行工具

Download history 133/week @ 2024-04-29 4/week @ 2024-05-13 4/week @ 2024-05-20 1/week @ 2024-06-10 7/week @ 2024-07-01

每月 313 次下载

MIT 许可证

68KB
1.5K SLoC


gif

Firework-rs

crates.io License

Firework-rs 是一个跨平台的终端 ASCII 艺术烟花模拟器。运行二进制文件或使用库来创建自己的烟花,并只需在终端中欣赏美丽的烟花即可!

特性

  • 彩色 ASCII 艺术烟花
  • 平滑动画
  • 可自定义的烟花
  • 简单的粒子系统,让您制作烟花,而不仅仅是烟花

尝试演示

如果您尚未安装 rust,请安装它。

然后,只需运行以下命令

git clone https://github.com/Wayoung7/firework-rs.git
cd firework-rs
cargo run --release -- -d 0

或在您的计算机上全局安装

cargo install firework-rs
firework -d 0

现在二进制文件有 5 个演示,从 04

退出

要退出程序,只需按 ESC

命令行参数

USAGE:
firework [OPTIONS] --demo <DEMO-NUMBER>

Options:
    -d, --demo <DEMO-NUMBER>
            Select which demo to run. (optional)
          
            If this is not specified, automatically run the infinite random firework demo

    -l, --looping
            Set whether the fireworks show will loop infinitely

    -g, --gradient
            Set whether the fireworks will have color gradient
          
            If this is enabled, it is recommanded that your terminal is non-transparent and has black bg color to get better visual effects

        --fps <FRAME-RATE>
            Set frame per second
          
            If this is not specified, the default fps is 12

        --cjk
          Set whether to enable cjk character
          
          If enabled, each character will take up two Latin character space

    -h, --help
            Print help (see a summary with '-h')

    -V, --version
            Print version

示例命令

如果您已安装二进制文件

启用渐变的无限烟花秀

firework -g

启用循环和渐变的演示 1

firework -l -g -d 1

如果您尚未安装二进制文件

首先 cd 到项目根目录,然后运行

cargo run --release -- -g
cargo run --release -- -l -g -d 1

使用库

此包不仅有一个演示二进制文件供您享受终端烟花,还提供了一个简单的库 firework_rs 来让您玩自己的烟花。

要将此 crate 添加到您的 rust 项目中,请在项目根目录中运行

cargo add firework_rs

要制作烟花,您可以简单地使用以下结构

fn main() -> Result<()> {
    // Terminal stuff, no need to change
    let mut stdout = stdout();
    let (_width, _height) = terminal::size()?;
    let mut is_running = true;

    terminal::enable_raw_mode()?;
    execute!(stdout, terminal::EnterAlternateScreen, cursor::Hide)?;

    let mut time = SystemTime::now();
    let mut term = Terminal::default();

    // Init and add fireworks
    let mut fm = FireworkManager::default().add_firework(gen());

    // Main loop, no need to change
    while is_running {
        if event::poll(Duration::ZERO)? {
            match event::read()? {
                event::Event::Key(e) => {
                    if e.code == KeyCode::Esc {
                        is_running = false;
                    }
                }
                event::Event::Resize(_, _) => {
                    fm.reset();
                    term.reinit();
                }
                _ => {}
            };
        }

        let delta_time = SystemTime::now().duration_since(time).unwrap();
        fm.update(time, delta_time);
        time = SystemTime::now();

        term.render(&fm);
        term.print(&mut stdout);

        if delta_time < Duration::from_secs_f32(0.05) {
            let rem = Duration::from_secs_f32(0.05) - delta_time;
            sleep(rem);
        }
    }

    execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen)?;
    terminal::disable_raw_mode()?;

    Ok(())
}

// Your actuall firework design goes here, see docs for more information
fn gen() -> Firework {
    let colors = vec![
        ...
    ];
    let particles = ...
    let config = ...

    Firework {
        ...
    }
}

示例

此包在 examples/ 下提供了一些示例,展示了库的一些功能,并为您提供了一些灵感。

要运行示例,请在项目目录中 cd 到此项目目录,并简单地输入

cargo run --example <EXAMPLE-NAME>

示例名称 包含

喷泉

gif

漩涡

gif

心形

gif

兼容性

操作系统

此程序可在 Windows / Mac OS / Linux 上运行。

终端

此 crate 使用 crossterm 作为后端。crossterm 支持的终端也将由此 crate 支持。

这个库支持所有UNIX终端和Windows 7及以下版本的终端。然而,并非所有终端都经过测试,并且视觉效果良好。

建议使用具有GPU渲染加速的终端,例如 KittyAlacritty。确保您的终端没有额外的颜色主题或调整。如果您在程序中启用渐变,请确保终端窗口是 非透明 并且具有 黑色背景

帮助

如果您发现任何错误,请随时打开问题或与我联系。

依赖项

~6–11MB
~164K SLoC