日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java扫雷的设计思路_扫雷设计思路

發(fā)布時間:2024/1/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java扫雷的设计思路_扫雷设计思路 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

int

i,num,tmpx,tmpy,centerX,centerY;

char

num_str[2];

先清空隊列

e.x=x;

e.y=y;

Qin(&Q,&e);

Mine_open[y][x]=1; //作上訪問標記,利用mine數(shù)組作記錄

while(!Qempty(&Q)) //當隊列空時遍歷結(jié)束

{

Qout(&Q,&e);

//注意:旋轉(zhuǎn)中心方塊的坐標在8次循環(huán)中用到

//放入變量centerX、centerY加以保護(由于e.x、e.y在循環(huán)中會被更改)

centerX=e.x;

centerY=e.y;

//揭開該方格

draw_3D_rect(hDC,centerX*BSIZE,centerY*BSIZE,1," ");

for(i=0;i<8;i++) //檢查周圍的8個方格

{

tmpx=centerX+offset_x[i];

tmpy=centerY+offset_y[i];

//對于處于邊、角的方格,tmpx和tmpy可能為負數(shù)或超出最大值,要進行判斷

//注:對于已經(jīng)標記的位置(mine_mark[tmpy][tmpx]==0)不予處理

if(tmpx>=0

&& tmpx

&& tmpy>=0

&& tmpy

&& mine_mark[tmpy][tmpx]==0)

if(mine_open[tmpy][tmpx]==0) //該格子未挖開

if(mine_show[tmpy][tmpx]>0) //若是區(qū)域的邊沿(有數(shù)字)就揭開該方塊

{

num=mine_show[tmpy][tmpx];

_itoa(num,num_str,10);

draw_3D_rect(hDC,tmpx*BSIZE,tmpy*BSIZE,1,num_str);

mine_open[tmpy][tmpx]=1; //作上挖開標記

}

else //否則入隊

{

e.x=tmpx;

e.y=tmpy;

Qin(&Q,&e);

Mine_open[tmpy][tmpx]=1; //作上挖開標記

}

}

}

}

初始工作

1.存儲地雷擺放位置的矩陣(1表示有雷,0表示無雷)

int mine[ROWS][COLS];

2.用于顯示的矩陣(空間換時間,有了這個矩陣,就不用臨時去算周圍有幾個雷了)

-1表示為地雷,其余數(shù)字表示周圍的地雷個數(shù)

int mine_show[ROWS][COLS];

由mine矩陣可以推出mine_show矩陣

0

1

1

1

1

1

1

0

0

1

-1

2

1

0

1

3

-1

2

0

0

2

-1

2

0

0

1

1

1

0

3. 用于標記地雷的矩陣(為1表示未標記,為0表示已標記)

int mine_mark[ROWS][COLS];

4. 用于標記單元格是否挖開的矩陣(為1表示挖開,為0表示未挖開)

int

mine_open[ROWS][COLS];

map[i][j].opened?<=>?mine_open[i][j]=?

map[i][j].marked?<=>?mine_mark[i][j]=?

map[i][j].num?<=>?mine_show[i][j]=?

Map[i][j].isMine

5.某個方格的八個相鄰方格x、y方向的偏移量

int offset_x[8]={-1, 0, 1,1,1,0,-1,-1}; //列

int offset_y[8]={-1,-1,-1,0,1,1, 1, 0}; //行

6. 地雷的數(shù)目統(tǒng)計

int num_total;?//總個數(shù)

int num_marked; //標記的個數(shù)

鼠標點擊處理

1.點擊鼠標左鍵(假設(shè)點擊的是y行x列)

//對于已經(jīng)標記的位置不作處理

if(mine_mark[y][x]==1) return;

num=mine_show[y][x];

if(num==-1) //該方格有地雷

{

在y行x列方格中畫一個雷,游戲失敗,結(jié)束。

}

else

//該方格無地雷

{

if(num>0) //周圍地雷數(shù)大于0

{

先在y行x列方格中顯示周圍雷的個數(shù)

然后設(shè)置該單元格為挖開狀態(tài)?Mine_open[y][x]=1;

}

else //遍歷并挖開此空白單元格相鄰的空白區(qū)域(廣度優(yōu)先遍歷)

bfs(x,y,hwnd,hDC);

}

2. 點擊鼠標右鍵(假設(shè)點擊的是y行x列)

//注:已經(jīng)挖開的格子(mine_open[y][x]==1)不存在打上或取消標記

if(mine_open[y][x]!=1)

if(mine_mark[y][x]==0) ?//打上旗幟標記

{

在y行x列方格中畫一個旗幟

mine_mark[y][x]=1;

}

else?//取消標記

{

在y行x列方格中取消旗幟

mine_mark[y][x]=0;

}

3.判斷任務(wù)是否完成

//判斷標準:無雷區(qū)域是否全部挖開

int Success()

{

int OK=1,x,y;

for(x=0;x

for(y=0;y

//該位置無雷,且沒有揭開

if(mine_show[y][x]!=-1 &&

mine_open[y][x]!=1)?{OK=0; break;}

return(OK);

}

3.bfs(廣度優(yōu)先搜索)算法

//無雷的連通區(qū)域查找(廣度優(yōu)先遍歷)///

void bfs(int x,int y)

{

Queue

Q;

Qelement

e;

如果隊列空了,則退出循環(huán)

出隊一個空白單元格(x,y)

挖開該單元格

處理相鄰8個單元格,有數(shù)字的直接挖開,空白的挖開后入隊(將x,y坐標存入隊列)

挖開鼠標點擊的單元格,并將該單元格坐標入隊

int

i,num,tmpx,tmpy,centerX,centerY;

char

num_str[2];

先清空隊列

e.x=x;

e.y=y;

Qin(&Q,&e);

Mine_open[y][x]=1; //作上訪問標記,利用mine數(shù)組作記錄

while(!Qempty(&Q)) //當隊列空時遍歷結(jié)束

{

Qout(&Q,&e);

//注意:旋轉(zhuǎn)中心方塊的坐標在8次循環(huán)中用到

//放入變量centerX、centerY加以保護(由于e.x、e.y在循環(huán)中會被更改)

centerX=e.x;

centerY=e.y;

//揭開該方格

draw_3D_rect(hDC,centerX*BSIZE,centerY*BSIZE,1," ");

for(i=0;i<8;i++) //檢查周圍的8個方格

{

tmpx=centerX+offset_x[i];

tmpy=centerY+offset_y[i];

//對于處于邊、角的方格,tmpx和tmpy可能為負數(shù)或超出最大值,要進行判斷

//注:對于已經(jīng)標記的位置(mine_mark[tmpy][tmpx]==0)不予處理

if(tmpx>=0

&& tmpx

&& tmpy>=0

&& tmpy

&& mine_mark[tmpy][tmpx]==0)

if(mine_open[tmpy][tmpx]==0) //該格子未挖開

if(mine_show[tmpy][tmpx]>0) //若是區(qū)域的邊沿(有數(shù)字)就揭開該方塊

{

num=mine_show[tmpy][tmpx];

_itoa(num,num_str,10);

draw_3D_rect(hDC,tmpx*BSIZE,tmpy*BSIZE,1,num_str);

mine_open[tmpy][tmpx]=1; //作上挖開標記

}

else //否則入隊

{

e.x=tmpx;

e.y=tmpy;

Qin(&Q,&e);

Mine_open[tmpy][tmpx]=1; //作上挖開標記

}

}

}

}

總結(jié)

以上是生活随笔為你收集整理的java扫雷的设计思路_扫雷设计思路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。