个人网站的首页网站还没有建好可以备案吗
news/
2025/9/22 16:52:16/
文章来源:
个人网站的首页,网站还没有建好可以备案吗,ui设计有哪些,做网站建设公司网站设计一、项目介绍
项目总结 1.按下空格键小鸟上升#xff0c;不按小鸟下落 2.搭建小鸟需要穿过的管道 3.管道自动左移和创建 4.小鸟撞到管道游戏结束
知识储备 1.C语言 2.数据结构-链表 3.Ncurses库 4.信号机制 二、Ncurses库介绍 Ncurses是最早的System V Release 4.0 (SVr4)中…一、项目介绍
项目总结 1.按下空格键小鸟上升不按小鸟下落 2.搭建小鸟需要穿过的管道 3.管道自动左移和创建 4.小鸟撞到管道游戏结束
知识储备 1.C语言 2.数据结构-链表 3.Ncurses库 4.信号机制 二、Ncurses库介绍 Ncurses是最早的System V Release 4.0 (SVr4)中 curses的一个克隆和升级。这是一个可自由配置的库完全兼容旧版本curses。 Ncurses构成了一个工作在底层终端代码之上的封装并向用户提供了一个灵活高效的APIApplication Programming Interface 应用程序接口。它提供了创建窗口界面移动光标产生颜色处理键盘按键等功能。使程序员编写应用程序不需要关心那些底层的终端操作。 简而言之它是一个管理应用程序在字符终端显示的函数库。
Ncurses库函数
注安装命令sudo apt-get install libncurses5-dev 为了能够使用Ncurses库,必须在源程序中将#includecurses.h包括进来,而且在编译的需要与它链接起来. 在gcc中可以使用参数-lncurses进行编译.
1. initscr(void); 是curses模式的入口。将终端屏幕初始化为curses模式为当前屏幕和相关的数据结构分配内存。
2. int endwin(void); 是curses模式的出口,退出curses模式释放curses子系统和相关数据结构占用的内存。
3. int curs_set(int visibility); 设置光标是否可见visibility0不可见1可见
4. int move(int new_y, int new_x); 将光标移动到new_y所指定的行和new_x所指定的列
5. int addch(const chtype char); 在当前光标位置添加字符
6. int refresh(void); 刷新物理屏幕。将获取的内容显示到显示器上。
7. int keypad(WINDOW *window_ptr, bool key_on); 允许使用功能键。exp:keypad(stdscr,1);//允许使用功能按键
8. int getch(void); 读取键盘输入的一个字符
9. chtype inch(void); 获取当前光标位置的字符。 注curses有自己的字符类型chtype使用时强制类型转换为char
10. int start_color(void); 启动color机制初始化当前终端支持的所有颜色
11. int init_pair(short pair_number, short foreground, short background); 配置颜色对 COLOR_BLACK 黑色 COLOR_MAGENTA 品红色 COLOR_RED 红色 COLOR_CYAN 青色 COLOR_GREEN 绿色 COLOR_WHITE 白色 COLOR_YELLOW 黄色 COLOR_BLUE 蓝色
12. int COLOR_PAIR(int pair_number); 设置颜色属性设置完颜色对可以通过COLOR_PAIR实现
13. int attron(chtype attribute); 启用属性设置
14. int attroff(chtype attribute); 关闭属性设置
Ncurses库安装 安装命令sudo apt-get install libncurses5-dev 注为了能够使用Ncurses库,必须在源程序中将#includecurses.h包括进来,而且在编译的需要与它链接起来. 在gcc中可以使用参数-lncurses进行编译。
编译gcc surses.c -o curses -lncurses
三、信号 在Linux中软中断信号signal简称为信号是在软件层次上对中断的一种模拟用来通
知进程发生了异步事件。内核可以因为内部事件而给进程发送信号通知进程发生了某个事件。
信号响应的方式 1.忽略信号即对信号不做任何处理 2.捕捉信号即信号发生时执行用户自定义的信号处理函数。 3.执行缺省操作Linux对每种信号都规定了默认操作。 设置信号相应方式-signal
#include unistd.h
#include signal.h
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);成功时返回原先的信号处理函数失败时返回SIG_ERRsignum指明了所要处理的信号类型handler描述了与信号关联的动作SIG_DFL代表缺省方式; SIG_IGN 代表忽略信号;指定的信号处理函数代表捕捉方式
signal函数-示例
// 头文件省略
void handler (int signo) {printf(“HELLO!\n”);
}
int main() {signal(SIGINT, handler);while ( 1 ) return 0;
}
设置定时器
struct itimerval {struct timeval it_interval; /* 计时器重新启动的间歇值 */struct timeval it_value; /* 计时器安装后首次启动的初} 始值之后就没有用 */
struct timeval {long tv_sec; /* 秒 */long tv_usec; /* 微妙*/
};
计时器的实现
int setitimer(int which, const struct itimerval *value,struct itimerval *ovalue)
参数
which间歇计时器类型ITIMER_REAL //数值为0发送的信号是SIGALRM。struct itimerval *value将value指向的结构体设为计时器的当前值
struct itimerval *ovalue保存计时器原有值。一般设置为NULL。返回值 成功返回0。失败返回-1。
四、项目功能实现
项目安排
阶段1初始化工作小鸟功能实现 阶段2管道功能实现 1.创建链表 2.显示管道 3.清除管道 4.移动管道
阶段3完善代码进行项目总结 1.判断游戏结束小鸟与管道碰到 2.循环创建管道 3.为管道和小鸟添加色彩
代码功能
#include stdio.h
#include curses.h
#include signal.h
#include sys/time.h
#include stdlib.h
#define BIRD
#define BLANK
#define PIPE
/*定义关于管道的结构体*/
typedef struct Pipe{int x;//列坐标int y;//横坐标struct Pipe *next;
}Pipe_node, *Pipe_list;Pipe_list head, tail;void creat_list();//创建链表
void show_pipe();//显示管道
void clear_pipe();//清除管道
void move_pipe();//移动管道int bird_y, bird_x;//小鸟坐标void show_bird();//显示小鸟
void clear_bird();//清除小鸟
void move_bird();//移动小鸟void init_curses();//curses库初始化
int set_timer(int ms_t);//设置定时器--ms
void handler(int sig);//信号处理函数int main(int argc, const char *argv[])
{bird_y 15;//行bird_x 10;//列init_curses();signal(SIGALRM, handler);set_timer(500);//500mssrand(time(0));//随机种子creat_list();show_pipe();show_bird();move_bird();return 0;
}
void init_curses()//curses库初始化
{initscr();//进入curses模式curs_set(0);//禁止光标显示noecho();//禁止输入字符显示keypad(stdscr,1);//启动功能按键start_color();//启动颜色机制init_pair(1,COLOR_WHITE, COLOR_RED);//小鸟颜色设置init_pair(2,COLOR_WHITE, COLOR_GREEN);//管道颜色设置
}
int set_timer(int ms_t)//设置定时器--ms
{struct itimerval timer;long t_sec,t_usec;int ret;t_sec ms_t / 1000; //st_usec (ms_t % 1000) * 1000;//ustimer.it_value.tv_sec t_sec;timer.it_value.tv_usec t_usec;//首次启动定时值timer.it_interval.tv_sec t_sec;timer.it_interval.tv_usec t_usec;//定时时间间隔ret setitimer(ITIMER_REAL, timer, NULL);return ret;}
void handler(int sig)
{Pipe_list p, new;int i,j;/*小鸟下落*/clear_bird();bird_y;show_bird();/*游戏结束判断*/if((char)inch() PIPE){set_timer(0);endwin();exit(1);}p head-next;if(p-x 0){head-next p-next;for(i p-x; i p-x10; i){/*上半部分管道*/for(j0; jp-y; j){move(j,i);addch(BLANK);}/*下半部分管道创建*/for(j p-y5; j 25; j){move(j,i);addch(BLANK);}refresh();}free(p);new (Pipe_list)malloc(sizeof(Pipe_node));new-x tail-x 20;new-y rand() % 11 5;new-next NULL;tail-next new;tail new;}/*管道移动*/clear_pipe();move_pipe();show_pipe();
}
void show_bird()//显示小鸟
{attron(COLOR_PAIR(1));move(bird_y,bird_x);addch(BIRD);refresh();attroff(COLOR_PAIR(1));
}
void clear_bird()//清除小鸟
{move(bird_y,bird_x);addch(BLANK);refresh();
}
void move_bird()//移动小鸟
{char key;while(1){key getch();if(key ){clear_bird();bird_y--;show_bird();/*游戏结束判断*/if((char)inch() PIPE){set_timer(0);endwin();exit(1);}}}
}
void creat_list()//创建链表
{int i;Pipe_list p, new;head (Pipe_list)malloc(sizeof(Pipe_node));head-next NULL;p head;for(i 0; i 5; i){new (Pipe_list)malloc(sizeof(Pipe_node));new-x (i 1) * 20;new-y rand() % 11 5; // (5-15行)new-next NULL;p-next new;p new;}tail p;}
void show_pipe()//显示管道
{Pipe_list p;int i,j;p head-next;attron(COLOR_PAIR(2));while(p){for(i p-x; i p-x10; i){/*上半部分管道*/for(j0; jp-y; j){move(j,i);addch(PIPE);}/*下半部分管道创建*/for(j p-y5; j 25; j){move(j,i);addch(PIPE);}}refresh();p p-next;}attroff(COLOR_PAIR(2));
}
void clear_pipe()//清除管道
{Pipe_list p;int i,j;p head-next;while(p){for(i p-x; i p-x10; i){/*上半部分管道*/for(j0; jp-y; j){move(j,i);addch(BLANK);}/*下半部分管道创建*/for(j p-y5; j 25; j){move(j,i);addch(BLANK);}}refresh();p p-next;}}
void move_pipe()//移动管道
{Pipe_list p;p head-next;while(p){p-x--;p p-next;}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909706.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!