最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實(shí)現(xiàn)簡單的貪吃蛇游戲

 更新時(shí)間:2021年07月27日 15:44:28   作者:he海ng  
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單的貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語言實(shí)現(xiàn)簡單貪吃蛇游戲的具體代碼,供大家參考,具體內(nèi)容如下

用指針數(shù)組來表示蛇,p[0]表示蛇頭

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

 j,k-->加速、減速

鍵盤控制需要用到線程

編譯時(shí)需要在后面加     -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; //標(biāo)志位:1.右;2.上;3.左;4.下;-1.退出
int us=200000;//用于usleep,延時(shí)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()//隨機(jī)數(shù)生成*
{
 srand(time(NULL));
lb:
 i=rand()%X;
 j=rand()%Y;
 //隨機(jī)位置的值為0,則產(chǎn)生*;否則繼續(xù)找隨機(jī)位置
 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();//隨機(jī)數(shù)生成*
  }  
 }
 if(f==2)//上
 {
  if(*(p[0]-Y)=='*')
  {
   n++;//長度增加
   p[n]=p[n-1];
   ran();//隨機(jī)數(shù)生成*
  }  
 }
 if(f==3)//左
 {
  if(*(p[0]-1)=='*')
  {
   n++;//長度增加
   p[n]=p[n-1];
   ran();//隨機(jī)數(shù)生成*
  }  
 }
 if(f==4)//下
 {
  if(*(p[0]+Y)=='*')
  {
   n++;//長度增加
   p[n]=p[n-1];
   ran();//隨機(jī)數(shù)生成*
  }  
 }
}
 
void fail()
{
 if(p[0]<&a[0][0]||p[0]>&a[X-1][Y-1])//蛇頭不在矩陣內(nèi)
 {
  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");//關(guān)閉緩沖區(qū),輸入字符無需回車直接接受
 pthread_t  pid;
    pthread_create(&pid , NULL , key , NULL);//創(chuàng)建線程,鍵盤控制
 ran();
 while(1)
 {
  show();  //顯示
  usleep(us);
  fail();  //判斷是否會(huì)咬到自己
  eat();  //判斷是否能吃到*
  if(f==1)//右
   right();
  if(f==2)//上
   up();
  if(f==3)//左
   left();
  if(f==4)//下
   down();
  if(f==-1)//退出
  {
   pthread_cancel(pid);//關(guān)閉線程
   return -1;
  }
 }
 
 
 return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • CMake自動(dòng)管理C/C++項(xiàng)目的實(shí)現(xiàn)

    CMake自動(dòng)管理C/C++項(xiàng)目的實(shí)現(xiàn)

    CMake是一個(gè)強(qiáng)大的構(gòu)建系統(tǒng),用于跨平臺(tái)管理C/C++項(xiàng)目的編譯過程,本文主要介紹了CMake自動(dòng)管理C/C++項(xiàng)目的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • C語言基礎(chǔ)之C語言格式化輸出函數(shù)printf詳解

    C語言基礎(chǔ)之C語言格式化輸出函數(shù)printf詳解

    這篇文章主要介紹了C語言格式化輸出函數(shù)printf詳解,printf函數(shù)中用到的格式字符與printf函數(shù)中用到的格式修飾符,感興趣的小伙伴可以借鑒一下
    2023-03-03
  • C++實(shí)現(xiàn)大數(shù)乘法算法代碼

    C++實(shí)現(xiàn)大數(shù)乘法算法代碼

    這篇文章主要介紹了C++實(shí)現(xiàn)大數(shù)乘法算法代碼的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • C++?qsort函數(shù)排序與冒泡模擬實(shí)現(xiàn)流程詳解

    C++?qsort函數(shù)排序與冒泡模擬實(shí)現(xiàn)流程詳解

    qsort是一個(gè)庫函數(shù),基于快速排序算法實(shí)現(xiàn)的一個(gè)排序的函數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言qsort()函數(shù)使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • C語言實(shí)現(xiàn)魔方陣算法(幻方陣 奇魔方 單偶魔方實(shí)現(xiàn))

    C語言實(shí)現(xiàn)魔方陣算法(幻方陣 奇魔方 單偶魔方實(shí)現(xiàn))

    魔方陣是指由1,2,3……n2填充的,每一行、每一列、對角線之和均相等的方陣,階數(shù)n = 3,4,5…。魔方陣也稱為幻方陣,看下面的實(shí)現(xiàn)方法吧
    2013-11-11
  • C語言數(shù)組與地址、數(shù)組名到底是什么詳解

    C語言數(shù)組與地址、數(shù)組名到底是什么詳解

    在寫代碼的時(shí)候,我們經(jīng)常用到數(shù)組,那么有沒有想過數(shù)組名是什么呢?這篇文章主要給大家介紹了關(guān)于C語言數(shù)組與地址、數(shù)組名到底是什么的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • C++20 特性 協(xié)程 Coroutines(1)

    C++20 特性 協(xié)程 Coroutines(1)

    這篇文章主要給大家分享得是C++20 得特性 協(xié)程 Coroutines,下面文章內(nèi)容我們將來具體介紹什么是協(xié)程,協(xié)程得好處等知識點(diǎn),需要的朋友可以參考一下
    2021-10-10
  • C語言實(shí)現(xiàn)YUV文件轉(zhuǎn)JPEG格式

    C語言實(shí)現(xiàn)YUV文件轉(zhuǎn)JPEG格式

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)將YUV文件轉(zhuǎn)為JPEG格式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Ubuntu 環(huán)境下的 C/C++ 編譯與調(diào)試配置方法

    Ubuntu 環(huán)境下的 C/C++ 編譯與調(diào)試配置方法

    本文檔詳細(xì)介紹了如何在Ubuntu環(huán)境中使用VSCode進(jìn)行C/C++的編譯與調(diào)試配置,通過配置`tasks.json`和`launch.json`,實(shí)現(xiàn)了統(tǒng)一管理輸出文件、優(yōu)化調(diào)試流程以及跨平臺(tái)兼容性,配置了`g++`編譯器和`gdb`調(diào)試器,并使用C/C++插件來提高開發(fā)效率,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • C/C++中使用局部/全局變量初始值或默認(rèn)值問題

    C/C++中使用局部/全局變量初始值或默認(rèn)值問題

    這篇文章主要介紹了C/C++中使用局部/全局變量初始值或默認(rèn)值問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

重庆市| 临沭县| 合阳县| 正镶白旗| 湟中县| 达孜县| 蓬莱市| 临夏县| 南岸区| 黄梅县| 六枝特区| 阿克陶县| 濮阳市| 安阳县| 嵊泗县| 龙泉市| 山阳县| 柳河县| 牟定县| 丹凤县| 金湖县| 吉水县| 无极县| 东兴市| 东丰县| 武功县| 巴南区| 武乡县| 龙里县| 乃东县| 铜川市| 建平县| 阿克苏市| 塔城市| 澜沧| 永德县| 临夏县| 宜宾县| 高青县| 阳江市| 隆子县|