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 每月下载次数
58KB
1.5K SLoC
关于
此库是 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