chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

如何用C語言實現(xiàn)掃雷游戲項目

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

掃碼添加小助手

加入工程師交流群

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

游戲介紹:

游戲區(qū)包括雷區(qū)、地雷計數(shù)器(位于左上角,記錄剩余地雷數(shù))和計時器(位于右上角,記錄游戲時間),確定大小的矩形雷區(qū)中隨機(jī)布置一定數(shù)量的地雷(初級為9*9個方塊10個雷,中級為16*16個方塊40個雷,高級為16*30個方塊99個雷,自定義級別可以自己設(shè)定雷區(qū)大小和雷數(shù),但是雷區(qū)大小不能超過24*30),玩家需要盡快找出雷區(qū)中的所有不是地雷的方塊,而不許踩到地雷。

游戲的基本操作包括左鍵單擊(Left Click)、右鍵單擊(Right Click)、雙擊(Chording)三種。其中左鍵用于打開安全的格子,推進(jìn)游戲進(jìn)度;右鍵用于標(biāo)記地雷,以輔助判斷,或為接下來的雙擊做準(zhǔn)備;雙擊在一個數(shù)字周圍的地雷標(biāo)記完時,相當(dāng)于對數(shù)字周圍未打開的方塊均進(jìn)行一次左鍵單擊操作。

項目步驟:

1,繪制地圖,二維數(shù)組 雷,數(shù)字。。。

2,貼圖,把數(shù)字轉(zhuǎn)化成圖片,加密,標(biāo)記

3,鼠標(biāo)操作,點擊打開格子(把鼠標(biāo)坐標(biāo),轉(zhuǎn)化成數(shù)組下標(biāo))

4,點到空格之后,打開周圍的格子(遞歸)

5,判斷游戲的輸贏

6,分?jǐn)?shù),音樂....

本項目主要用到了C語言基礎(chǔ)知識以及圖形庫知識,并且對邏輯也是有一定的要求,但是這些在我們項目源碼里面都會有注釋,大家到時候?qū)W習(xí)的時候千萬不要忽略注釋,注釋可以更好地幫你理解代碼,尤其是C語言初學(xué)者。

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

插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關(guān)注文末領(lǐng)??;

效果圖展示

配套講解教程:掃雷游戲教程——嗶哩嗶哩

源代碼示例:

#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include#pragma comment(lib,"winmm.lib")
#define ROW 10 //行、列#define COL 10#define MINE 10 //雷的數(shù)量#define SIZE 50 //圖片寬度int map[ROW][COL];//全局變量自動初始化為0//定義圖片數(shù)組,保存圖片IMAGE img[12];//游戲勝利與否int flag;//游戲數(shù)據(jù)初始化void GameInit(){  mciSendString("open ./image/start.mp3 alias BGM", 0, 0, 0);  mciSendString("play BGM", 0, 0, 0);  //設(shè)置隨機(jī)數(shù)種子  srand((unsigned)time(NULL));  //初始化數(shù)組  for (int i = 0; i < ROW; i++)  {    for (int j = 0; j < COL; j++)    {      map[i][j] = 0;    }  }  //埋雷,-1表示雷 10個雷  for (int i = 0; i < MINE;)  {    int r = rand() % 10;//0 1 2...9    int c = rand() % 10;    if (map[r][c] == 0)//還沒有設(shè)置為雷    {      map[r][c] = -1;      i++; //每埋雷一次,就加1    }      }  //把以雷為中心的九宮格數(shù)據(jù)加1,雷除外  for (int i = 0; i < ROW; i++)  {    for (int j = 0; j < COL; j++)    {      //判斷是不是雷 -1      if (map[i][j] == -1)      {        //遍歷雷所在的九宮格        for (int m = i - 1; m <= i + 1; m++)        {          for (int n = j - 1; n <= j + 1; n++)          {            if ((m >= 0 && m = 0 && n < COL) && map[m][n] != -1)            {              map[m][n] += 1;            }          }        }      }    }  }  //加載圖片  for (int i = 0; i < 12; i++)  {    char file[50] = "";    sprintf(file, "./image/%d.jpg", i);    loadimage(&img[i], file,SIZE,SIZE);  }  //加密格子  for (int i = 0; i < ROW; i++)  {    for (int j = 0; j < COL; j++)    {      //map[i][j] += 20;    }  }}//繪制界面void GameDraw(){  cleardevice();  for (int i = 0; i < ROW; i++)  {    for (int j = 0; j < COL; j++)    {      if (map[i][j] == -1)      {        putimage(j * SIZE, i * SIZE, &img[9]);//繪制雷      }      else if (map[i][j]>=0 && map[i][j]<=8)//把其他數(shù)字一并處理0 1 2 3 4 5 6 7 8      {        putimage(j * SIZE, i * SIZE, &img[map[i][j]]);      }      else if (map[i][j] >= 19 && map[i][j] <= 28)      {        putimage(j * SIZE, i * SIZE, &img[10]);      }      else if (map[i][j] > 30)//標(biāo)記       {        putimage(j * SIZE, i * SIZE, &img[11]);      }        }  }}void openNull(int row, int col);//鼠標(biāo)操作int  MouseControl(){  if (MouseHit())//判斷有沒有鼠標(biāo)消息   {    MOUSEMSG msg = GetMouseMsg();//鼠標(biāo)所在的 x,y      int row = msg.y / SIZE;//把鼠標(biāo)坐標(biāo)轉(zhuǎn)換成,數(shù)組下標(biāo)    int col = msg.x / SIZE;    //對鼠標(biāo)消息進(jìn)行分發(fā)    switch (msg.uMsg)    {    case WM_LBUTTONDOWN://鼠標(biāo)左鍵點擊      if (map[row][col] > 8)//如果沒有打開就打開      {        mciSendString("close click", 0, 0, 0);        mciSendString("open ./image/click.wav alias click", 0, 0, 0);        mciSendString("play click", 0, 0, 0);        map[row][col] -= 20;        flag++;        openNull(row, col);            }      break;    case WM_RBUTTONDOWN://鼠標(biāo)右鍵點擊       if (map[row][col] > 8 && map[row][col] <= 28)//如果沒打開,且未被標(biāo)記      {        map[row][col] += 20;      }      else if(map[row][col]>28) //只有沒打開的才可以取消標(biāo)記和標(biāo)記      {        map[row][col] -= 20;      }      break;    }    return map[row][col];  }}//打開所有以空白為中心的九宮格void openNull(int row,int col){  if (map[row][col] == 0)//點擊的是空白  {    for (int m = row - 1; m <= row + 1; m++)    {      for (int n = col - 1; n <= col + 1; n++)      {        if ((m >= 0 && m < ROW && n >= 0 && n < COL) &&           (map[m][n]==20 || map[m][n]!=19) &&          map[m][n]>8)//如果沒有月結(jié),并且為空或者數(shù)字,并且沒有被打開        {          map[m][n] -= 20;          flag++;          openNull(m, n);        }      }    }  }}void Jude(){  if (MouseControl() == -1)  {    //結(jié)束    int isok=MessageBox(GetHWnd(), "你輸了,是否再玩一次", "提示", MB_OKCANCEL);    if (IDOK == isok)    {      GameInit();      flag=0;    }    else    {      exit(666);    }    mciSendString("close BGM", 0, 0, 0);  }  if (flag == ROW * COL - MINE)  {    int isok = MessageBox(GetHWnd(), "你贏了,是否再玩一次", "提示", MB_OKCANCEL);    if (IDOK == isok)    {      GameInit();      flag = 0;    }    else    {      exit(666);    }    mciSendString("close BGM", 0, 0, 0);  }  }void show(){  for (int i= 0; i < ROW; i++)  {    for (int j = 0; j < COL; j++)    {      printf("%2d  ", map[i][j]);    }    putchar('
');  }  putchar('
');  putchar('
');  //system("cls");//清屏}
int main(){  initgraph(ROW * SIZE, COL * SIZE, SHOWCONSOLE);  GameInit();  show();  BeginBatchDraw();  while (1)  {    //show();    GameDraw();    FlushBatchDraw();    Jude();  }  EndBatchDraw();
  getchar();  return 0;}

寫在最后:對于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!

責(zé)任編輯:haq


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

    關(guān)注

    183

    文章

    7646

    瀏覽量

    146099
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4975

    瀏覽量

    74347

原文標(biāo)題:C語言項目實戰(zhàn):《掃雷游戲》零基礎(chǔ)項目!230 行源碼注釋示例

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    講解C語言代碼的實現(xiàn)過程

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

    C語言實現(xiàn)萬年歷

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

    C語言實現(xiàn)PID算法介紹

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

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

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

    C語言主要特點

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

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

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

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

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

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

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

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

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

    C語言特性

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

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

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

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

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

    單片機(jī)C語言實例(350+例)

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

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

    C語言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無限循環(huán),C語言提供了多種循環(huán)控制語句,如break、continue和
    的頭像 發(fā)表于 04-29 18:49 ?2198次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環(huán)控制

    SAP實施專家解答:如何用DeepSeek-R1實現(xiàn)需求溝通效率倍增

    工博科技分享AI工具鏈在IT項目中的深度應(yīng)用:通過DeepSeek-R1實現(xiàn)智能會議記錄結(jié)構(gòu)化(2小時會議5分鐘生成決策表)和精準(zhǔn)多語言文檔翻譯(錯誤率降低14%),幫助IT團(tuán)隊將重復(fù)性工作耗時減少
    的頭像 發(fā)表于 04-28 09:13 ?805次閱讀