#game-ai #artificial-intelligence #curses #child-process #control #sequence #vte

curses-game-wrapper

为制作游戏 AI 提供的 curses 游戏包装器

4 个版本

使用旧的 Rust 2015

0.0.4 2018 年 1 月 28 日
0.0.3 2018 年 1 月 28 日
0.0.2 2018 年 1 月 26 日
0.0.1 2018 年 1 月 26 日

#9 in #vte

22 每月下载次数

MIT 许可证

58KB
1.5K SLoC

关于

Crates.io Documentation License: MIT Build Status 此库是 curses 游戏的包装器,用于制作 AI。此包提供以下功能:

  • 以子进程形式启动 CUI 游戏
  • vt100 控制序列的仿真(由 vte crate 协助)

使用方法

extern crate curses_game_wrapper as cgw;
use cgw::{ActionResult, AsciiChar, GameSetting, Reactor};
use std::time::Duration;
fn main() {
    struct EmptyAI {
        loopnum: usize,
    };
    impl Reactor for EmptyAI {
        fn action(&mut self, _screen: ActionResult, turn: usize) -> Option<Vec<u8>> {
            let mut res = Vec::new();
            match turn {
                val if val == self.loopnum - 1 => res.push(AsciiChar::CarriageReturn.as_byte()),
                val if val == self.loopnum - 2 => res.push(b'y'),
                val if val == self.loopnum - 3 => res.push(b'Q'),
                _ => {
                    let c = match (turn % 4) as u8 {
                        0u8 => b'h',
                        1u8 => b'j',
                        2u8 => b'k',
                        _ => b'l',
                    };
                    res.push(c);
                }
            };
            Some(res)
        }
    }
    let loopnum = 50;
    let gs = GameSetting::new("rogue")
        .env("ROGUEUSER", "EmptyAI")
        .lines(24)
        .columns(80)
        .debug_file("debug.txt")
        .max_loop(loopnum + 1)
        .draw_on(Duration::from_millis(100));
    let game = gs.build();
    let mut ai = EmptyAI { loopnum: loopnum };
    game.play(&mut ai);
}

您可以通过以下方式运行上述代码

cargo run --example rogue

您可以通过 Ctrl-C(信号处理不完整,但除非 AI 被困在无限循环中,否则效果良好)来停止查看器。

进一步示例

请参阅我的 rogue-ai 仓库asciinema

致谢

https://ttssh2.osdn.jp/manual/ja/about/ctrlseq.html
https://www.xfree86.org/current/ctlseqs.html
https://www.vt100.net/docs/vt100-ug/contents.html
https://github.com/jwilm/alacritty

依赖项

~7–19MB
~233K SLoC