那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用C語言實現掃雷游戲項目

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2021-11-11 14:12 ? 次閱讀

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

游戲介紹:

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

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

項目步驟:

1,繪制地圖,二維數組 雷,數字。。。

2,貼圖,把數字轉化成圖片,加密,標記

3,鼠標操作,點擊打開格子(把鼠標坐標,轉化成數組下標)

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

5,判斷游戲的輸贏

6,分數,音樂....

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

本項目編譯環境:VS2019/VS2013;

插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關注文末領取;

效果圖展示

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

源代碼示例:

#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include#pragma comment(lib,"winmm.lib")
#define ROW 10 //行、列#define COL 10#define MINE 10 //雷的數量#define SIZE 50 //圖片寬度int map[ROW][COL];//全局變量自動初始化為0//定義圖片數組,保存圖片IMAGE img[12];//游戲勝利與否int flag;//游戲數據初始化void GameInit(){  mciSendString("open ./image/start.mp3 alias BGM", 0, 0, 0);  mciSendString("play BGM", 0, 0, 0);  //設置隨機數種子  srand((unsigned)time(NULL));  //初始化數組  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)//還沒有設置為雷    {      map[r][c] = -1;      i++; //每埋雷一次,就加1    }      }  //把以雷為中心的九宮格數據加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)//把其他數字一并處理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)//標記       {        putimage(j * SIZE, i * SIZE, &img[11]);      }        }  }}void openNull(int row, int col);//鼠標操作int  MouseControl(){  if (MouseHit())//判斷有沒有鼠標消息   {    MOUSEMSG msg = GetMouseMsg();//鼠標所在的 x,y      int row = msg.y / SIZE;//把鼠標坐標轉換成,數組下標    int col = msg.x / SIZE;    //對鼠標消息進行分發    switch (msg.uMsg)    {    case WM_LBUTTONDOWN://鼠標左鍵點擊      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://鼠標右鍵點擊       if (map[row][col] > 8 && map[row][col] <= 28)//如果沒打開,且未被標記      {        map[row][col] += 20;      }      else if(map[row][col]>28) //只有沒打開的才可以取消標記和標記      {        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)//如果沒有月結,并且為空或者數字,并且沒有被打開        {          map[m][n] -= 20;          flag++;          openNull(m, n);        }      }    }  }}void Jude(){  if (MouseControl() == -1)  {    //結束    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;}

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

責任編輯:haq


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137714
  • 代碼
    +關注

    關注

    30

    文章

    4827

    瀏覽量

    69053

原文標題:C語言項目實戰:《掃雷游戲》零基礎項目!230 行源碼注釋示例

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    EE-188:使用C語言在ADSP-219x DSP上實現中斷驅動系統

    電子發燒友網站提供《EE-188:使用C語言在ADSP-219x DSP上實現中斷驅動系統.pdf》資料免費下載
    發表于 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'>實現</b>中斷驅動系統

    AKI跨語言調用庫神助攻C/C++代碼遷移至HarmonyOS NEXT

    量;某知名社交電商平臺使用后減少了50%以上跨語言調用接口代碼量;某圖像處理軟件所有C++代碼復用通過AKI來實現。使用AKI后這些項目不僅減少了
    發表于 01-02 17:08

    基于FPGA實現圖像直方圖設計

    直方圖統計的原理 直方圖統計從數學上來說,是對圖像中的像素點進行統計。圖像直方圖統計常用于統計灰度圖像,表示圖像中各個灰度級出現的次數或者概率。統計直方圖的實現采用C/C++或者其他高級語言實
    的頭像 發表于 12-24 10:24 ?224次閱讀
    基于FPGA<b class='flag-5'>實現</b>圖像直方圖設計

    使用C語言實現函數模板

      用C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?477次閱讀

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?469次閱讀

    C語言與Java語言的對比

    C語言和Java語言都是當前編程領域中的重要成員,它們各自具有獨特的優勢和特點,適用于不同的應用場景。以下將從語法特性、內存管理、跨平臺性、性能、應用領域等多個方面對C
    的頭像 發表于 10-29 17:31 ?433次閱讀

    何用 S7-200 實現 Modbus 通信?

    電子發燒友網站提供《如何用 S7-200 實現 Modbus 通信?.pdf》資料免費下載
    發表于 09-14 10:22 ?1次下載

    PLC編程語言C語言的區別

    在工業自動化和計算機編程領域中,PLC(可編程邏輯控制器)編程語言C語言各自扮演著重要的角色。盡管兩者都是編程語言,但它們在多個方面存在顯著的區別。本文將從多個維度深入探討PLC編程
    的頭像 發表于 06-14 17:11 ?3235次閱讀

    何用C語言實現高效查找(二分法)

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

    使用C語言實現的CRC計算單元的例子

    使用C語言實現的CRC計算單元的例子
    的頭像 發表于 05-16 16:16 ?1075次閱讀

    嵌入式編程,如何用 C 語言實現狀態機設計?

    狀態機模式是一種行為模式,通過多態實現不同狀態的調轉行為的確是一種很好的方法,只可惜在嵌入式環境下,有時只能寫純C代碼,并且還需要考慮代碼的重入和多任務請求跳轉等情形,因此實現起來著實需要一番考慮
    發表于 04-23 11:00

    如何成為一名嵌入式C語言高手?

    。 三、通過實踐項目提升技能理論知識是建立在實踐基礎之上的。選擇一些小型的嵌入式項目,例如LED閃爍、溫度監測等簡單的應用,將所學的C語言知識應用到實際中。通過實踐,你可以了解如何將
    發表于 04-07 16:03

    C語言實現Web參數傳遞

    電子發燒友網站提供《C語言實現Web參數傳遞.docx》資料免費下載
    發表于 03-24 09:14 ?2次下載

    fpga語言是什么?fpga語言c語言的區別

    功能,從而實現對數字電路的高效定制。FPGA語言主要包括VHDL(VHSIC Hardware Description Language)和Verilog等,這些語言具有強大的描述能力,能夠精確地定義硬件的每一個細節,從而
    的頭像 發表于 03-15 14:50 ?1021次閱讀

    嵌入式系統中C語言結構體的基礎實現與應用

    C語言中的數組只能允許程序員定義存儲相同類型數據。但是結構是C語言編程中允許您存儲不同數據類型的數據。
    發表于 03-12 14:29 ?559次閱讀
    嵌入式系統中<b class='flag-5'>C</b><b class='flag-5'>語言</b>結構體的基礎<b class='flag-5'>實現</b>與應用
    大发888官方 df888gfxzylc8 | 休闲百家乐官网的玩法技巧和规则| 龙口市| 大发888娱乐城客服电话| 哪个百家乐投注比较好| 立即博百家乐官网娱乐城| 乐百家国际娱乐城| 合肥太阳城莱迪广场| 免佣百家乐赌场优势| 金彩百家乐官网的玩法技巧和规则 | 威尼斯人娱乐网注册| 真人百家乐园| 任我赢百家乐官网软件| 网上百家乐官网如何打水| 真钱赌博网站| 大发888注册 大发888官网| 百家乐强对弱的对打法| 关于百家乐概率的书| 海王星百家乐官网的玩法技巧和规则 | 大发888客服电话 在线| 百家乐真人游戏棋牌| 玩百家乐新太阳城| 百家乐官网代理合作| 百家乐官网喜牛| 百家乐官网网络赌博地址| 襄樊市| 第一足球网| 大发888虎牌官方下载| 百家乐追号软件| 百家乐赌场走势图| 顶尖百家乐学习| 在线百家乐官网作弊| 百家乐官网7scs娱乐平台| 百家乐官网折叠桌| 百家乐官网实时路单| 百家乐研究| 环球国际娱乐| 娱乐城送体验金38元| 决胜德州扑克刷金币| 大发888真人娱乐场游戏平台| 全讯网qtqnet好玩|