哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

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

C語(yǔ)言編程學(xué)習(xí)基地 ? 來(lái)源:C語(yǔ)言編程學(xué)習(xí)基地 ? 作者:C語(yǔ)言編程學(xué)習(xí)基地 ? 2021-11-09 16:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

本項(xiàng)目主要用到了C語(yǔ)言的循環(huán),函數(shù),指針,結(jié)構(gòu)體,枚舉,聯(lián)合,文件操作,簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),并且對(duì)邏輯也是有一定的要求,但是這些在我們項(xiàng)目源碼里面都會(huì)有注釋,大家到時(shí)候?qū)W習(xí)的時(shí)候千萬(wàn)不要忽略注釋,注釋可以更好地幫你理解代碼,尤其是C語(yǔ)言初學(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è)重載中沒(méi)有一個(gè)可以轉(zhuǎn)換所有參數(shù)類型  一定是字符集問(wèn)題  /*怎么修改字符集呢?三種方法    
  */
}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í)后練練手,尤其建議先自己了解其邏輯和思路之后去嘗試寫出來(lái),而不是直接照著代碼抄,這樣對(duì)你幫助并不大的!

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

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

那么今天的分享就到這里了,后續(xù)會(huì)更新更多精彩項(xiàng)目的,大家要好好學(xué)C語(yǔ)言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ī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7646

    瀏覽量

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

    關(guān)注

    96

    文章

    2953

    瀏覽量

    70623

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用MoonBit和Raylib構(gòu)建原生移動(dòng)端游戲

    當(dāng)你想做一個(gè)簡(jiǎn)單的手機(jī)游戲,比如 Flappy Bird、2048、貪吃蛇——你的第一反應(yīng)可能是打開(kāi) Unity 或者 Godot。但你有沒(méi)有想過(guò):對(duì)于一個(gè)只需要畫幾個(gè)矩形和圓的游戲,你真的需要一個(gè)完整的
    的頭像 發(fā)表于 03-14 11:21 ?803次閱讀
    使用MoonBit和Raylib構(gòu)建原生移動(dòng)端<b class='flag-5'>游戲</b>

    講解C語(yǔ)言代碼的實(shí)現(xiàn)過(guò)程

    重點(diǎn)講解C語(yǔ)言代碼的實(shí)現(xiàn)過(guò)程,算法的C語(yǔ)言實(shí)現(xiàn)過(guò)程具有一般性,通過(guò)PID算法的C
    發(fā)表于 01-21 07:58

    C語(yǔ)言來(lái)實(shí)現(xiàn)萬(wàn)年歷

    C語(yǔ)言實(shí)現(xiàn)萬(wàn)年歷程序的代碼如下:#include int year(int y) { if ((y%4==0) (y%100!=0) || y%400==0) return 366
    發(fā)表于 01-16 08:02

    C語(yǔ)言實(shí)現(xiàn)PID算法介紹

    PID 是 Proportional(比例)、Integral(積分)、Differential(微分)的首字母縮寫;是一種結(jié)合比例、積分和微分三種環(huán)節(jié)于一體的閉環(huán)控制算法。PID 控制的實(shí)質(zhì)是對(duì)目標(biāo)值和實(shí)際值誤差進(jìn)行比例、積分、微分運(yùn)算后的結(jié)果用來(lái)作用在輸出上。 比例 (P) 比例控制是最簡(jiǎn)單的一種控制方式,成比例的反應(yīng)控制系統(tǒng)中輸入與輸出的偏差信號(hào),只要偏差一旦產(chǎn)生,就立即產(chǎn)生控制的作用來(lái)減小產(chǎn)生的誤差。比例控制器的輸出與輸入成正比關(guān)系,能夠迅速的反應(yīng)偏差,偏差減小的速度取決于比例系數(shù) Kp,Kp 越大偏差減小的就越快,但是極易引起震蕩;Kp 減小發(fā)生震蕩的可能性減小,但是調(diào)節(jié)的速度變慢,單純的比例控制存在不能消除的靜態(tài)誤差,這里就需要積分來(lái)控制。 積分(I) 在比例控制環(huán)節(jié)產(chǎn)生了靜態(tài)誤差,在積分環(huán)節(jié)中,主要用于就是消除靜態(tài)誤差提高系統(tǒng)的無(wú)差度。積分作用的強(qiáng)弱,取決于積分時(shí)間常數(shù) Ti,Ti 越大積分作用越弱,反之則越強(qiáng)。積分控制作用的存在與偏差 e(t) 的存在時(shí)間有關(guān),只要系統(tǒng)存在著偏差,積分環(huán)節(jié)就會(huì)不斷起作用,對(duì)輸入偏差進(jìn)行積分,使控制器的輸出及執(zhí)行器的開(kāi)度不斷變化,產(chǎn)生控制作用以減小偏差。在積分時(shí)間足夠的情況下,可以完全消除靜差,這時(shí)積分控制作用將維持不變。Ti 越小,積分速度越快,積分作用越強(qiáng)。積分作用太強(qiáng)會(huì)使系統(tǒng)超調(diào)加大,甚至使系統(tǒng)出現(xiàn)振蕩。 微分(D) 微分環(huán)節(jié)的作用是反應(yīng)系統(tǒng)偏差的一個(gè)變化趨勢(shì),也可以說(shuō)是變化率,可以在誤差來(lái)臨之前提前引入一個(gè)有效的修正信號(hào),有利于提高輸出響應(yīng)的快速性, 減小被控量的超調(diào)和增加系統(tǒng)的穩(wěn)定性,雖然積分環(huán)節(jié)可以消除靜態(tài)誤差但是降低了系統(tǒng)的響應(yīng)速度,所以引入微分控制器就顯得很有必要,尤其是具有較大慣性的被控對(duì)象使用 PI 控制器很難得到很好的動(dòng)態(tài)調(diào)節(jié)品質(zhì),系統(tǒng)會(huì)產(chǎn)生較大的超調(diào)和振蕩,這時(shí)可以引入微分作用。在偏差剛出現(xiàn)或變化的瞬間,不僅根據(jù)偏差量作出及時(shí)反應(yīng)(即比例控制作用),還可以根據(jù)偏差量的變化趨勢(shì)(速度)提前給出較大的控制作用(即微分控制作用),將偏差消滅在萌芽狀態(tài),這樣可以大大減小系統(tǒng)的動(dòng)態(tài)偏差和調(diào)節(jié)時(shí)問(wèn),使系統(tǒng)的動(dòng)態(tài)調(diào)節(jié)品質(zhì)得以改善。微分環(huán)節(jié)有助于系統(tǒng)減小超調(diào),克服振蕩,加快系統(tǒng)的響應(yīng)速度,減小調(diào)節(jié)時(shí)間,從而改善了系統(tǒng)的動(dòng)態(tài)性能,但微分時(shí)間常數(shù)過(guò)大,會(huì)使系統(tǒng)出現(xiàn)不穩(wěn)定。微分控制作用一個(gè)很大的缺陷是容易引入高頻噪聲,所有在干擾信號(hào)比較嚴(yán)重的流量控制系統(tǒng)中不宜引入微分控制作用。
    發(fā)表于 01-16 07:24

    何用軟件實(shí)現(xiàn)系統(tǒng)的復(fù)位?

    看門狗的工作過(guò)程是怎樣的? 如何用軟件實(shí)現(xiàn)系統(tǒng)的復(fù)位?
    發(fā)表于 01-08 06:15

    C語(yǔ)言主要特點(diǎn)

    指針類型數(shù)據(jù),使用十分靈活和多樣化,能用來(lái)實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹(shù)、棧等)的運(yùn)算。 4.具有結(jié)構(gòu)化的控制語(yǔ)句。用函數(shù)作為程序的模塊單位,便于實(shí)現(xiàn)程序的模塊化。C語(yǔ)言是完全模塊
    發(fā)表于 01-05 07:41

    何用C 語(yǔ)言函數(shù)的返回值?

    基本上,沒(méi)有人會(huì)將大段的C語(yǔ)言代碼全部塞入 main() 函數(shù)。更好的做法是按照復(fù)用率高、耦合性低的原則,盡可能的將代碼拆分不同的功能模塊,并封裝成函數(shù)。 C語(yǔ)言代碼的組合千變?nèi)f化,因
    發(fā)表于 12-25 07:17

    單片機(jī)C語(yǔ)言編程的心得

    規(guī)范程序結(jié)構(gòu)化設(shè)計(jì)的需要,既可以實(shí)現(xiàn)大型程序的模塊化,又可以實(shí)現(xiàn)根各模塊的連接調(diào)試。 1、.H文件介紹: 在單片機(jī)C程序設(shè)計(jì)中,項(xiàng)目一般按功能模塊化進(jìn)行結(jié)構(gòu)化設(shè)計(jì)。將一個(gè)
    發(fā)表于 12-08 07:44

    為什么單片機(jī)還在用C語(yǔ)言編程?

    的缺陷 高級(jí)語(yǔ)言存在的目的是可以實(shí)現(xiàn)更為優(yōu)化的算法,更多的是為了方便的執(zhí)行方案,但是,高級(jí)語(yǔ)言對(duì)程序存儲(chǔ)空間的占用要比匯編和C語(yǔ)言多很多。
    發(fā)表于 11-28 07:37

    請(qǐng)問(wèn)如何用C語(yǔ)言列舉當(dāng)前所有網(wǎng)口?

    何用C語(yǔ)言列舉當(dāng)前所有網(wǎng)口?
    發(fā)表于 11-25 07:23

    C語(yǔ)言特性

    數(shù)據(jù),實(shí)現(xiàn)對(duì)設(shè)備的精準(zhǔn)控制,同時(shí)降低功耗,延長(zhǎng)設(shè)備的使用壽命。 2、可移植性:跨平臺(tái)的通行證 C 語(yǔ)言具有良好的可移植性,這意味著用 C 語(yǔ)言
    發(fā)表于 11-24 07:01

    何用FPGA實(shí)現(xiàn)4K視頻的輸入輸出與處理

    游戲、影視和顯示領(lǐng)域,4K 已經(jīng)成為標(biāo)配。而今天,我們就來(lái)聊聊——如何用 FPGA 實(shí)現(xiàn) 4K 視頻的輸入輸出與處理。
    的頭像 發(fā)表于 10-15 10:47 ?2358次閱讀
    如<b class='flag-5'>何用</b>FPGA<b class='flag-5'>實(shí)現(xiàn)</b>4K視頻的輸入輸出與處理

    C++ 與 Python:樹(shù)莓派上哪種語(yǔ)言更優(yōu)?

    Python是樹(shù)莓派上的首選編程語(yǔ)言,我們的大部分教程都使用它。然而,C++在物聯(lián)網(wǎng)項(xiàng)目中同樣廣受歡迎且功能強(qiáng)大。那么,在樹(shù)莓派項(xiàng)目中選擇哪種語(yǔ)言
    的頭像 發(fā)表于 07-24 15:32 ?1089次閱讀
    <b class='flag-5'>C</b>++ 與 Python:樹(shù)莓派上哪種<b class='flag-5'>語(yǔ)言</b>更優(yōu)?

    單片機(jī)C語(yǔ)言實(shí)例(350+例)

    350+單片機(jī)C語(yǔ)言實(shí)例! 純分享帖,需要者可點(diǎn)擊附件免費(fèi)獲取完整資料~~~【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)第一時(shí)間告知,刪除內(nèi)容!
    發(fā)表于 05-22 21:47

    深入理解C語(yǔ)言C語(yǔ)言循環(huán)控制

    C語(yǔ)言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無(wú)限循環(huán),C語(yǔ)言提供了多種循環(huán)控制語(yǔ)句,如break、continue和
    的頭像 發(fā)表于 04-29 18:49 ?2196次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>循環(huán)控制
    利辛县| 板桥市| 耿马| 屏东县| 定西市| 攀枝花市| 微博| 班戈县| 青海省| 文昌市| 开平市| 屏南县| 泰来县| 客服| 华池县| 常宁市| 通榆县| 斗六市| 镇宁| 盐城市| 青龙| 阳春市| 阿尔山市| 大理市| 休宁县| 墨玉县| 峡江县| 鄂托克前旗| 榆社县| 梁河县| 潞城市| 宁远县| 新河县| 新泰市| 苗栗县| 兴山县| 尼勒克县| 桐乡市| 昆明市| 襄汾县| 夏邑县|