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语言实现简单的贪吃蛇游戏

相关文章:

你感兴趣的文章:

标签云: