如何使用ncurses库并在Linux上编译?
在Linux上编译Ncurses程序的教程
简介
Ncurses(New Curses)是一个用于创建文本用户界面(TUI)的库,广泛用于Unix-like系统中。它提供了丰富的函数来处理屏幕输出、键盘输入、光标控制等。本文将指导您如何在Linux环境下编译和运行一个简单的Ncurses程序。
ncurses函数使用介绍:
initscr()
:初始化屏幕,进入curses模式。这是使用ncurses库时首先要调用的函数。
keypad()
:启用或禁用特殊按键的读取。当设置为TRUE
时,可以读取如方向键、功能键等特殊按键。
noecho()
:关闭按键回显,即用户输入的字符不会显示在屏幕上。
printw()
:在当前光标位置打印文本。
refresh()
:将缓冲区的内容刷新到屏幕上,使更改立即可见。
getch()
:等待用户按键并返回按键的ASCII值。如果按下的是特殊按键(如方向键),则返回相应的宏定义值。
endwin()
:结束curses模式,恢复终端到调用initscr()
之前的状态。
clear()
:清除屏幕,将所有内容重置为空白。
move(y, x)
:移动光标到指定的行y
和列x
位置。
环境准备
确保您的Linux系统已经安装了GCC编译器和Ncurses库。如果没有安装,可以通过以下命令安装:
bash复制
sudo apt update
sudo apt install build-essential libncurses5-dev libncursesw5-dev
创建Ncurses程序
-
创建源文件:创建一个名为
hello_ncurse.c
的文件,并输入以下代码:c复制
#include <ncurses.h> int main() { int ch; initscr(); // Start curses mode printw("Hello World !!!"); // Print Hello World refresh(); // Print it on to the real screen ch = getch(); // Wait for user input endwin(); // End curses mode return 0; }
-
编译程序:使用以下命令编译您的程序:
bash复制
gcc -o hello_ncurse hello_ncurse.c -lncurses
这里,
gcc
是GNU编译器集合,-o hello_ncurse
指定输出文件名,hello_ncurse.c
是源文件,-lncurses
链接Ncurses库。 -
运行程序:编译成功后,运行编译后的程序:
bash复制
./hello_ncurse
您应该能看到屏幕上显示 "Hello World !!!"。
实现一个简单的Ncurses游戏
为了进一步演示Ncurses的功能,我们将创建一个简单的游戏,其中字符 "O" 会在屏幕上左右移动。
-
创建源文件:创建一个名为
move字符.c
的文件,并输入以下代码:#include <ncurses.h> int main() { int key, x, y; initscr(); // Initialize the ncurses library keypad(stdscr, TRUE); // Enable special keys like arrow keys to be read directly noecho(); // Disable echoing of key presses to the screen x = y = 5; // Initialize the x and y coordinates for the object while (key != 'q') { // Main game loop, continues until 'q' is pressed clear(); // Clear the screen move(0, 0); // Put the cursor at the start of the screen printw("Press left or right arrow - exit by pressing:q"); // Print instructions on the screen move(y, x); // Move the cursor to the current position of the object printw(" OOOO "); // Print the object at the current position refresh(); // Refresh the screen to show the changes key = getch(); // Wait for a key press if (key == KEY_LEFT) { // If the left arrow key is pressed x--; // Move the object left if (x < 0) x = 0; // Ensure the object does not move out of the left boundary } else if (key == KEY_RIGHT) { // If the right arrow key is pressed x++; // Move the object right if (x > 30) x = 30; // Ensure the object does not move out of the right boundary } } endwin(); // End the ncurses mode and restore the terminal to its original state return 0; }
-
编译程序:使用以下命令编译你的程序:
bash复制
gcc -o move_char move_char.c -lncurses
-
运行程序:编译成功后,运行编译后的程序:
bash复制
./move_char
你应该能看到字符 "O" 在屏幕上左右移动。
如果不知道如何在linux文件运行,请回看我之前发的samba和makefile文章
最后结果是这样的