这篇文章主要讲解了“怎么用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语言实现简单的贪吃蛇游戏这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。