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

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

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

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

相比于第一個(gè):貪吃蛇游戲,功能更加豐富

#include"snake.h"
//蛇的移動(dòng)
void move_snake();
//畫出蛇
void draw_snake();
//產(chǎn)生食物
void creatfood();
//判斷蛇是否吃到食物
void eatfood();
//判斷蛇是否死掉
void SnakeState();
 
 
 
int main()
{
 //設(shè)置窗口大小
 system("mode con cols=110 lines=31");
 //設(shè)置標(biāo)題
 SetConsoleTitleA("貪吃蛇");
 
 //播放bgm
 playmusic();
 
 //初始化蛇
begin:
 snake.CH = VK_RIGHT;//初始化方向
 snake.len = 5; //初始化長度
 snake.SPEED = 100;//初始化蛇的移動(dòng)速度
 snake.coord[1].x = SCREEN_WIDETH / 2;//初始化蛇頭的坐標(biāo)
 snake.coord[1].y = SCREEN_HEIGHT / 2;
 snake.coord[2].x = SCREEN_WIDETH / 2-2;//初始化蛇頭的坐標(biāo)
 snake.coord[2].y = SCREEN_HEIGHT / 2;
 snake.coord[3].x = SCREEN_WIDETH / 2-4;//初始化蛇頭的坐標(biāo)
 snake.coord[3].y = SCREEN_HEIGHT / 2;
 
 //初始化食物狀態(tài)
 food.flag = 1;//1表示吃到食物 0表示沒有吃到食物
 
     //初始化食物狀態(tài)
 snake.flag = 1;//1活 0死
 
 
 
 init_sence();//初始化游戲界面
 while (1)
 {
  colormap();
  gotoxy(0, 0);
  printf("■");
  HuiFu();
  setcolor();
 
  draw_snake();//畫蛇
  Sleep(snake.SPEED);//蛇的移動(dòng)速度
  move_snake();//移動(dòng)蛇
  if(food.flag)
  creatfood();//產(chǎn)生食物
  eatfood();//判斷是否吃到食物
  SnakeState();//判斷蛇是否死亡
  if (!snake.flag)break;
 }
 system("cls");
 gotoxy(SCREEN_WIDETH/2, SCREEN_HEIGHT/2-4);
 printf(" GAME OVER!!!");
 gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+2);
 printf("你的得分是:\t\t\t%d ",snake.len-1);
 gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+4);
 printf("我不服再來:\t\t\tCTRL ");
 gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+6);
 printf("算了垃圾游戲毀我青春:\t\tESC");
 
 while (1)
 {
  if (GetAsyncKeyState(VK_CONTROL))
  {
   system("cls");
   goto begin;
  }
  else if (GetAsyncKeyState(VK_ESCAPE))
   return 0;
 }
}
 
//蛇的移動(dòng)
void move_snake()
{
 //判斷是否有按鍵操作
 if (GetAsyncKeyState(up))
 {
  if(snake.CH!=down)snake.CH = up;
 }
 else if (GetAsyncKeyState(down))
 {
  if (snake.CH != up)snake.CH = down;
 }
 else if (GetAsyncKeyState(right))
 {
  if (snake.CH != left)snake.CH = right;
 }
 else if (GetAsyncKeyState(left))
 {
  if (snake.CH != right)snake.CH = left;
 }
 else if (GetAsyncKeyState(VK_F1))
 {
  if(snake.SPEED>=50)snake.SPEED -= 10;
 }
 else if (GetAsyncKeyState(VK_F2))
 {
  if (snake.SPEED <= 100)snake.SPEED += 10;
 }
 //游戲難度設(shè)置
 if (snake.len >= 30 && snake.SPEED >= 10)snake.SPEED -= 2;
 //根據(jù)檢測到的方向改變蛇頭的位置
 switch (snake.CH)
 {
 case right:snake.coord[1].x += 2; break;
 case left:snake.coord[1].x -= 2; break;
 case up:snake.coord[1].y -= 1; break;
 case down:snake.coord[1].y += 1; break;
 }
 
 
}
 
//畫出蛇
void draw_snake()
{
 //畫出蛇頭
 gotoxy(snake.coord[1].x, snake.coord[1].y);
 printf("□");
 
 //畫出蛇身,直接一個(gè)for循環(huán)實(shí)現(xiàn)
 for (int i = 2; i < snake.len; i++)
 {
  gotoxy(snake.coord[i].x, snake.coord[i].y);
  printf("□");
 }
 //擦掉尾巴
 HuiFu();
 gotoxy(snake.coord[snake.len].x, snake.coord[snake.len].y);
 printf(" ");
 
 //遍歷每一節(jié)蛇
 for (int i = snake.len; i >1; i--)
 {
  snake.coord[i].x = snake.coord[i - 1].x;
  snake.coord[i].y = snake.coord[i - 1].y;
 }
 
 gotoxy(0, 0);
 printf("■");
 gotoxy(85, 25);
 printf("得分:%d ", snake.len-1);
 gotoxy(85, 22);
 printf("速度:%dms/步 ", snake.SPEED);
 
}
 
//產(chǎn)生食物
void creatfood()
{
 //隨機(jī)種子生成
 srand((unsigned)time(NULL));
 if(food.flag)
 while (1)
 {
  food.x = rand() % 80;
  food.y = rand() % 30;
  if (food.x % 2 == 0 && food.x >= 2 && food.x <= 78 && food.y > 1 && food.y < 30)
  {
   int flag = 0;
   //判斷產(chǎn)生的食物可不可能在蛇的身體上
   for (int i = 1; i <= snake.len; i++)
   {
    if (snake.coord[i].x == food.x&&snake.coord[i].y == food.y)
    {
     flag = 1;
     break;
    }
   }
   if (flag)continue;
   //繪制食物
   else
   {
    colorfood();
    gotoxy(food.x, food.y);
    printf("⊙");
    HuiFu();
    food.flag = 0;
    break;
   }
  }
 }
 food.flag = 0;
}
 
//判斷蛇是否吃到食物
void eatfood()
{
 //只需要判斷蛇頭是否與食物重合
  if (food.x == snake.coord[1].x&&food.y == snake.coord[1].y)
  {
   snake.len+=1;
   food.flag = 1;
  }
}
 
//判斷蛇是否死掉
void SnakeState()
{
 if (snake.coord[1].x < 2 || snake.coord[1].x>78 || snake.coord[1].y < 1 || snake.coord[1].y>29)
  snake.flag = 0;
 
 for (int i = 2; i <= snake.len; i++)
 {
  if (snake.coord[1].x == snake.coord[i].x&&snake.coord[1].y == snake.coord[i].y)
   snake.flag = 0;
 }
 
}

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

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

相關(guān)文章

  • QT實(shí)現(xiàn)單詞檢索軟件的示例代碼

    QT實(shí)現(xiàn)單詞檢索軟件的示例代碼

    本文主要介紹了QT實(shí)現(xiàn)單詞檢索軟件的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言 單向鏈表的增刪查改快速掌握

    C語言 單向鏈表的增刪查改快速掌握

    單向鏈表特點(diǎn)是鏈表的鏈接方向是單向的,訪問要通過順序讀取從頭部開始。鏈表是使用指針構(gòu)造的列表,是由一個(gè)個(gè)結(jié)點(diǎn)組裝起來的,又稱為結(jié)點(diǎn)列表。其中每個(gè)結(jié)點(diǎn)都有指針成員變量指向列表中的下一個(gè)結(jié)點(diǎn),head指針指向第一個(gè)結(jié)點(diǎn)稱為表頭,而終止于最后一個(gè)指向nuLL的指針
    2021-11-11
  • C++阻止類被實(shí)例化詳解

    C++阻止類被實(shí)例化詳解

    下面小編就為大家?guī)硪黄獪\談C++阻止類被實(shí)例化詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-09-09
  • 關(guān)于STL的erase()陷阱-迭代器失效問題的總結(jié)

    關(guān)于STL的erase()陷阱-迭代器失效問題的總結(jié)

    下面小編就為大家?guī)硪黄P(guān)于STL的erase()陷阱-迭代器失效問題的總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++實(shí)現(xiàn)時(shí)間轉(zhuǎn)換及格式化

    C++實(shí)現(xiàn)時(shí)間轉(zhuǎn)換及格式化

    這篇文章主要為大家詳細(xì)介紹了C++中實(shí)現(xiàn)時(shí)間轉(zhuǎn)換及格式化的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • C語言時(shí)間函數(shù)的ctime()和gmtime()你了解嗎

    C語言時(shí)間函數(shù)的ctime()和gmtime()你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C語言時(shí)間函數(shù)的ctime()和gmtime(),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言實(shí)現(xiàn)餐飲結(jié)賬管理系統(tǒng)

    C語言實(shí)現(xiàn)餐飲結(jié)賬管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)餐飲結(jié)賬管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 基于Qt實(shí)現(xiàn)SVG圖片瀏覽器

    基于Qt實(shí)現(xiàn)SVG圖片瀏覽器

    SVG的英文全稱是Scalable Vector Graphics,即可縮放的矢量圖形。本文將用Qt6制作一個(gè)簡單的SVG圖片瀏覽器,感興趣的可以嘗試一下
    2022-06-06
  • C++詳細(xì)講解函數(shù)調(diào)用與Struct和CLass的區(qū)別

    C++詳細(xì)講解函數(shù)調(diào)用與Struct和CLass的區(qū)別

    主調(diào)函數(shù)使用被調(diào)函數(shù)的功能,稱為函數(shù)調(diào)用。在C語言/C++中,只有在函數(shù)調(diào)用時(shí),函數(shù)體中定義的功能才會(huì)被執(zhí)行,下面讓我們詳細(xì)來了解
    2022-05-05
  • C++?Qt實(shí)現(xiàn)一個(gè)解除文件占用小工具

    C++?Qt實(shí)現(xiàn)一個(gè)解除文件占用小工具

    這篇文章主要為大家詳細(xì)介紹了如何利用C++?Qt實(shí)現(xiàn)一個(gè)解除文件占用小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09

最新評(píng)論

吐鲁番市| 白山市| 安徽省| 历史| 南漳县| 淅川县| 乐昌市| 林芝县| 札达县| 合川市| 杭锦后旗| 棋牌| 沅陵县| 天台县| 祁东县| 抚远县| 得荣县| 康保县| 大余县| 龙川县| 康马县| 开原市| 赣榆县| 高唐县| 荆州市| 错那县| 康保县| 福海县| 开原市| 容城县| 阳泉市| 九龙城区| 梅河口市| 无棣县| 安达市| 宁城县| 青铜峡市| 南通市| 清河县| 水富县| 冷水江市|