怎么用C语言实现简单的贪吃蛇游戏
短信预约 -IT技能 免费直播动态提醒
这篇文章主要讲解了“怎么用C语言实现简单的贪吃蛇游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C语言实现简单的贪吃蛇游戏”吧!
本文实例为大家分享了C语言实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下
用指针数组来表示蛇,p[0]表示蛇头
控制方向:w,s,a,d-->上下左右
j,k-->加速、减速
键盘控制需要用到线程
编译时需要在后面加 -lpthread
代码:
#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <time.h>#include <unistd.h> #define X 20#define Y 40 char head='@';//蛇头的形状char body='O';//蛇身的形状 char a[X][Y]={'O','O','O','@'};char *p[X*Y]={&a[0][3],&a[0][2],&a[0][1],&a[0][0]};//p[0]表示蛇头 int n=3; //蛇身的长度(不带蛇头)int i,j;int f=1; //标志位:1.右;2.上;3.左;4.下;-1.退出int us=200000;//用于usleep,延时0.2秒 void right(){ *p[n]=0; for(i=n;i>0;i--) { p[i]=p[i-1]; } *p[0]=body; p[0]=p[0]+1;//蛇头向右移 *p[0]=head;}void left(){ *p[n]=0; for(i=n;i>0;i--) { p[i]=p[i-1]; } *p[0]=body; p[0]=p[0]-1; *p[0]=head;}void down(){ *p[n]=0; for(i=n;i>0;i--) { p[i]=p[i-1]; } *p[0]=body; p[0]=p[0]+Y; *p[0]=head;}void up(){ *p[n]=0; for(i=n;i>0;i--) { p[i]=p[i-1]; } *p[0]=body; p[0]=p[0]-Y; *p[0]=head;} void show(){ system("clear"); for(i=0;i<Y;i++) printf("-"); printf("\n"); for(i=0;i<X;i++) { for(j=0;j<Y;j++) { if(a[i][j]==0) printf(" "); else printf("%c",a[i][j]); } printf("\n"); } for(i=0;i<Y;i++) printf("-"); printf("\nw,s,a,d->上下左右;j,k->加减速;ESC退出\n");} int ran()//随机数生成*{ srand(time(NULL));lb: i=rand()%X; j=rand()%Y; //随机位置的值为0,则产生*;否则继续找随机位置 if(a[i][j]==0) a[i][j]='*'; else goto lb;} void eat(){ if(f==1)//右 { if(*(p[0]+1)=='*') { n++;//长度增加 p[n]=p[n-1]; ran();//随机数生成* } } if(f==2)//上 { if(*(p[0]-Y)=='*') { n++;//长度增加 p[n]=p[n-1]; ran();//随机数生成* } } if(f==3)//左 { if(*(p[0]-1)=='*') { n++;//长度增加 p[n]=p[n-1]; ran();//随机数生成* } } if(f==4)//下 { if(*(p[0]+Y)=='*') { n++;//长度增加 p[n]=p[n-1]; ran();//随机数生成* } }} void fail(){ if(p[0]<&a[0][0]||p[0]>&a[X-1][Y-1])//蛇头不在矩阵内 { printf("fail!\n"); f=-1; } if(f==1)//右 { for(i=n;i>0;i--) { if((p[0]+1)==p[i])//右边是自己的身体 { printf("fail!\n"); f=-1; } } } if(f==2)//上 { for(i=n;i>0;i--) { if((p[0]-Y)==p[i])//上边是自己的身体 { printf("fail!\n"); f=-1; } } } if(f==3)//左 { for(i=n;i>0;i--) { if((p[0]-1)==p[i])//左边是自己的身体 { printf("fail!\n"); f=-1; } } } if(f==4)//下 { for(i=n;i>0;i--) { if((p[0]+Y)==p[i])//下边是自己的身体 { printf("fail!\n"); f=-1; } } }} void *key(void *arg)//控制方向:w,s,a,d-->上下左右{ char k; while(1) { k=getchar(); if(k=='w')//上 f=2; if(k=='s')//下 f=4; if(k=='a')//左 f=3; if(k=='d')//右 f=1; if(k=='j')//加速 us=us*4/5; if(k=='k')//减速 us=us*5/4; if(k==27)//ESC { printf("退出!\n"); f=-1; } usleep(100); }} int main(){ system("stty -icanon");//关闭缓冲区,输入字符无需回车直接接受 pthread_t pid; pthread_create(&pid , NULL , key , NULL);//创建线程,键盘控制 ran(); while(1) { show(); //显示 usleep(us); fail(); //判断是否会咬到自己 eat(); //判断是否能吃到* if(f==1)//右 right(); if(f==2)//上 up(); if(f==3)//左 left(); if(f==4)//下 down(); if(f==-1)//退出 { pthread_cancel(pid);//关闭线程 return -1; } } return 0;}
感谢各位的阅读,以上就是“怎么用C语言实现简单的贪吃蛇游戏”的内容了,经过本文的学习后,相信大家对怎么用C语言实现简单的贪吃蛇游戏这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341