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语言实现简单的贪吃蛇游戏 的全部内容, 来源链接: utcz.com/p/246617.html

回到顶部