介绍

ncurses(new curses)是一套编程库,它提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面。
ncurses名字中的n意味着“new”,因为它是curses的自由软件版本。由于AT&T“臭名昭著”的版权政策,人们不得不在后来用ncurses去代替它。
ncurses是GNU计划的一部分,但它却是少数几个不使用GNU GPL或LGPL授权的GNU软件之一。

其实我们对ncurses本身并不陌生,以下几款大名鼎鼎的软件都用到过ncurses:

vim
emacs
lynx
screen
为了制作自己构想了一段时间的Roguelike的游戏,同时作为对《The C Programming Language》的实践,我开始接触ncurses并在此作笔记。

安装

Linux

以Debian为例(人生中第一个发行版)

1
sudo apt-get install libncurses5-dev

在非Debian发行版中的安装方法以后会来补充

安装完毕后,我们写下如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//test.c

#include <string.h>
#include <ncurses.h>

int main(int argc,char* argv[]){
initscr();
raw();
noecho();
curs_set(0);

char* c = "Hello, World!";

mvprintw(LINES/2,(COLS-strlen(c))/2,c);
refresh();

getch();
endwin();

return 0;
}

不出意外的话结果如下:

Windows

ncurses貌似没有提供Windows平台的支持,不过作为代替,我们可以使用PDCurses。虽然最近一次的stable版本已经是08年的事情了,但使用起来暂时没有发现问题,可以对照着网上的ncurses的资料进行学习。

如果不想自己编译,可以直接下载pdc34dllw.zip。
否则,下载PDCurses-3.4.tar.gz。以下只介绍下载了pdc34dllw.zip的情况。

将pdc34dllw.zip解压后,不出意外将得到下面这些文件:

以MinGW为例,

  • 将所有.h文件放入MinGW的include目录中

  • 将pdcurses.lib文件放入MinGW的lib目录中

  • 将pdcurses.dll文件放到你的目标文件的同目录下(推荐)或者X:\Windows\SysWOW64目录中(不推荐)
    配置完毕后,我们写下如下代码:

//test.c

#include <string.h>
#include <curses.h>

int main(int argc,char* argv[]){
initscr();
raw();
noecho();
curs_set(0);

char* c = "Hello, World!";

mvprintw(LINES/2,(COLS-strlen(c))/2,c);
refresh();

getch();
endwin();

return 0;

}

然后使用gcc编译,不要忘了加-lpdcurses哦。

1
gcc test.c -o test.exe -lpdcurses

不出意外的话运行结果如下: