本文主要详细介绍了用C语言编写的简单贪吃蛇游戏。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
本文分享C语言实现简单贪吃蛇游戏的具体代码,供大家参考。具体内容如下
用指针数组表示蛇,p[0]表示蛇头。
控制方向:W、S、A、D-上、下、左、右
j,k-加速和减速
键盘控制需要线程。
编译后需要添加-lpthread。
代码:
#包含stdio.h
#include pthread.h
#包含stdlib.h
#包含时间. h
#包括unistd.h
#定义X 20
#定义Y 40
char head=' @//蛇头的形状
char body=' O//蛇身的形状
char a[X][Y]={'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秒
右侧无效()
{
* p[n]=0;
for(I=n;i0;我-)
{
p[I]=p[I-1];
}
* p[0]=body;
p[0]=p[0]1;//蛇头向右移动
* p[0]=头;
}
向左无效()
{
* p[n]=0;
for(I=n;i0;我-)
{
p[I]=p[I-1];
}
* p[0]=body;
p[0]=p[0]-1;
* p[0]=头;
}
向下无效()
{
* p[n]=0;
for(I=n;i0;我-)
{
p[I]=p[I-1];
}
* p[0]=body;
p[0]=p[0]Y;
* p[0]=头;
}
向上清空()
{
* p[n]=0;
for(I=n;i0;我-)
{
p[I]=p[I-1];
}
* p[0]=body;
p[0]=p[0]-Y;
* p[0]=头;
}
无效显示()
{
系统(“clear”);
for(I=0;iY;我)
printf('-');
printf(' \ n ');
for(I=0;九;我)
{
for(j=0;jY;j)
{
if(a[i][j]==0)
printf(“”);
其他
printf('%c ',a[I][j]);
}
printf(' \ n ');
}
for(I=0;iY;我)
printf('-');
Printf('\nw,s,a,d-上,下,左,右;j,k-加速和减速;ESC \ n ');
}
int()//随机数生成*
{
srand(time(NULL));
磅:
I=rand()% X;
j=rand()% Y;
//如果随机位置的值为0,则生成一个*;否则,继续寻找随机地点。
if(a[i][j]==0)
a[I][j]=' * ';
其他
转到lb;
}
void eat()
{
If(f==1)//right
{
if(*(p[0] 1)=='* ')
{
n;//长度增加
p[n]=p[n-1];
冉();//随机数生成*
}
}
On if(f==2)//
{
if(*(p[0]-Y)=='* ')
{
n;//长度增加
p[n]=p[n-1];
冉();//随机数生成*
}
}
If(f==3)//left
{
if(*(p[0]-1)=='* ')
{
n;//长度增加
p[n]=p[n-1];
冉();//随机数生成*
}
}
在if(f==4)//下
{
if(*(p[0] Y)=='* ')
{
n;//长度增加
p[n]=p[n-1];
冉();//随机数生成*
}
}
}
无效失败()
{
if(p[0]a[0][0]| | p[0]a[x-1][y-1])//蛇头不在矩阵中
{
printf('失败!\ n’);
f=-1;
}
If(f==1)//right
{
for(I=n;i0;我-)
{
If((p[0] 1)==p[i])//右边是自己的身体
{
printf('失败!\ n’);
f=-1;
}
}
}
On if(f==2)//
{
for(I=n;i0;我-)
{
If((p[0]-Y)==p[i])//上面是自己的身体
{
printf('失败!\ n’);
f=-1;
}
}
}
If(f==3)//left
{
for(I=n;i0;我-)
{
If((p[0]-1)==p[i])//左边是自己的身体。
{
printf('失败!\ n’);
f=-1;
}
}
}
在if(f==4)//下
{
for(I=n;i0;我-)
{
If((p[0] Y)==p[i])//下面是自己的身体
{
printf('失败!\ n’);
f=-1;
}
}
}
}
Void *key(void *arg)//控制方向:W,S,A,D-上下左右
{
char k;
while(1)
{
k=getchar();
On if(k=='w')//
f=2;
Under if(k=='s')//
f=4;
If(k=='a')//left
f=3;
If(k=='d')//right
f=1;
If(k=='j')//加速
us=us * 4/5;
If(k=='k')//减速
us=us * 5/4;
if(k==27)//ESC
{
printf(‘退出!\ n’);
f=-1;
}
us LEEP(100);
}
}
int main()
{
system(' stty-icanon ');//关闭缓冲区,输入的字符可以直接接受,不需要按回车键。
pthread _ t pid
pthread_create(pid,NULL,key,NULL);//创建一个线程,键盘控件
冉();
while(1)
{
show();//显示
usleep(美国);
fail();//确定自己会不会咬自己
吃();//判断能不能吃*
If(f==1)//right
right();
On if(f==2)//
up();
If(f==3)//left
left();
在if(f==4)//下
down();
If(f==-1)//退出
{
pthread _ cancel(PID);//关闭线程
return-1;
}
}
返回0;
}
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。