C++控制臺版掃雷游戲_第1頁
C++控制臺版掃雷游戲_第2頁
C++控制臺版掃雷游戲_第3頁
C++控制臺版掃雷游戲_第4頁
C++控制臺版掃雷游戲_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第C++控制臺版掃雷游戲本文實例為大家分享了C++控制臺版掃雷游戲的具體代碼,供大家參考,具體內容如下

先說思路,其實挺簡單的。

(1)隨機生成10個雷,標記到二維數組里,然后計算八個方向的雷的總數記錄下來,這是預處理階段。

(2)輸入要翻開的位置的坐標,如果是數字直接顯示,是空白的話,這里采用bfs即寬度優(yōu)先搜索解決,搜到最外層是數字(僅一層)時結束,具體詳見代碼。

//掃雷程序

#includeiostream

#includestring

#includequeue

#includecstring

#includectime

usingnamespacestd;

intgrid[100][100];

intrandMark[100][100];

charshowUs[100][100];

intvis[100][100];

intdir[8][2]={{-1,0},{1,0},{0,1},{0,-1},{-1,-1},{-1,1},{1,-1},{1,1}};//方向數組

intres;

structnode

intx;

inty;

voidbfs(intnx,intny)//處理點擊空白

queuenode

nodetemp;

nodet;

t.x=nx,t.y=ny;

q.push(t);

vis[nx][ny]=1;

while(!q.empty())

{

res++;

temp=q.front();

showUs[temp.x][temp.y]=grid[temp.x][temp.y]+'0';

q.pop();

for(inti=0;ii++)

{

intxx=temp.x+dir[i][0];

intyy=temp.y+dir[i][1];

if(xx=0xx10yy=0yy10)

{

if(!vis[xx][yy]grid[xx][yy]==0)

{

t.x=xx,t.y=yy;

vis[xx][yy]=1;

showUs[xx][yy]=grid[xx][yy]+'0';

q.push(t);

}

if(!vis[xx][yy]grid[xx][yy]0grid[temp.x][temp.y]==0)

{

t.x=xx,t.y=yy;

vis[xx][yy]=1;

showUs[xx][yy]=grid[xx][yy]+'0';

q.push(t);

}

}

}

}

intmain()

memset(grid,0,sizeof(grid));

memset(randMark,0,sizeof(randMark));

memset(vis,0,sizeof(vis));

for(inti=0;ii++)

for(intj=0;jj++)

showUs[i][j]='*';

srand(unsigned(time(NULL)));

intsum=0;

while(1)

{

intx=rand()%10;

inty=rand()%10;

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

{

randMark[x][y]=1;//有雷

sum++;

}

if(sum==10)

break;

}

res=0;

for(inti=0;ii++)

for(intj=0;jj++)

{

if(randMark[i][j])

grid[i][j]=-1;

}

for(inti=0;ii++)

for(intj=0;jj++)

{

if(grid[i][j]!=-1)

{

for(intk=0;kk++)

{

intx=i+dir[k][0];

inty=j+dir[k][1];

if(x=0x10y=0y10grid[x][y]==-1)

{

grid[i][j]++;

}

}

}

}

for(inti=0;ii++)

{

for(intj=0;jj++)

coutshowUs[i][j]"";

coutendl;

}

cout"請輸入要翻開的位置的坐標:"endl;

intx,y;

while(1)

{

if(res==90)

cout"恭喜您勝利啦,排雷成功!"endl;

cinxy;

if(grid[x][y]==-1)

{

cout"您中雷啦!"endl;

break;

}

elseif(!vis[x][y]grid[x][y]0)

{

res++;

vis[x][y]=1;

showUs[x][y]=grid[x][y]+'0';

system("cls");

for(inti=0;ii++)

{

for(intj=0;jj++)

coutshowUs[i][j]"";

coutendl;

}

cout"請輸入要翻開的位置的坐標:"endl;

}

elseif(!vis[x][y]grid[x][y]==0)

{

bfs(x,y);

system("cls");

for(inti=0;ii++)

{

for(intj=0;jj++)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論