网站地图 百度,设计网站源码,做网站怎么选云主机,辽宁网站优化习得#xff1a;
1.ncurse库#xff1a; 使用ncurse是因为案件响应灵敏#xff0c;不用回车#xff1b;头文件#includecurses.h 创建.c文件#xff0c;同时gcc编译也需要添加 -lcurses 主函数中#xff1a; initscr();//ncurse界面初始化函数 …习得
1.ncurse库 使用ncurse是因为案件响应灵敏不用回车头文件#includecurses.h 创建.c文件同时gcc编译也需要添加 -lcurses 主函数中 initscr();//ncurse界面初始化函数 printw();//ncurse模式下的print getch();//等待用户输入如果没这句话程序就退出了看不到运行结果 endwin();//程序退出调用改函数来恢复shell终端显示如果没这句话shell终端字乱码坏掉
2.Linux线程 程序都是从上到下运行要想2个同时运行需要线程一个程序有多个线程互不影响 线程头文件#includepthread.hgcc编译的时候需要添加-lpthread 运用 pthread_t th1; pthread_create(th1,NULL,func1,null);//func1为创建的函数null为函数中的参数 //void *func1定义的该函数返回值是void*型
3.食物随机不出边界
rand函数随机数
不出边界20x20rand%20对随机数取余数
4.制作贪吃蛇方向按键 vi /usr/include/curses.h 查看相应按键编码 方向头文件includecurses.h KEY_DOWN 0402; KEY_UP 0403; KEY_LEFT 0404; KEY_RIGHT0405; :cq退出
代码
#include stdio.h
#include curses.h
#include stdlib.h#include pthread.h#define UP 1
#define DOWN -1
#define LEFT 2
#define RIGHT -2 // jue dui zhi fangxiang bugstruct Snake{int hang;int lie;struct Snake *next;};int dir;
int key;
struct Snake *headNULL;
struct Snake *tailNULL;struct Snake food;void initFood()
{int x rand()%20;int y rand()%20;food.hang x;food.lie y;}void initNcurse(){initscr();keypad(stdscr,1);
}void addNode()
{struct Snake *new(struct Snake *)malloc(sizeof(struct Snake));switch(dir){case UP:new-hangtail-hang-1;new-lietail-lie;break;case DOWN:new-hangtail-hang1;new-lietail-lie;break;case LEFT:new-hangtail-hang;new-lietail-lie-1;break;case RIGHT:new-hangtail-hang;new-lietail-lie1;break;}new-next NULL;tail-next new;tail new;}void initSnake()
{struct Snake* p;dir RIGHT;while(head!NULL){phead;headhead-next;free(head);}initFood();head(struct Snake *)malloc(sizeof(struct Snake));head-hang2;head-lie2;head-nextNULL;tailhead;addNode();//add new nodeaddNode();}int hasFood(int i,int j)
{if(food.hangi food.liej){return 1;}return 0;
}int hasSnakeNode(int i,int j)
{struct Snake *p;phead;while(p!NULL){if(p-hangi p-liej){return 1;}pp-next;}return 0;
}void GameMap()
{int hang;int lie;move(0,0);//move cursor positionfor(hang0;hang20;hang){if(hang0){for(lie0;lie19;lie){printw(--);}printw(\n);}for(lie0;lie20;lie){if(lie0||lie20){printw(|);}else if(hasSnakeNode(hang,lie)1){printw([]);}else if(hasFood(hang,lie)1){printw(##);} else {printw( );}}if(hang19){printw(\n);for(lie0;lie19;lie){printw(--);}}printw(\n);}printw(\n);printw(by zhou);}void deleNode()
{head head-next;}int ifSnakeDie()
{struct Snake *p;phead;if(tail-hang0||tail-hang20||tail-lie0||tail-lie20){return 1;}while(p-next! NULL){if(p-hang tail-hang p-lie tail-lie ){return 1; } pp-next;}return 0;
}void moveSnake()
{addNode();if(hasFood(tail-hang,tail-lie)){initFood();}else{ deleNode();}if(ifSnakeDie()1){initSnake();}
}void* refreshjiemian()//duoxiancheng
{while(1){moveSnake();GameMap();//refresh(shuaxin) the maprefresh();//shua xin jie mianusleep(100000);//wei miao// sleep(1);//refresh every second}}void turn(int direction)
{if(abs(direction)!abs(dir)){//abs(a)|a|,if 1!2,the direction changesdirdirection;//jue duizhi ! change dir}
}
void *changedir()
{while(1){keygetch();switch(key){case KEY_DOWN:turn(DOWN);break;case KEY_UP:turn(UP);break;case KEY_LEFT:turn(LEFT);break;case KEY_RIGHT:turn(RIGHT);break;}}}int main()
{pthread_t t1;pthread_t t2;initNcurse();initSnake();GameMap();pthread_create(t1,NULL,refreshjiemian,NULL);pthread_create(t2,NULL,changedir,NULL);while(1);//keep main xiancheng runendwin();getch();return 0;
}