8个版本

0.4.0 2023年4月11日
0.3.2 2020年2月17日
0.2.0 2020年1月13日
0.1.2 2019年12月30日

#230 in 命令行界面

Download history 68/week @ 2024-03-11 43/week @ 2024-03-18 19/week @ 2024-03-25 84/week @ 2024-04-01 26/week @ 2024-04-08 32/week @ 2024-04-15 33/week @ 2024-04-22 35/week @ 2024-04-29 26/week @ 2024-05-06 34/week @ 2024-05-13 87/week @ 2024-05-20 58/week @ 2024-05-27 29/week @ 2024-06-03 23/week @ 2024-06-10 36/week @ 2024-06-17 20/week @ 2024-06-24

115 monthly downloads
用于 2 crates

Apache-2.0

65KB
1K SLoC

lancat license downloads docs

ruscii

一个用于在Rust中编写终端应用程序和游戏的简单易用的库。

此项目的目标是使基于文本的游戏开发变得简单易行。任何贡献、问题或拉取请求都将非常受欢迎!

特性

  • 优化以在终端中快速渲染
  • 多平台(Linux、Windows和macOS)
    • 对于Linux,需要有一个x11服务器(大多数发行版都包含一个)。内部,ruscii 使用它来创建透明按键按下和按键释放事件。
  • 支持多个终端(见 Crossterm的终端支持
  • 在终端中提供按键和释放事件(对游戏至关重要!)
  • 简洁的API - 用相对较少的行编写基于终端的游戏!
  • 提供一种简单的方法来恢复错误状态的终端

依赖项

Linux

要在Linux中编译使用 ruscii 编写的应用程序,您必须安装X11开发库。

如果您的系统没有这些库,您可以在终端中使用以下命令根据您的特定Linux发行版安装它们。

  • 在Ubuntu或Debian
    sudo apt install libx11-dev
    
  • 在Fedora、RHEL或CentOS
    sudo dnf install xorg-x11-server-devel
    

Windows和macOS

Windows和macOS没有特殊的依赖项。

示例

您可以在 示例文件夹 中找到使用 ruscii 编写的应用程序和游戏的几个示例。

要测试一个示例,请使用以下命令使用带有示例标志安装 ruscii

cargo install ruscii --examples
~/.cargo/bin/<example_name>

安装后,运行它

cargo run --example <example_name> --release

示例游戏

太空侵略者(《200行》)

asciicast

乒乓球(《150行》)

asciicast

注意:第一次播放 asciimedia 可能会卡顿;再次播放可以解决这个问题。

使用 ruscii 的项目

  • thrust - 一个简单的太空射击游戏。在终端中使用基于字符的用户界面运行。
  • terminal-tetris - 🕹️ 使用 Rust 编写的终端版俄罗斯方块。
  • chemcreator - 用于识别有机分子的文本工具。

如果您有一个使用 ruscii 的项目并希望它出现在这里,请提交一个问题!

入门

安装

将以下行添加到您的 Cargo.toml 文件中的 [dependencies] 部分

ruscii = "0.4.0"

在自己的终端中测试它!

将以下代码复制到您的 main.rs 文件中以运行基本的 ruscii 应用程序

use ruscii::app::{App, State};
use ruscii::terminal::{Window};
use ruscii::drawing::{Pencil};
use ruscii::keyboard::{KeyEvent, Key};
use ruscii::spatial::{Vec2};
use ruscii::gui::{FPSCounter};

fn main() {
    let mut fps_counter = FPSCounter::new();
    let mut app = App::new();

    app.run(|app_state: &mut State, window: &mut Window| {
        for key_event in app_state.keyboard().last_key_events() {
            match key_event {
                KeyEvent::Pressed(Key::Esc) => app_state.stop(),
                KeyEvent::Pressed(Key::Q) => app_state.stop(),
                _ => (),
            }
        }

        fps_counter.update();

        let mut pencil = Pencil::new(window.canvas_mut());
        pencil.draw_text(&format!("FPS: {}", fps_counter.count()), Vec2::xy(1, 1));
    });
}

调试

调试终端应用程序通常很困难,因为应用程序的输出和回溯都显示在同一个终端视图中。ruscii 使用 标准输出 来渲染您的应用程序,并使用 标准错误 来记录错误信息。我们建议您将 标准错误 重定向到文件,以便稍后检查。

要运行您的项目并将错误日志保存到文件,请运行以下命令

export RUST_BACKTRACE=1
cargo run 2> my_stderr

所有错误输出都将保存到项目目录中的 my_stderr

依赖项

~2–32MB
~414K SLoC