Linux下C语言如何实现贪吃蛇小游戏

  介绍

本篇内容介绍了“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语言如何实现贪吃蛇小游戏