最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Easyx實現(xiàn)掃雷游戲

 更新時間:2022年01月16日 13:06:31   作者:shi_xiaobin  
這篇文章主要為大家詳細介紹了Easyx實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Easyx實現(xiàn)掃雷游戲的具體代碼,供大家參考,具體內(nèi)容如下

代碼:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<easyx.h>
?
#include<mmsystem.h>
#pragma comment(lib, "winmm.lib")
?
#define ROW 10?? ?//定義行列的常量
#define COL?? ?10?
#define MineNum 10?? ?//雷的數(shù)量
#define ImgSize?? ?40?? ?//圖片的尺寸
?
//定義圖片資源
IMAGE imgs[12];
void loadResource()
{
?? ?for (int i = 0; i < 12; i++)
?? ?{
?? ??? ?char imgPath[50] = { 0 };
?? ??? ?sprintf_s(imgPath, "./images/%d.jpg", i);
?? ??? ?loadimage(&imgs[i], imgPath, ImgSize, ImgSize);
?? ?}
}
?
bool isfirst = true;?? ?//是不是第一次進來
?
//函數(shù)聲明
void show(int map[][COL]);
void init(int map[][COL]);
void draw(int map[][COL]);
void mouseMsg(ExMessage* msg, int map[][COL]);
void boomBlank(int map[][COL], int row, int col);
int judge(int map[][COL], int row, int col);
int main()
{
?? ?//創(chuàng)建窗口
?? ?initgraph(400, 400/*,EW_SHOWCONSOLE*/);
?? ?//播放開始音樂
?? ?mciSendString("open ./images/start.mp3 alias bgm", NULL, 0, NULL);
?? ?mciSendString("play bgm", NULL, 0, NULL);
?
?? ?//掃雷地圖
?? ?int map[ROW][COL] = {0};
?? ?init(map);
?
?? ?//游戲主循環(huán)
?? ?while (true)
?? ?{
?? ??? ?//處理消息
?? ??? ?ExMessage msg;
?? ??? ?while (peekmessage(&msg, EM_MOUSE))
?? ??? ?{
?? ??? ??? ?switch (msg.message)
?? ??? ??? ?{
?? ??? ??? ?case WM_LBUTTONDOWN:?? ?//鼠標(biāo)左鍵和右鍵點擊
?? ??? ??? ?case WM_RBUTTONDOWN:
?? ??? ??? ??? ?mouseMsg(&msg, map);
?? ??? ??? ??? ?int ret = judge(map,msg.y/ImgSize, msg.x / ImgSize);?? ??? ?//點擊之后判斷
?? ??? ??? ??? ?if (ret == -1)
?? ??? ??? ??? ?{
?
?? ??? ??? ??? ??? ?draw(map);
?? ??? ??? ??? ??? ?int select = MessageBox(GetHWnd(), "你這么牛,怎么輸了呢?敢再來一把嗎?", "low B!", MB_OKCANCEL);
?? ??? ??? ??? ??? ?if (select == IDOK)?? ?//再來一把
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?//重新初始化
?? ??? ??? ??? ??? ??? ?init(map);
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?else ?//退出
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?exit(0);
?? ??? ??? ??? ??? ?}
?
?? ??? ??? ??? ?}
?? ??? ??? ??? ?else if(ret == 1)
?? ??? ??? ??? ?{
?
?? ??? ??? ??? ?}
?? ??? ??? ??? ?system("cls");
?? ??? ??? ??? ?printf("judege:%d\n", ret);
?? ??? ??? ??? ?show(map);
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?draw(map);?? ??? ?
?? ?}
?
?? ?//show(map);
?? ?getchar();
?? ?return 0;
}
?
void show(int map[][COL])
{
?? ?for (int i = 0; i < ROW; i++)
?? ?{
?? ??? ?for (int k = 0; k < COL; k++)
?? ??? ?{
?? ??? ??? ?printf("%2d ", map[i][k]);
?? ??? ?}
?? ??? ?printf("\n");
?? ?}
}
//初始化數(shù)據(jù)
void init(int map[][COL])
{
?? ?loadResource();
?? ?//設(shè)置隨機數(shù)種子
?? ?srand((unsigned)time(NULL));
?
?? ?//把map全部初始化為0
?? ?memset(map, 0, sizeof(int) * ROW * COL);
?
?? ?//隨機設(shè)置十個雷 用-1表示
?? ?for (int i = 0; i < MineNum; )
?? ?{
?? ??? ?//數(shù)組的有效下標(biāo) [0,9]
?? ??? ?int r = rand() % ROW;
?? ??? ?int c = rand() % COL;
?? ??? ?if (map[r][c] == 0)
?? ??? ?{
?? ??? ??? ?map[r][c] = -1;
?? ??? ??? ?//只有執(zhí)行了這里的代碼,才成功設(shè)置了雷 -1
?? ??? ??? ?i++;
?? ??? ?}
?? ?}
?
?? ?//把以雷為中心的九宮格數(shù)據(jù)都+1,雷除外
?? ?for (int i = 0; i < ROW; i++)
?? ?{
?? ??? ?for (int k = 0; k < COL; k++)
?? ??? ?{
?? ??? ??? ?//找到雷,并遍歷雷所在的九宮格
?? ??? ??? ?if (map[i][k] == -1)
?? ??? ??? ?{
?? ??? ??? ??? ?for (int r = i-1; r <= i+1; r++)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?for (int c = k-1; c <= k+1; c++)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?//對周圍的數(shù)據(jù)加1,會有一個bug
?? ??? ??? ??? ??? ??? ?if ((r >= 0 && r < ROW && c >= 0 && c < COL) && map[r][c] != -1)
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ?++map[r][c];
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
?
?? ?//加密格子
?? ?for (int i = 0; i < ROW; i++)
?? ?{
?? ??? ?for (int k = 0; k < COL; k++)
?? ??? ?{
?? ??? ??? ?map[i][k] += 20;
?? ??? ?}
?? ?}
}
//繪制
void draw(int map[][COL])
{
?? ?//貼圖,根據(jù)map里面的數(shù)據(jù),貼對應(yīng)的圖片
?? ?for (int i = 0; i < ROW; i++)
?? ?{
?? ??? ?for (int k = 0; k < COL; k++)
?? ??? ?{
?? ??? ??? ?if (map[i][k]>=0 && map[i][k]<=8)?? ?//[0,8]
?? ??? ??? ?{
?? ??? ??? ??? ?int index = map[i][k];?? ?//0 1 2 3 4 5 6 7 8
?? ??? ??? ??? ?putimage(k * ImgSize, i * ImgSize, &imgs[index]);?? ?//
?? ??? ??? ?}
?? ??? ??? ?else if (map[i][k] == -1)
?? ??? ??? ?{
?? ??? ??? ??? ?putimage(k * ImgSize, i * ImgSize, &imgs[9]);
?? ??? ??? ?}
?? ??? ??? ?else if (map[i][k] >= 19 && map[i][k] <= 28)
?? ??? ??? ?{
?? ??? ??? ??? ?putimage(k * ImgSize, i * ImgSize, &imgs[10]);
?? ??? ??? ?}
?? ??? ??? ?else if(map[i][k] >= 39)?? ?//-1 + 20 +20
?? ??? ??? ?{
?? ??? ??? ??? ?putimage(k * ImgSize, i * ImgSize, &imgs[11]);
?? ??? ??? ?}
?? ??? ?}
?? ?}
}
//鼠標(biāo)操作數(shù)據(jù)
void mouseMsg(ExMessage* msg,int map[][COL])
{
?? ?//先根據(jù)鼠標(biāo)點擊的坐標(biāo)求出對應(yīng)的數(shù)組的下標(biāo)
?? ?int r = msg->y / ImgSize;
?? ?int c = msg->x / ImgSize;
?? ?//左鍵打開格子
?? ?if (msg->message == WM_LBUTTONDOWN)
?? ?{
?? ??? ?//什么時候能夠打開,沒有打開的時候就打開
?? ??? ?if (map[r][c]>=19 && map[r][c]<=28)
?? ??? ?{
?? ??? ??? ?//這個函數(shù)只能播放wav格式
?? ??? ??? ?PlaySound("./images/click.wav", NULL, SND_ASYNC | SND_FILENAME);
?? ??? ??? ?map[r][c] -= 20;
?? ??? ??? ?boomBlank(map, r, c);?? ?//檢測一下是不是空白格子,是,炸開
?? ??? ??? ?isfirst = true;
?? ??? ?}?? ?
?? ?}
?? ?//右鍵標(biāo)記格子
?? ?else if (msg->message == WM_RBUTTONDOWN)
?? ?{
?? ??? ?PlaySound("./images/rightClick.wav", NULL, SND_ASYNC | SND_FILENAME);
?? ??? ?//是否能夠標(biāo)記:如果沒有打開就能標(biāo)記
?? ??? ?if (map[r][c] >= 19 && map[r][c] <= 28)
?? ??? ?{
?? ??? ??? ?map[r][c] += 20;
?? ??? ?}
?? ??? ?else if(map[r][c]>=39)
?? ??? ?{
?? ??? ??? ?map[r][c] -= 20;
?? ??? ?}
?? ?}
}
//點擊空白格子,連環(huán)爆開周圍的所有空白格子還有數(shù)字 ?row col 是當(dāng)前點擊的格子
void boomBlank(int map[][COL],int row,int col)
{?? ?
?? ?//判斷row col位置是不是空白格子
?? ?if (map[row][col] == 0)
?? ?{
?? ??? ?for (int r = row-1; r <= row+1; r++)
?? ??? ?{
?? ??? ??? ?for (int c = col-1; c <= col+1; c++)
?? ??? ??? ?{
?? ??? ??? ??? ?if ((r>=0&&r<ROW&&c>=0&&c<COL)?? ??? ??? ?//沒越界
?? ??? ??? ??? ??? ?&& map[r][c]>=19 && map[r][c]<=28)?? ?//沒有打開
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?//每一次調(diào)用都會播放一下
?? ??? ??? ??? ??? ?if (isfirst)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?PlaySound("./images/search.wav", NULL, SND_ASYNC | SND_FILENAME);
?? ??? ??? ??? ??? ??? ?isfirst = false;
?? ??? ??? ??? ??? ?}
?
?? ??? ??? ??? ??? ?map[r][c] -= 20;
?? ??? ??? ??? ??? ?boomBlank(map, r, c);
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?return;
}
//游戲結(jié)束條件 輸了返回-1 ?沒結(jié)束返回0 贏了返回 1
int judge(int map[][COL],int row ,int col)
{
?? ?//點到了雷,結(jié)束?? ?輸了
?? ?if (map[row][col] == -1 || map[row][col] == 19)
?? ?{
?? ??? ?return -1;
?? ?}
?
?? ?//點完了格子,結(jié)束 贏了 點開了100 - 10 = 90 個格子
?? ?int cnt = 0;
?? ?for (int i = 0; i < ROW; i++)
?? ?{
?? ??? ?for (int k = 0; k < COL; k++)
?? ??? ?{
?? ??? ??? ?//統(tǒng)計打開的格子的數(shù)量
?? ??? ??? ?if (map[i][k] >= 0 && map[i][k] <= 8)
?? ??? ??? ?{
?? ??? ??? ??? ?++cnt;
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?if (ROW*COL - MineNum == cnt)
?? ?{
?? ??? ?return 1;
?? ?}
?
?? ?return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++自定義實現(xiàn)比較器

    C++自定義實現(xiàn)比較器

    這篇文章主要為大家詳細介紹了如何使用C++自定義實現(xiàn)比較器,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C++結(jié)構(gòu)體字節(jié)對齊和共用體大小

    C++結(jié)構(gòu)體字節(jié)對齊和共用體大小

    這篇文章主要介紹了C++結(jié)構(gòu)體字節(jié)對齊和共用體大小,結(jié)構(gòu)體內(nèi)存對齊在筆試和面試中經(jīng)常被問到,所以這篇文章做個總結(jié),首先通過代碼驗證不同結(jié)構(gòu)體的內(nèi)存大小,需要的朋友可以參考下
    2021-11-11
  • C++性能剖析教程之switch語句

    C++性能剖析教程之switch語句

    除了用嵌套if語句外,C++中還提供switch語句,又稱為“開關(guān)語句”,用來實現(xiàn)多分支(多選一),下面這篇文章主要給大家介紹了關(guān)于C++性能剖析教程之switch語句的相關(guān)資料,需要的朋友可以參考下
    2018-06-06
  • VScode如何調(diào)用KEIL-MDK

    VScode如何調(diào)用KEIL-MDK

    這篇文章主要介紹了VScode如何調(diào)用KEIL-MDK問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • VC解析XML文件-CMarkup的使用詳解

    VC解析XML文件-CMarkup的使用詳解

    本篇文章是對VC解析XML文件-CMarkup的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 一文搞懂C語言中的文件操作

    一文搞懂C語言中的文件操作

    文件操作想必大家掌握的并不熟練,確實因為我們用的并不多,而本節(jié)內(nèi)容能夠讓大家初步認識文件操作,從文件認識到文件使用,讓我們對c語言文件操作有個初步的了解
    2022-11-11
  • C++中HTTP?代理服務(wù)器的設(shè)計與實現(xiàn)詳解

    C++中HTTP?代理服務(wù)器的設(shè)計與實現(xiàn)詳解

    代理服務(wù)器,即允許一個網(wǎng)絡(luò)終端(一般為客戶端)通過這個服務(wù)與另一?個網(wǎng)絡(luò)終端(一般為服務(wù)器)進行非直接的連接,下面我們就來看看如何使用C++設(shè)計與實現(xiàn)一個HTTP?代理服務(wù)器吧
    2024-01-01
  • C++超詳細分析優(yōu)化排序算法之堆排序

    C++超詳細分析優(yōu)化排序算法之堆排序

    堆是計算機科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數(shù)組對象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。本文將通過圖片詳細介紹堆排序,需要的可以參考一下
    2023-02-02
  • C++深入探索類真正的形態(tài)之struct與class

    C++深入探索類真正的形態(tài)之struct與class

    前邊我們所定義的類,均是使用struct關(guān)鍵字來定義,但是C++中真正用于定義類的關(guān)鍵字為class,因為要C++兼容C,所以保留struct關(guān)鍵字,struct與class的用法完全相同
    2022-04-04
  • 詳解如何利用C++實現(xiàn)Mystring類

    詳解如何利用C++實現(xiàn)Mystring類

    這篇文章主要為大家詳細介紹了C++實現(xiàn)MyString的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論

涞水县| 娄底市| 磴口县| 调兵山市| 龙井市| 永定县| 新河县| 英超| 东莞市| 米脂县| 诸暨市| 东平县| 洪江市| 绵竹市| 惠水县| 宿松县| 华蓥市| 宜君县| 墨江| 北京市| 台北县| 广宗县| 屯门区| 托克逊县| 凉山| 瑞丽市| 剑河县| 合肥市| 高阳县| 盈江县| 扎鲁特旗| 阿瓦提县| 贺州市| 鹤岗市| 永昌县| 湖南省| 馆陶县| 安化县| 二手房| 霍州市| 河池市|