介绍
本篇内容介绍了“Linux下C语言如何实现贪吃蛇小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
此次贪吃蛇小游戏的目的是使得我在Linux底下使用vi进行编写的
<>强心得:强>
1。自己对linux中如何使用vi更加熟悉
如::wq yy pp dd u等等
2。对c语言的指针,结构体、链表等更加的牢固
3。借此小项目也运用到多线程作为进入linux的深入学习打下坚实的基础
<强>代码展示强>
# include# include 1 # define UP //1与1的目的是使用abs()函数防止一上一下 # define DOWN 1 # define LEFT 2 # define RIGHT 2 蛇{struct //创建一个结构体 ,int 挂; ,int 谎言; ,struct Snake *下; }; struct Snake * head =,零,,//全局定义一个头和尾 struct Snake *尾=,空; int 关键,//定义一个按键的整形变量 int dir//定义一个方向的整形变量 struct Snake 粮食; void initFood(){,//定义一个食物# #,可以随机生成 ,int x =, rand () % 19; ,int y =, rand () % 19;=,food.hang x; y=, food.lie ; } void initNcurse () { ,initscr (); ,键盘(stdscr, 1); ,noecho (); } int hasSnakeNode (int 我,int j){,//显示蛇身体 ,struct Snake * p;=,p 头; ,而(p !=, NULL) { ,如果(p→hang ==,我,,,,p →lie ==, j) { ,return 1; ,}=,p p→下; ,} ,return 0; } int hasFood (int 我int j){,//有食物 ,如果(food.hang ==,我,,,,food.lie ==, j) { ,return 1; ,} ,return 0; } void gamePic(){,//游戏图形化展示 ,int 挂; ,int 谎言; ,(0,0); ,(挂=0;hang<20;挂+ +){ ,如果(hang ==, 0) { ,(撒谎=0;lie<20;谎言+ +){ ,printw (“-”); ,} ,printw (“\ n");, ,} ,如果(hang 在=0,,,,hang<=19,) { ,(撒谎=0;lie<=20;谎言+ +){ ,如果(lie ==, 0, | |, lie ==, 20) { printw才能(“|“); ,}else 如果(hasSnakeNode(挂,躺)){ printw才能(“[]”); ,}else 如果(hasFood(挂,躺)){ printw才能(“# #”); ,} 其他的,{ printw才能(“,“); ,} ,} ,printw (“\ n"); ,} ,如果(hang ==, 19) { ,(撒谎=0;lie<20;谎言+ +){ ,printw (“-”); ,} ,printw (“\ n");, ,printw (“by ricko"); ,} ,} } void addNode(){,//加头并且方向 ,struct Snake * new =, (struct Snake *) malloc (sizeof (struct 蛇)); ,新→next =,空; ,开关(dir) { ,case : ,新→hang =,尾巴→hang-1; ,新→lie =,尾巴→谎言; ,打破; ,case 下: ,新→hang =,尾巴→挂+ 1; ,新→lie =,尾巴→谎言; ,打破; ,case 左: ,新→hang =,尾巴→挂; ,新→lie =,尾巴→有; ,打破; ,case 右: ,新→hang =,尾巴→挂; ,新→lie =,尾巴→谎言+ 1; ,打破; ,}=,尾巴→next 新;=,tail 新; } void initSnake(){,//初始化蛇 ,struct Snake * p;=,dir ; ,而(head !=, NULL) {=,p 头;=,head 头→下; ,自由(p); ,} ,initFood (),,=,head (struct Snake *) malloc (sizeof (struct 蛇));=,头→hang 1;=,头→lie 1;=,头→next 零;=,tail 头; ,addNode (); ,addNode (); ,addNode (); ,addNode (); } void deleNode(){,//删除最后节点 ,struct Snake * p;=,p 头;=,head 头→下; ,自由(p); } int ifSnakeDie(){,//在撞到边界以及自己迟到自己的时候会输出一个1让自己复活 ,struct Snake * p;=,p 头; ,如果(尾部→hang & lt;, 0, | |,尾巴→lie ==, 0, | |,尾巴→hang ==, 20, | |,尾巴→lie ==, 20) { ,return 1; ,} ,而(p→next !=, NULL) { ,如果(p→hang ==,尾巴→hang ,,, p→lie ==,尾巴→谎言){ ,return 1; ,}=,p p→下; ,} ,return 0; } void moveSnake(){,//蛇的移动 ,addNode (); ,如果(hasFood(尾部→挂,尾巴→撒谎)){,//如果吃到食物就不删除最后的节点 ,initFood (); ,其他}{ ,deleNode (); ,} ,如果(ifSnakeDie ()) { ,initSnake (),, ,} } void refreshJieMian(){,//刷新界面,线程 ,而(1){ ,moveSnake (); ,gamePic (); ,刷新(); ,usleep(150000);//刷新频率 ,} } void 将(int 方向){,//防止方向键按了上又按下 ,如果(abs (dir), !=, abs(方向)){=,dir 方向; null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null Linux下C语言如何实现贪吃蛇小游戏