您的位置:首页 > 运维架构 > Linux

Linux Curses编程实现贪吃蛇

2015-10-06 19:21 387 查看
curses库 简单而言,提供UNIX中多种终端 操作光标和显示字符 的接口。我们常见的vi就是使用curses实现的。现在一般都用ncurses库。

Linux下curses函数库 Linux curses库使用 这两篇文章很详细地介绍了curses,在此就不详细介绍了。

1.ubuntu安装curses函数库

$sudo apt-get install ncurses-dev

用curses库,编译程序:

$gcc program.c -o program -lcurses

2.工作原理

curses工作在屏幕,窗口和子窗口之上。屏幕是设备全部可用显示面积(对终端是该窗口内所有可用字符位置),窗口与具体例程有关。如基本的stdscr窗口等。

curses使用两个数据结构映射终端屏幕,stdscr和curscr。stdscr是“标准屏幕”(逻辑屏幕),在curses函数库产生输出时就刷新,是默认输出窗口(用户不会看到该内容)。curscr是“当前屏幕”(物理屏幕),在调用refresh函数是,函数库会将curscr刷新为stdscr的样子。

3.常用函数

#ifndef TANCHISHE_H
#define TANCHISHE_H

#include <stdio.h>
#include <curses.h>
#include <time.h>
#include <sys/time.h>       //timeval
#include <unistd.h>         //usleep
#include <sys/select.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>        //memset
#include <setjmp.h>

#define LSBLANK     L" "
#define BLANK       " "

#define INIT_NODE_SIZE 5
#define SNAKE_MAX_SIZE 8192
#define LEFT_WALL 1
#define RIGHT_WALL (COLS-2)
#define TOP_WALL 0
#define BUTT_WALL (LINES-1)
#define NOB         L"#"//
#define LSFOOD      L"O"
#define NODE        "#"//instead of L"#"
#define FOOD        "O"
#define MAX_LEVEL 100
#define SUB_TIME_EACH_LEVEL 6
#define TIMES_TO_UPGRADE_EACH_LEVEL 6

#define _KEY_UP     'w'
#define _KEY_DOWN   's'
#define _KEY_LEFT   'a'
#define _KEY_RIGHT  'd'
#define AGAIN_KEY   'A'
#define QUIT_KEY    'Q'
struct post{
int row;
int col;
};
struct snake_s{
int node_num;
struct post head;
struct post* snake_body;

};

//for all
extern struct snake_s snake_s1;
extern int row;
extern int col;
//extern struct timeval delay;

extern int real_g_forward;
extern int g_key_forward;
extern int food_row;
extern int food_col ;
extern int eat_num;
extern int score ;
extern int ticker ;//ms

extern int last_s_node;
extern int first_s_node;

extern int max_score;//do not init in retry!
extern int level;
extern int delay_sub_each_level[MAX_LEVEL];
extern int times_to_upgrade_each_level[MAX_LEVEL];
//extern int ticker_for_col;
//extern int ticker_for_row;

int set_ticker(int n_msecs);
void init_tcs(void);

#endif


View Code

编译:

cc tanchishe.c init_tcs.c -lcurses

运行:



由于curses是面向终端的接口(虚拟终端也包含在内),与图形库无关,所以程序在远程ssh工具上也可以完美运行,就像vim一样。

可以考虑继续添加的特性:多人游戏 路障 吃字母 网络化 存档文件 用户记录 暂停(ctrl+z)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: