C语言链表实现贪吃蛇小游戏

这篇文章主要为大家详细介绍了C语言链表贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言链表实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下

项目名称:

贪吃蛇小游戏

运行环境:

Linux

编程语言:

C语言

主要语法:

链表,指针,函数

备注:

游戏中可选不同难度模式,

1.简易――Easy――速度慢,可穿墙,可触碰自己
2.困难――Hard――速度快,不可穿墙,不可触碰自己
3.自动――Auto――外挂模式,自动吃食,直到胜利

代码

贪吃蛇小游戏代码:

 #include  #include  #include  #include  #include  #define UP     1 #define DOWN   -1 #define LEFT   2 #define RIGHT  -2 struct Snake    //define the snake { int hang; int lie; struct Snake *next; }; struct Snake food; //define the food struct Snake *head= NULL; struct Snake *tail = NULL; int key; int dir; int set = 49; int nub = 4; void initFood()  //init food { int x = rand()%20; int y = (rand()%19)+1; food.hang = x; food.lie = y; } void initNcurse() //init ncurse { initscr(); keypad(stdscr,1); noecho(); } int hasFood(int i,int j) //judge whether shoule show the food { if(food.hang == i && food.lie == j) { return 1; } return 0; } int hasSnakeNode(int i, int j) //judge whether shoule show the snake { struct Snake *p; p = head; while(p != NULL) { if(p->hang == i && p->lie == j) { return 1; } p = p->next; } return 0; } void gamePic()   //show the whole picture { int hang; int lie; move(0,0); for(hang=0;hang<20;hang++)     //20*20 size map { if(hang == 0) { for(lie=0;lie<20;lie++) { printw("--"); } printw("\n"); } if(hang >= 0 && hang <= 19) { for(lie=0;lie<=20;lie++) { if(lie == 0 || lie == 20) printw("|"); else if(hasSnakeNode(hang,lie)) { printw("[]"); } else if(hasFood(hang,lie)) { printw("##"); } else printw("  "); } printw("\n"); } if(hang == 19) { for(lie=0;lie<20;lie++) { printw("--"); } printw("\n"); } } printw("by HaoQing, Happy Game!\n"); switch(dir) { case UP: printw("Snake UP!   \n"); break; case DOWN: printw("Snake DOWN! \n"); break; case LEFT: printw("Snake LEFT! \n"); break; case RIGHT: printw("Snake RIGHT!\n"); break; } if(nub >= 380) { printw("------------------------------------\n"); printw("==============YOU WIN!==============\n"); printw("------------------------------------\n"); } } void addNode()   //add the node of snake { struct Snake *new = (struct Snake *)malloc(sizeof(struct Snake)); new->next = NULL; switch(dir) { case UP: new->hang = tail->hang-1; new->lie = tail->lie; break; case DOWN: new->hang = tail->hang+1; new->lie = tail->lie; break; case LEFT: new->hang = tail->hang; new->lie = tail->lie-1; break; case RIGHT: new->hang = tail->hang; new->lie = tail->lie+1; break; } tail->next = new; tail = new; } void initSnake()                //init snake { struct Snake *p; dir = RIGHT; while(head != NULL) { p = head; head = head->next; free(p); } initFood(); head = (struct Snake *)malloc(sizeof(struct Snake)); head->hang = 1; head->lie = 1; head->next = NULL; tail = head; addNode(); addNode(); addNode(); } void deleNode()   //delete the node of snake { struct Snake *p; p = head; head = head->next; free(p); } int ifSnakeDie()  //judge whether the snake is die { struct Snake *p; p = head; if(tail->hang <0 || tail->lie == 0 || tail->hang == 20 || tail->lie == 20) { return 1; } while(p->next != NULL) { if(p->hang == tail->hang && p->lie == tail->lie) return 1; p=p->next; } return 0; } void moveSnake()  //move the snake { addNode(); if(hasFood(tail->hang,tail->lie)) { initFood(); nub++;  //judge whether win } else deleNode(); if(set != 49 && set != 50 && set != 53) { if(ifSnakeDie()) initSnake(); } } void refreshJieMian()  //refresh the picture { while(1) { moveSnake(); gamePic(); refresh(); switch(set) { case 49: usleep(200000); break; case 50: usleep(100000); break; case 51: usleep(100000); break; case 52: usleep(80000); break; case 53: usleep(70000); break; default: usleep(150000); } } } void turn(int direction) //prevent reverse { if(set != 49 && set != 50 && set != 53) { if(abs(dir) != abs(direction)) { dir = direction; } } else dir = direction; } void changeDir()  //change direction { while(1) { if(set != 53) { key = getch(); switch(key) { case KEY_DOWN: turn(DOWN);   //-1 break; case KEY_UP: turn(UP);     //1 break; case KEY_LEFT: turn(LEFT);   //2 break; case KEY_RIGHT: turn(RIGHT);  //-2 break; } } else { if(tail->hang > food.hang) turn(UP); else if(tail->hang lie > food.lie) turn(LEFT); else if(tail->lie 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持html中文网。

以上就是C语言链表实现贪吃蛇小游戏的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » C语言