curses是一个在Linux/Unix下广泛应用的图形函数库,作用是可以绘制在DOS下的用户界面和漂亮的图形。具体到操作就是在编译的时候要加上 -lcurses 选项,安装方式如下:
sudo apt-get install libncurses5-dev
2048 游戏里最关键的就是消掉方块和在屏幕任意位置输出数据,也就是说游戏的逻辑和显示两个部分。
第一步,引入头文件,定义全局变量,声明所需框架的函数原型。
#include<stdio.h>
#include<stdlib.h>
#include<curses.h> //curses绘图库
#include<time.h> //时间库,用于生成随机数种子
#include<unistd.h> //POSIX系统API库
int a[4][4] = {0};
int empty;
void draw(); //绘制游戏界面
void play(); //逻辑主体
void init(); //初始化函数
void draw_one(int y,int x); //绘制单个数字
int game_over(); //游戏结束
第二步,编写主函数
int main()
{
init();
play();
endwin(); //<curses.h>关闭curses并重置tty(结束curses编程时,最后调用的一个函数)
return 0;
}
第三部,实现框架函数内容。
(1)init()初始化函数
curses工作在屏幕,窗口和子窗口之上。屏幕是设备全部可用显示面积(对终端是该窗口内所有可用字符位置),窗口与具体例程有关。如基本的stdscr窗口等。
curses使用两个数据结构映射终端屏幕,stdscr和curscr。stdscr是“标准屏幕”(逻辑屏幕),在curses函数库产生输出时就刷新,是默认输出窗口(用户不会看到该内容)。curscr是“当前屏幕”(物理屏幕),在调用refresh函数是,函数库会将curscr刷新为stdscr的样子。
使用initscr();和endwin();两个函数对函数库进行初始化和重置。
void init()
{
int x,y;
initscr(); //<curses.h>初始化curses库和tty
//(在开始curses编程之前,必须使用initscr()这个函数来开启curses模式)
cbreak(); //<curses.h>设置cbreak模式,字符一键入,直接传给程序
noecho