在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    7626

    瀏覽量

    139550
  • 代碼
    +關注

    關注

    30

    文章

    4874

    瀏覽量

    69949

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

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

收藏 人收藏

    評論

    相關推薦

    客廳變游戲室?如何用樹莓派實現 Moonlight 游戲流媒體

    在這個項目中,我們將向您展示如何使用Moonlight將游戲直接流式傳輸到您的RaspberryPi。Moonlight:https://moonlight-stream.org/Moonlight
    的頭像 發表于 03-25 09:37 ?307次閱讀
    客廳變<b class='flag-5'>游戲</b>室?如<b class='flag-5'>何用</b>樹莓派<b class='flag-5'>實現</b> Moonlight <b class='flag-5'>游戲</b>流媒體

    為什么學了C語言,卻寫不出像樣的項目

    在學習編程的路上,C語言幾乎是每個程序員的“必修課”。不管你是打算從事嵌入式開發、系統編程,還是想要深入理解操作系統的底層原理,C語言都是一塊重要的基石。然而許多人在學習
    的頭像 發表于 03-14 17:37 ?257次閱讀
    為什么學了<b class='flag-5'>C</b><b class='flag-5'>語言</b>,卻寫不出像樣的<b class='flag-5'>項目</b>?

    單片機C語言編程寶典大全,初學必備【強推下載!】

    資料介紹:包含 1. 51單片機入門教程 2. 初學者適用:單片機C語言實例100例(代碼及釋義) 3. 51單片機C語言快速上手 4. 51單片機
    發表于 03-14 11:03

    限時免積分下載:增量式與位置式PID算法的C語言實現分享

    前面咱們有分享對PID算法離散化和增量式PID算法原理進行來探索,之后又使用Matlab進行了仿真實驗,對PID三個參數又有了更深入的認識,接下來我們來使用C語言進行PID算法實現,并且結合控制電機的
    發表于 03-05 18:32

    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 ?526次閱讀
    基于FPGA<b class='flag-5'>實現</b>圖像直方圖設計

    使用C語言實現函數模板

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

    C語言中的socket編程基礎

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

    C語言與Java語言的對比

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

    何用 S7-200 實現 Modbus 通信?

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

    何用java語言開發一套數字化產科系統? 數字化產科管理平臺源碼

    何用java語言開發一套數字化產科系統 數字化產科管理平臺源碼
    的頭像 發表于 07-06 09:38 ?1170次閱讀
    如<b class='flag-5'>何用</b>java<b class='flag-5'>語言</b>開發一套數字化產科系統? 數字化產科管理平臺源碼

    PLC編程語言C語言的區別

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

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

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

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

    使用C語言實現的CRC計算單元的例子
    的頭像 發表于 05-16 16:16 ?1338次閱讀
    主站蜘蛛池模板: 国产午夜精品不卡片 | 四虎h789fcom| 在线成人免费观看国产精品 | 欧美黑人性受xxxx喷水 | 五月综合激情久久婷婷 | 久久黄网站 | 欧美在线黄色 | 国产精品美女久久久久网站 | 成人精品视频在线观看播放 | 啪啪免费看 | 免费一级黄 | 日本一区不卡视频 | 久久精品免费观看久久 | 国产福利不卡一区二区三区 | 天天看黄| 乱h亲女小说 | 久久噜国产精品拍拍拍拍 | 91久久人澡人人添人人爽 | 天天成人综合网 | 亚洲一区二区三区中文字幕 | 韩国三级久久精品 | 精品国产_亚洲人成在线高清 | 色香视频在线 | 男女爱爱爽爽福利免费视频 | 天天做天天做天天综合网 | 天天怕夜夜怕狠狠怕 | 午夜高清免费在线观看 | 淫五月| 四虎永久精品免费网址大全 | 国产午夜精品久久久久免费视小说 | 欧美成人综合在线 | 五月花亚洲 | 成年女人毛片免费观看97 | 天堂在线观看 | 国模私拍一区二区三区 | 亚洲午夜网 | 88av视频在线 | 久久鬼| 999久久精品国产 | 国产盗摄女厕美女嘘嘘 | 新版天堂中文资源8在线 |