衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用C語言實(shí)現(xiàn)貪吃蛇游戲項(xiàng)目

C語言編程學(xué)習(xí)基地 ? 來源:C語言編程學(xué)習(xí)基地 ? 作者:C語言編程學(xué)習(xí)基地 ? 2021-11-09 16:38 ? 次閱讀

這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)——《貪吃蛇項(xiàng)目》,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下!

本項(xiàng)目主要用到了C語言的循環(huán),函數(shù),指針,結(jié)構(gòu)體,枚舉,聯(lián)合,文件操作,簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),并且對(duì)邏輯也是有一定的要求,但是這些在我們項(xiàng)目源碼里面都會(huì)有注釋,大家到時(shí)候?qū)W習(xí)的時(shí)候千萬不要忽略注釋,注釋可以更好地幫你理解代碼,尤其是C語言初學(xué)者。

本項(xiàng)目編譯環(huán)境:VS2019/VS2013;

插件:圖形庫(kù)插件easyX;

效果圖演示:

本案例配套學(xué)習(xí)教程:精講貪吃蛇——嗶哩嗶哩

源代碼示例:

#include#include//包含easyx圖形庫(kù),可以使用給我們提供的一些函數(shù),繪圖,貼圖#include#define WIN_WIDTH 640#define WIN_HEIGHT 480#define MAX_SNAKE 500 //蛇的最大節(jié)數(shù)
//枚舉enum DIR //枚舉蛇的方向{  UP,  DOWN,  LEFT,  RIGHT,};struct Food //食物{  int x;  int y;  DWORD color;  bool flag;//是否被吃掉,是否要重新生成食物}food;struct Pos{  int x;  int y;  DWORD color;};struct Snake//蛇的結(jié)構(gòu)體{  int num;//當(dāng)前節(jié)數(shù)  int dir;//蛇的方向  int score;//分?jǐn)?shù)  int size;//蛇的寬和高  int speed;//蛇的移動(dòng)速度  //表示每一節(jié)蛇的坐標(biāo) 數(shù)組  struct Pos coor[MAX_SNAKE];}snake;void GameInit(){  //設(shè)置隨機(jī)數(shù)種子  srand(GetTickCount());  snake.num = 3;  snake.dir = RIGHT;  snake.score = 0;  snake.size = 10;  snake.speed = 10;  snake.coor[2].x = 0;  snake.coor[2].y = 0;  snake.coor[2].color = RGB(rand() % 256, rand() % 256, rand() % 256);//隨機(jī)生成三個(gè)數(shù),用三原色表示顏色  snake.coor[1].x = 10;  snake.coor[1].y = 0;  snake.coor[1].color = RGB(rand() % 256, rand() % 256, rand() % 256);//隨機(jī)生成三個(gè)數(shù),用三原色表示顏色  snake.coor[0].x = 20;  snake.coor[0].y = 0;  snake.coor[0].color = RGB(rand() % 256, rand() % 256, rand() % 256);//隨機(jī)生成三個(gè)數(shù),用三原色表示顏色  //初始化食物  food.x = rand() % (WIN_WIDTH/10)*10;//1*10  10 20 30 40 50 60   food.y = rand() % (WIN_HEIGHT/10)*10;  food.color = RGB(rand() % 256, rand() % 256, rand() % 256);//隨機(jī)生成三個(gè)數(shù),用三原色表示顏色  food.flag = true;}void GameDraw(){  cleardevice();
  for (int i = 0; i < snake.num; i++)  {    //設(shè)置填充顏色    setfillcolor(snake.coor[i].color);    //畫矩形    fillrectangle(snake.coor[i].x, snake.coor[i].y, snake.coor[i].x + 10, snake.coor[i].y + 10);  }  //繪制食物  //solidcircle(food.x,food.y,5)  if (food.flag)  {    setfillcolor(food.color);    solidellipse(food.x, food.y, food.x + 10, food.y + 10);  }  //繪制分?jǐn)?shù)    //先把整數(shù)轉(zhuǎn)成字符串  char temp[20] = " ";  sprintf(temp, "分?jǐn)?shù):%d", snake.score);  outtextxy(10,10,temp);//如果報(bào)錯(cuò)  “outtextxy”: 2 個(gè)重載中沒有一個(gè)可以轉(zhuǎn)換所有參數(shù)類型  一定是字符集問題  /*怎么修改字符集呢?三種方法    
  */
}void GameMove(){  for (int i = snake.num-1; i >0; i--)  {    snake.coor[i].x = snake.coor[i - 1].x;    snake.coor[i].y = snake.coor[i - 1].y;  }  switch(snake.dir)  {  case UP:    snake.coor[0].y -= snake.speed;    if (snake.coor[0].y < 0)    {      snake.coor[0].y = WIN_HEIGHT;    }    break;  case DOWN:    snake.coor[0].y += snake.speed;    if (snake.coor[0].y > WIN_HEIGHT)    {      snake.coor[0].y = 0;    }    break;  case LEFT:    snake.coor[0].x -= snake.speed;    if (snake.coor[0].x < 0)    {      snake.coor[0].x = WIN_WIDTH;    }    break;  case RIGHT:    snake.coor[0].x += snake.speed;    if (snake.coor[0].x > WIN_WIDTH)    {      snake.coor[0].x = 0;    }    break;  }}void GameControl(){  //獲取鍵盤輸入,_getch(); 不回顯函數(shù),  char key = _getch();  switch (key)  {    case 72:      if (snake.dir!=DOWN)      {        snake.dir = UP;      }        break;    case 80:      if (snake.dir != UP)      {        snake.dir = DOWN;      }      break;    case 75:      if (snake.dir != RIGHT)      {        snake.dir = LEFT;      }      break;    case 77:      if (snake.dir != LEFT)      {        snake.dir = RIGHT;      }      break;  }  printf("%d
", key);}void CreateFood(){  if (!food.flag)  {    food.x = rand() % (WIN_WIDTH / 10) * 10;//1*10  10 20 30 40 50 60     food.y = rand() % (WIN_HEIGHT / 10) * 10;    food.color = RGB(rand() % 256, rand() % 256, rand() % 256);//隨機(jī)生成三個(gè)數(shù),用三原色表示顏色    food.flag = true;  }}void EatFood(){  if (food.flag && snake.coor[0].x == food.x && snake.coor[0].y == food.y)  {    food.flag = false;    snake.num++;    snake.score += 10;    snake.coor[snake.num-1].color = RGB(rand() % 256, rand() % 256, rand() % 256);//隨機(jī)生成三個(gè)數(shù),用三原色表示顏色    CreateFood();  }}int main(){  //1,創(chuàng)建窗口,init初始化 graphics 圖形窗口  initgraph(WIN_WIDTH, WIN_HEIGHT, SHOWCONSOLE);  setbkcolor(RGB(207, 214, 229));//設(shè)置顏色  cleardevice();//刷新窗口  GameInit();    while (1)  {        GameDraw();    GameMove();    if (_kbhit())    {      GameControl();    }      EatFood();    Sleep(100);    }
  getchar();  return 0;}

整個(gè)項(xiàng)目的源碼已經(jīng)分享,這是一個(gè)比較完善的貪吃蛇游戲,從食物隨機(jī)出現(xiàn)到分?jǐn)?shù)的顯示都已經(jīng)實(shí)現(xiàn)了,大家在掌握了相應(yīng)知識(shí)后練練手,尤其建議先自己了解其邏輯和思路之后去嘗試寫出來,而不是直接照著代碼抄,這樣對(duì)你幫助并不大的!

下一期我們將分享的是能夠自動(dòng)行動(dòng)的《進(jìn)化版貪吃蛇》大家在掌握了這個(gè)項(xiàng)目的基礎(chǔ)上只需要加一個(gè)功能就好了,怎么樣實(shí)現(xiàn)貪吃蛇的自動(dòng)吃食物,大家也可以自己先去想想試試,每一次的思考就是你進(jìn)步的過程!

如果學(xué)習(xí)的過程中有什么問題,以及本項(xiàng)目有什么不懂的地方,都可以來找我交流,我來幫你!

那么今天的分享就到這里了,后續(xù)會(huì)更新更多精彩項(xiàng)目的,大家要好好學(xué)C語言C++喲~

責(zé)任編輯:haq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137732
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2946

    瀏覽量

    66960

原文標(biāo)題:C語言項(xiàng)目實(shí)戰(zhàn):《貪吃蛇》零基礎(chǔ)項(xiàng)目!源碼 + 注釋解析

文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    EE-188:使用C語言在ADSP-219x DSP上實(shí)現(xiàn)中斷驅(qū)動(dòng)系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《EE-188:使用C語言在ADSP-219x DSP上實(shí)現(xiàn)中斷驅(qū)動(dòng)系統(tǒng).pdf》資料免費(fèi)下載
    發(fā)表于 01-15 16:06 ?0次下載
    EE-188:使用<b class='flag-5'>C</b><b class='flag-5'>語言</b>在ADSP-219x DSP上<b class='flag-5'>實(shí)現(xiàn)</b>中斷驅(qū)動(dòng)系統(tǒng)

    AKI跨語言調(diào)用庫(kù)神助攻C/C++代碼遷移至HarmonyOS NEXT

    量;某知名社交電商平臺(tái)使用后減少了50%以上跨語言調(diào)用接口代碼量;某圖像處理軟件所有C++代碼復(fù)用通過AKI來實(shí)現(xiàn)。使用AKI后這些項(xiàng)目不僅減少了項(xiàng)
    發(fā)表于 01-02 17:08

    基于FPGA實(shí)現(xiàn)圖像直方圖設(shè)計(jì)

    直方圖統(tǒng)計(jì)的原理 直方圖統(tǒng)計(jì)從數(shù)學(xué)上來說,是對(duì)圖像中的像素點(diǎn)進(jìn)行統(tǒng)計(jì)。圖像直方圖統(tǒng)計(jì)常用于統(tǒng)計(jì)灰度圖像,表示圖像中各個(gè)灰度級(jí)出現(xiàn)的次數(shù)或者概率。統(tǒng)計(jì)直方圖的實(shí)現(xiàn)采用C/C++或者其他高級(jí)語言實(shí)
    的頭像 發(fā)表于 12-24 10:24 ?224次閱讀
    基于FPGA<b class='flag-5'>實(shí)現(xiàn)</b>圖像直方圖設(shè)計(jì)

    使用C語言實(shí)現(xiàn)函數(shù)模板

      用C語言能不能實(shí)現(xiàn)一個(gè)通用的函數(shù),既能完成整數(shù)的相加,又能完成浮點(diǎn)數(shù)的相加?
    的頭像 發(fā)表于 11-09 11:38 ?479次閱讀

    C語言中的socket編程基礎(chǔ)

    Socket編程簡(jiǎn)介 Socket是一種通信機(jī)制,允許程序之間進(jìn)行通信。在C語言中,socket編程是網(wǎng)絡(luò)編程的基礎(chǔ)。通過使用socket,程序可以發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)不同計(jì)算機(jī)之間的通信
    的頭像 發(fā)表于 11-01 16:51 ?473次閱讀

    C語言與Java語言的對(duì)比

    C語言和Java語言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢(shì)和特點(diǎn),適用于不同的應(yīng)用場(chǎng)景。以下將從語法特性、內(nèi)存管理、跨平臺(tái)性、性能、應(yīng)用領(lǐng)域等多個(gè)方面對(duì)C
    的頭像 發(fā)表于 10-29 17:31 ?438次閱讀

    何用 S7-200 實(shí)現(xiàn) Modbus 通信?

    電子發(fā)燒友網(wǎng)站提供《如何用 S7-200 實(shí)現(xiàn) Modbus 通信?.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 10:22 ?1次下載

    PLC編程語言C語言的區(qū)別

    在工業(yè)自動(dòng)化和計(jì)算機(jī)編程領(lǐng)域中,PLC(可編程邏輯控制器)編程語言C語言各自扮演著重要的角色。盡管兩者都是編程語言,但它們?cè)诙鄠€(gè)方面存在顯著的區(qū)別。本文將從多個(gè)維度深入探討PLC編程
    的頭像 發(fā)表于 06-14 17:11 ?3242次閱讀

    何用C語言實(shí)現(xiàn)高效查找(二分法)

    今天給分享一下使用C語言實(shí)現(xiàn)二分算法,主要包含以下幾部分內(nèi)容:二分查找算法介紹二分查找算法使用場(chǎng)景二分查找算法代碼實(shí)現(xiàn)二分查找算法實(shí)現(xiàn)過程用C
    的頭像 發(fā)表于 06-04 08:04 ?1260次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>C</b><b class='flag-5'>語言實(shí)現(xiàn)</b>高效查找(二分法)

    OrangePi AIPro/Kunpeng Pro主頻提升啦,加量不加價(jià)!

    的機(jī)械臂、智能機(jī)器人、手勢(shì)貪吃蛇、AI使用案例等吸引了眾多與會(huì)者駐足,觀看者絡(luò)繹不絕,對(duì)OrangePiAIpro表現(xiàn)出濃厚的興趣。與此同時(shí),OrangePiKunp
    的頭像 發(fā)表于 05-16 17:32 ?466次閱讀
    OrangePi AIPro/Kunpeng Pro主頻提升啦,加量不加價(jià)!

    使用C語言實(shí)現(xiàn)的CRC計(jì)算單元的例子

    使用C語言實(shí)現(xiàn)的CRC計(jì)算單元的例子
    的頭像 發(fā)表于 05-16 16:16 ?1077次閱讀

    嵌入式編程,如何用 C 語言實(shí)現(xiàn)狀態(tài)機(jī)設(shè)計(jì)?

    狀態(tài)機(jī)模式是一種行為模式,通過多態(tài)實(shí)現(xiàn)不同狀態(tài)的調(diào)轉(zhuǎn)行為的確是一種很好的方法,只可惜在嵌入式環(huán)境下,有時(shí)只能寫純C代碼,并且還需要考慮代碼的重入和多任務(wù)請(qǐng)求跳轉(zhuǎn)等情形,因此實(shí)現(xiàn)起來著實(shí)需要一番考慮
    發(fā)表于 04-23 11:00

    C語言實(shí)現(xiàn)Web參數(shù)傳遞

    電子發(fā)燒友網(wǎng)站提供《C語言實(shí)現(xiàn)Web參數(shù)傳遞.docx》資料免費(fèi)下載
    發(fā)表于 03-24 09:14 ?2次下載

    fpga語言是什么?fpga語言c語言的區(qū)別

    功能,從而實(shí)現(xiàn)對(duì)數(shù)字電路的高效定制。FPGA語言主要包括VHDL(VHSIC Hardware Description Language)和Verilog等,這些語言具有強(qiáng)大的描述能力,能夠精確地定義硬件的每一個(gè)細(xì)節(jié),從而
    的頭像 發(fā)表于 03-15 14:50 ?1023次閱讀

    嵌入式系統(tǒng)中C語言結(jié)構(gòu)體的基礎(chǔ)實(shí)現(xiàn)與應(yīng)用

    C語言中的數(shù)組只能允許程序員定義存儲(chǔ)相同類型數(shù)據(jù)。但是結(jié)構(gòu)是C語言編程中允許您存儲(chǔ)不同數(shù)據(jù)類型的數(shù)據(jù)。
    發(fā)表于 03-12 14:29 ?560次閱讀
    嵌入式系統(tǒng)中<b class='flag-5'>C</b><b class='flag-5'>語言</b>結(jié)構(gòu)體的基礎(chǔ)<b class='flag-5'>實(shí)現(xiàn)</b>與應(yīng)用
    百家乐官网视频游戏挖坑| 福贡县| 百家乐打水论坛| 新世纪百家乐官网娱乐城| 喜達博彩网| 威尼斯人娱乐备用622| 百家乐为什么庄5| 百家乐官网赌术大揭秘| 迁西县| 德州扑克庄家| 三星百家乐的玩法技巧和规则| 网上百家乐危险| 百家乐官网对付抽水| 英山县| 皇冠现金网骗钱| 百苑百家乐的玩法技巧和规则| 优博百家乐现金网| 高档百家乐官网桌| 百家乐官网在线作弊| bet365维护| 全讯网123| 如何玩百家乐游戏| 杨公风水24山分金水法| 网络百家乐官网骗局| 太阳城百家乐官网群| 真人娱乐场注册送现金| 威尼斯人娱乐城游戏平台| 网上百家乐有人赢过吗| 免费百家乐官网统计工具| 百家乐官网赌博代理荐| 虚拟百家乐官网游戏下载| 大厂| 太阳城官网| 百家乐赌场娱乐城| 百家乐真人娱乐注册| 7位百家乐官网扑克桌| 亚洲百家乐官网博彩的玩法技巧和规则| 百家乐官网现金游戏注册送彩金| 定襄县| 壤塘县| 沙龙国际|