亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用C語言實現簡單的貪吃蛇游戲

發布時間:2021-07-27 20:14:13 來源:億速云 閱讀:128 作者:chen 欄目:開發技術

這篇文章主要講解了“怎么用C語言實現簡單的貪吃蛇游戲”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用C語言實現簡單的貪吃蛇游戲”吧!

本文實例為大家分享了C語言實現簡單貪吃蛇游戲的具體代碼,供大家參考,具體內容如下

用指針數組來表示蛇,p[0]表示蛇頭

控制方向:w,s,a,d-->上下左右

 j,k-->加速、減速

鍵盤控制需要用到線程

編譯時需要在后面加     -lpthread

怎么用C語言實現簡單的貪吃蛇游戲

怎么用C語言實現簡單的貪吃蛇游戲

代碼:

#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語言實現簡單的貪吃蛇游戲這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

土默特左旗| 黄陵县| 广河县| 桂林市| 道真| 尼玛县| 成都市| 石阡县| 揭东县| 仁化县| 虎林市| 东乌珠穆沁旗| 福鼎市| 罗江县| 泸溪县| 衡东县| 金寨县| 防城港市| 万安县| 澜沧| 廊坊市| 曲麻莱县| 花莲县| 瑞安市| 呈贡县| 贺兰县| 辛集市| 公主岭市| 郑州市| 昭平县| 临武县| 大冶市| 朝阳市| 宁河县| 阿克苏市| 祁连县| 阳朔县| 营口市| 晋城| 教育| 新邵县|