欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

本文實(shí)例為大家分享了Easyx實(shí)現(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;?? ?//是不是第一次進(jìn)來
?
//函數(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)左鍵和右鍵點(diǎn)擊
?? ??? ??? ?case WM_RBUTTONDOWN:
?? ??? ??? ??? ?mouseMsg(&msg, map);
?? ??? ??? ??? ?int ret = judge(map,msg.y/ImgSize, msg.x / ImgSize);?? ??? ?//點(diǎn)擊之后判斷
?? ??? ??? ??? ?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è)置隨機(jī)數(shù)種子
?? ?srand((unsigned)time(NULL));
?
?? ?//把map全部初始化為0
?? ?memset(map, 0, sizeof(int) * ROW * COL);
?
?? ?//隨機(jī)設(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)點(diǎn)擊的坐標(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;
?? ??? ?}
?? ?}
}
//點(diǎn)擊空白格子,連環(huán)爆開周圍的所有空白格子還有數(shù)字 ?row col 是當(dāng)前點(diǎn)擊的格子
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)
{
?? ?//點(diǎn)到了雷,結(jié)束?? ?輸了
?? ?if (map[row][col] == -1 || map[row][col] == 19)
?? ?{
?? ??? ?return -1;
?? ?}
?
?? ?//點(diǎn)完了格子,結(jié)束 贏了 點(diǎn)開了100 - 10 = 90 個格子
?? ?int cnt = 0;
?? ?for (int i = 0; i < ROW; i++)
?? ?{
?? ??? ?for (int k = 0; k < COL; k++)
?? ??? ?{
?? ??? ??? ?//統(tǒng)計(jì)打開的格子的數(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語言共用體和與結(jié)構(gòu)體的區(qū)別

    淺談C語言共用體和與結(jié)構(gòu)體的區(qū)別

    下面小編就為大家?guī)硪黄獪\談C語言共用體和與結(jié)構(gòu)體的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • C語言變量類型與輸出控制用法實(shí)例教程

    C語言變量類型與輸出控制用法實(shí)例教程

    這篇文章主要介紹了C語言變量類型與輸出控制用法,是C語言程序設(shè)計(jì)中比較基礎(chǔ)也是比較重要的用法,需要的朋友可以參考下
    2014-08-08
  • C++實(shí)現(xiàn)LeetCode(58.求末尾單詞的長度)

    C++實(shí)現(xiàn)LeetCode(58.求末尾單詞的長度)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(58.求末尾單詞的長度),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C/C++代碼操作MySQL數(shù)據(jù)庫詳細(xì)步驟

    C/C++代碼操作MySQL數(shù)據(jù)庫詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于C/C++代碼操作MySQL數(shù)據(jù)庫的相關(guān)資料,通過文中的這些示例,我們可以連接到MySQL數(shù)據(jù)庫,并執(zhí)行常見的數(shù)據(jù)庫操作,如創(chuàng)建表、插入數(shù)據(jù)和查詢數(shù)據(jù),需要的朋友可以參考下
    2023-12-12
  • C++STL之string類的使用

    C++STL之string類的使用

    這篇文章主要為大家詳細(xì)介紹了C++STL中的string類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Qt實(shí)現(xiàn)拖動單個控件移動的示例代碼

    Qt實(shí)現(xiàn)拖動單個控件移動的示例代碼

    做慣了靜態(tài)圖,今天來搞一搞動態(tài)圖吧!本文將利用Qt實(shí)現(xiàn)拖動單個控件移動效果,文中的示例代碼講解詳細(xì),感興趣的可以動手嘗試一下
    2022-06-06
  • C語言?詳解如何刪除有序數(shù)組中的重復(fù)項(xiàng)

    C語言?詳解如何刪除有序數(shù)組中的重復(fù)項(xiàng)

    數(shù)組不擅長插入(添加)和刪除元素。數(shù)組的優(yōu)點(diǎn)在于它是連續(xù)的,所以查找數(shù)據(jù)速度很快。但這也是它的一個缺點(diǎn)。正因?yàn)樗沁B續(xù)的,所以當(dāng)插入一個元素時,插入點(diǎn)后所有的元素全部都要向后移;而刪除一個元素時,刪除點(diǎn)后所有的元素全部都要向前移
    2022-03-03
  • C語言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn)

    C語言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn)

    這篇文章主要介紹了C語言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn),,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • AVX2指令集優(yōu)化浮點(diǎn)數(shù)組求和算法

    AVX2指令集優(yōu)化浮點(diǎn)數(shù)組求和算法

    這篇文章主要為大家介紹了AVX2指令集優(yōu)化浮點(diǎn)數(shù)組求和算法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 深入解析C++編程中對設(shè)計(jì)模式中的策略模式的運(yùn)用

    深入解析C++編程中對設(shè)計(jì)模式中的策略模式的運(yùn)用

    這篇文章主要介紹了C++編程中對設(shè)計(jì)模式中的策略模式的運(yùn)用,需要的朋友可以參考下
    2016-03-03

最新評論