这次 ENGG1340 课程的 group project 是设计并实现一个 text-base game,作为终端上运行的 text-base game,有一个出彩的 GUI 肯定是一个加分项!
花了一个下午学习了一下用法,在这里简单的总结一下,并且附上一些简单 GUI 组成的实例
官方 release 网址在这里
在终端上输入命令 进行安装
所有使用了 库的程序,在编译时需要添加参数 使编译器链接到 ncurses 库
例:
使用 初始化标准窗口对象 stdscr (WINDOW 类)
初始化过后,我们接下来将与该窗口对象进行交互: std::cin/out, scan/printf 等标准输入输出将失效
当使用完 ncurses,想回到常规终端模式时,使用 来关闭窗口
通常在程序退出前调用
在调用 之前,标准输入输出将失效
想要与初始化后的窗口对象交互,我们需要使用 ncurses 库提供的输入/输出函数
由于 gp 中使用了很多 string,我自定义了两个接口用来处理 string 类型的输入输出
在 ncurses 模式中,我们可以通过 函数轻松控制光标的位置,从而实现在终端的指定位置输出
将光标移动到当前窗口的第 行第 列 (行列均从 开始),且接下来输出的内容都将从该位置开始
以下实例将在从屏幕中央开始 (注意,是开始而不是位于) 输出 "Hello World!"
移动光标和输出可以在同一个函数 中完成: 例如上例程序可写成
在输出完毕后,使用 进行刷新,将输出显示到当前屏幕上
在未指定的情况下, 初始化的窗口是标准屏幕
而有时我们需要多个窗口;通过创建新窗口 () 或子窗口 ()
创建新窗口时,其会被分配一个新的内存;而子窗口与其父窗口共用内存
使用 删除窗口 win,即,释放其所占用的内存
- 删除窗口 win 并不代表 屏幕上 win 输出的内容会消失,因此在删除之前调用 与 进行清屏
- 不要删除 ncurses 的默认窗口 , 结束它使用 即可
超级简单易懂,之前我们介绍的所有对 的函数,加上前缀 w,再添加对应窗口的指针作为参数就得到了与非标准窗口交互的函数
例如: 对应 , 对应 , 对应 (这个位置稍有不同)
当我们使用 或其他对非标准窗口的交互函数对子窗口进行操作时,父窗口 (或其他子窗口) 输出的内容会暂时消失
解决方法是:在 过后,再对父窗口进行刷新
即 或 (当父窗口是标准窗口时)
当未加 时, 窗口的输出内容 (即 box 绘出的边框) 将不会显示

只有将对父窗口重新刷新 之后,所有的输出内容才会显示

这在实现 text-base game 中是一个很实用的功能,它可以用来实现场景的切换,与读/存档功能
例如,"开始" 界面可以进入 "游戏" 界面,但从 "游戏" 界面返回时,由于屏幕已经被 "游戏" 界面所在窗口覆盖,我们需要重新加载 "开始" 界面
此时,利用窗口的转储,我们可以直接恢复之前的界面
标准窗口 stdscr 可以利用下面的两个函数进行存储与读取:
以下是一个简单的例程 (gp 中的界面转换可以以此为基础)
若有时我们需要暂时退出 ncurses 模式,回到行缓冲模式,我们可以储存当前标准窗口的内容后再退出
(或使用 与 函数,由于 gp 中可能不会用到,这里不多介绍)
当然,除了标准窗口 stdscr,其他任何我们新创建的窗口都可以进行转储
使用以下的两个函数:
在行缓冲模式中,若输出的内容超过了终端的 bottom line,将会自动滚屏 (旧的输出将会向上滚动,为新的输出留位置)
我以为 ncurses 中的窗口默认滚屏,结果当输出超出屏幕时,反而向右溢出了
我翻了好久的库文档,终于找到了对应的函数 (这里)
有时候我们希望改变窗口的背景与文本颜色, ncurses 库对此也提供了支持
在使用之前,我们先初始化颜色设置
在 成功调用后,一系列的常量将会产生,例 (支持的颜色数量), (黑色), ...
我们使用 函数来创建 背景-文本 的颜色对,并用 函数激活
接下来,直到 关闭之前,所有输出的 背景-文本 都将是指定的颜色对
对非标准窗口的操作使用 与
与 不仅可以用来设定颜色,还能够实现许多输出文本效果
这些效果通过一系列常量来代表: , ,
例如: ,那么在 之前输出的文本都将闪烁显示
这些效果的复合 (甚至与颜色的复合) 可以通过常量间的或 运算简单的实现 (这与 windows 对终端文本颜色的操作很相似)
例如 代表文本闪烁且加下划线显示
这里附上 ncurses 提供的所有输出文本效果常量
- Debian ncurses manpage
- 滚屏 scrollok
- 窗口转储 scr_dump
- tiga-Unix/Linux下的Curses库开发指南——第三章curses库窗口 (这好像也是转载的,但是翻译的很好,也很全)
- KeBlog-ncurses (Kewth NB)
- ztq-ncurses库 常用函数及基本使用 (有一个通过子窗口实现分屏的程序,gp 的时候可以借鉴,修改一下参数)
- ncurses 输出修饰 (包含了 ncurses 提供的一系列 attr 前缀函数,对输出进行修饰,很有用)
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/10645.html