#include<stdio.h>
#include<graphics.h>
#include<Windows.h>
#include<stdlib.h>
#include<time.h>
#define ROW 9//9行9列的雷區(qū)表格
#define COL 9
#define MINE_WID 40
#define MAX_MINE 9
int mine[ROW+2][COL+2];
int openx,openy;
IMAGE img[12];
MOUSEMSG msg;
HWND hwnd=NULL;
void printMap() //數(shù)組作為儲(chǔ)存數(shù)據(jù),把外圈也繪制出來
{
for(int i=0;i<ROW+2;i++)
{
for(int j=0;j<COL+2;j++)
{
printf("%3d",mine[i][j]);
}
printf("\n");
}
}
//在二維數(shù)組里面隨機(jī)獲取9個(gè)下標(biāo),賦值為-1
void gameInit()
{
//隨機(jī)化給下標(biāo)為x,y的賦值為-1,標(biāo)記為雷區(qū),并且要判斷不要有 重合的下標(biāo)
int x,y;
srand((unsigned int)time(0));
for(int m=0;m<MAX_MINE;)//注意m++的操作,不在這里
{
x=rand()%9+1;
y=rand()%9+1;
//判斷是否重復(fù)
if(mine[x][y]==0) //沒有雷的情況下,就埋雷,有雷就沒做了
{
mine[x][y]=-1;
//當(dāng)布雷成功了,m才++
m++;//放在判斷這里++,才會(huì)保證一定布滿9個(gè)雷
}
}
// 遍歷數(shù)組,對(duì)雷九宮格進(jìn)行+1操作.
for(int a=1;a<ROW+1;a++) // VC6在cpp文件不能重復(fù)定義i,j。所以避開一下
{
for(int b=1;b<COL+1;b++)
{
//首先要找到是雷的i,j
if(mine[a][b]==-1) //再嵌套一個(gè)二層循環(huán)
{
for(int k=a-1;k<=a+1;k++)
{
for(int q=b-1;q<=b+1;q++)
{
//周圍的遍歷,只對(duì)非雷區(qū)進(jìn)行操作
if(mine[k][q]!=-1)
{
mine[k][q]++;
}
}
}
}
}
}
for(int i=1;i<=ROW;i++)
{
for(int j=1;j<=COL;j++)
{
mine[i][j]+=20;
}
}
char temp[20]=" ";
for(i=0;i<12;i++)
{
sprintf(temp,"%d.jpg",i);//
loadimage(&img[i],temp,MINE_WID,MINE_WID);
}
}
//繪圖是mine數(shù)組里面的 1行到9行,1列到9列
void gameDraw()
{
for(int i=1;i<ROW+1;i++)
{
for(int j=1;j<COL+1;j++)
{
int x=(j-1)*MINE_WID;//同步更新下標(biāo)
int y=(i-1)*MINE_WID;
if(mine[i][j]>=0&&mine[i][j]<=8) //初始化開始為0的時(shí)候,全部填充空白磚塊
{
putimage(x,y,&img[mine[i][j]]); //根據(jù)mine[i][j]的數(shù)字來繪制對(duì)應(yīng)的圖片,注意圖片的文件名要與自己顯示的東西相符合
}
else if(mine[i][j]==-1) //當(dāng)為-1的時(shí)候布雷
{
putimage(x,y,&img[9]);
}
else if(mine[i][j]>=19&&mine[i][j]<=28) //所有的數(shù)字在-1到19范圍,+20之后在19到28貼掩蓋圖片
{
putimage(x,y,&img[10]);
}
else if(mine[i][j]>30)
{
putimage(x,y,&img[11]);
}
}
}
}
void openNull(int x,int y) //傳遞openx,openy進(jìn)來
{
if(mine[x][y]==0)//如果是空白(已經(jīng)解密了,對(duì)0進(jìn)行操作)
{
for (int i=x-1;i<=x+1;i++)//二層遍歷周圍的方格子
{
for(int j=y-1;j<=y+1;j++)
{
if(mine[i][j]==20)//周圍的格子沒有點(diǎn),因?yàn)檫€沒有解密,與20進(jìn)行判斷
{
mine[i][j]-=20;//解密為空格0
openNull(i,j);//遞歸調(diào)用到周圍所有的空格全部一鍵打開退出
}
}
}
}
}
void gameMouse()
{
if(MouseHit())
{
msg=GetMouseMsg(); //注意大小寫
//掃雷有標(biāo)記功能,判斷鼠標(biāo)左右鍵。左鍵確定,右鍵標(biāo)記為紅旗
if(msg.uMsg==WM_LBUTTONDOWN)
{
//加密的格子進(jìn)行減操作
mine[msg.y/MINE_WID+1][msg.x/MINE_WID+1]-=20;
openx=msg.y/MINE_WID+1;
openy=msg.x/MINE_WID+1;
openNull(openx,openy);//空白格子遞歸全展開
}
else if(msg.uMsg==WM_RBUTTONDOWN)//判斷右鍵點(diǎn)擊進(jìn)行標(biāo)記
{
if( mine[msg.y/MINE_WID+1][msg.x/MINE_WID+1]<30) //簡(jiǎn)化處理,沒有放置標(biāo)記紅旗的都是在小于30
{
mine[msg.y/MINE_WID+1][msg.x/MINE_WID+1]+=20;//直接+20,讓數(shù)字大于30,給放置紅旗做準(zhǔn)備(-1到8+了20,從19~28,大于30簡(jiǎn)化)
}
else //否則什么? 否則就是 大于30,有紅旗了
{
mine[msg.y/MINE_WID+1][msg.x/MINE_WID+1]-=20; //如果本來就有紅旗,就-20,取消紅旗標(biāo)記
//注意在 gameDraw ()里面更新 else if(mine[i][j]>30) putimage(x,y,&img[11]);
}
}
}
}
void gameWinorLose()
{
//復(fù)制一下鼠標(biāo)消息的代碼
if(MouseHit())
{
msg=GetMouseMsg(); //注意大小寫
if( mine[openx][openy]==-1) //注意點(diǎn)擊之后的判斷進(jìn)行了解密操作,對(duì)-1進(jìn)行判斷,有時(shí)候是對(duì)加密后的數(shù)據(jù)進(jìn)行判斷,要自己學(xué)會(huì)區(qū)分
//include加入對(duì)話框彈出結(jié)束游戲 #include<Windows.h>
{
MessageBox(hwnd,"中雷了!","Game Over",MB_OK);
//全局變量區(qū)加入 HWND hwnd=NULL;
exit(0);
}
}
}
int main()
{
initgraph(MINE_WID*ROW,MINE_WID*COL,1); //參數(shù) 1,是同時(shí)繪圖與打開控制臺(tái)
gameInit(); //資源初始化
printMap();//控制臺(tái)作為后臺(tái)數(shù)據(jù)幫忙分析
while(1)
{
gameDraw();//繪制
gameMouse();
gameWinorLose();
gameDraw();//繪制
}
system("pause");//記得 #include<stdlib>
return 0;
}
mine 全局變量修改后的代碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 雖然app.js先于index.js。但是修改app.js中的全局變量是異步請(qǐng)求,如果你想在index.js里獲取...
- 全局變量是在函數(shù)外部定義的變量(沒有定義在某一個(gè)函數(shù)內(nèi)),所有函數(shù)內(nèi)部都可以使用這個(gè)變量。 提示:全局變量是可變的...
- 1 全局變量可以跨文件使用2、全局變量可以多次聲明,但是定義值只能定義一次。3、靜態(tài)全局變量只能限定本文件使用。4...
- 今天給大家分享一下如何修改DEDECMS后臺(tái)登錄界面和全局變量以及title的版權(quán),網(wǎng)上看了大多數(shù)教程,都特別分散...
- 代碼復(fù)用 【真題】 eg:n=2 n=23210if:×××return 1else:3×f(2)3×2×f(1)...