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

C++控制臺版掃雷游戲

 更新時間:2022年05月07日 11:22:14   作者:NK_test  
這篇文章主要為大家詳細介紹了C++控制臺版掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

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

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

// 掃雷程序?
#include <iostream>
#include <string>
#include <queue>
#include <cstring>
#include <ctime>
using namespace std;
int grid[100][100];
int randMark[100][100];
char showUs[100][100];
int vis[100][100];
int dir[8][2]={{-1,0},{1,0},{0,1},{0,-1},{-1,-1},{-1,1},{1,-1},{1,1}};//方向數(shù)組?
int res;?
struct node
{
?? ?int x;
?? ?int y;
};
void bfs(int nx,int ny) //處理點擊空白?
{
?? ?queue <node> q;
?? ?node temp;
?? ?node t;
?? ?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(int i=0;i<8;i++)
?? ??? ?{
?? ??? ??? ?int xx=temp.x+dir[i][0];
?? ??? ??? ?int yy=temp.y+dir[i][1];
?? ??? ??? ?if(xx>=0&&xx<10&&yy>=0&&yy<10)
?? ??? ??? ?{
?? ??? ??? ??? ?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]>0&&grid[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); ? ?? ?
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
}
int main()
{
?? ?memset(grid,0,sizeof(grid));
?? ?memset(randMark,0,sizeof(randMark));
?? ?memset(vis,0,sizeof(vis));
?? ?for(int i=0;i<10;i++)
?? ?for(int j=0;j<10;j++)
?? ?showUs[i][j]='*';
?? ?srand(unsigned(time(NULL)));
?? ?int sum=0;
?? ?while(1)
?? ?{
?? ??? ?int x=rand()%10;
?? ??? ?int y=rand()%10;
?? ??? ?if(randMark[x][y]!=1)
?? ??? ?{
?? ??? ??? ?randMark[x][y]=1;//有雷
?? ??? ??? ?sum++;?? ?
?? ??? ?}
?? ??? ?if(sum==10)
?? ??? ?break;
?? ??? ??
?? ?}
? ? res=0;
?? ?for(int i=0;i<10;i++)
?? ?for(int j=0;j<10;j++)
?? ?{
?? ??? ?if(randMark[i][j])
?? ??? ?grid[i][j]=-1;
?? ?}?
?? ?for(int i=0;i<10;i++)
?? ?for(int j=0;j<10;j++)
?? ?{
?? ??? ?if(grid[i][j]!=-1)
?? ??? ?{
?? ??? ??? ?for(int k=0;k<8;k++)
?? ??? ??? ?{
?? ??? ??? ??? ?int x=i+dir[k][0];
?? ??? ??? ??? ?int y=j+dir[k][1];
?? ??? ??? ??? ?if(x>=0&&x<10&&y>=0&&y<10&&grid[x][y]==-1)
?? ??? ??? ??? ?{
?? ??? ??? ??? ? ? grid[i][j]++;?? ?
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?for(int i=0;i<10;i++)
?? ?{
?? ??? ?for(int j=0;j<10;j++)
?? ??? ?cout<<showUs[i][j]<<" ";
?? ??? ?cout<<endl;
?? ?}
?? ?
?? ?cout<<"請輸入要翻開的位置的坐標:"<<endl;
?? ?int x,y;
?? ?while(1)
?? ?{
?? ??? ?if(res==90)
?? ??? ?cout<<"恭喜您勝利啦,排雷成功!"<<endl;?
?? ??? ?cin>>x>>y;
?? ??? ?if(grid[x][y]==-1)
?? ??? ?{
?? ??? ??? ?cout<<"您中雷啦!"<<endl;
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?else if(!vis[x][y]&&grid[x][y]>0)
?? ??? ?{
?? ??? ??? ?res++;
?? ??? ??? ?vis[x][y]=1;
?? ??? ??? ?showUs[x][y]=grid[x][y]+'0';
?? ??? ??? ?system("cls");
?? ??? ??? ?for(int i=0;i<10;i++)
?? ? ? ? ? ?{
?? ? ? ? ? ??? ?for(int j=0;j<10;j++)
?? ? ? ? ?? ? ? ?cout<<showUs[i][j]<<" ";
?? ? ? ? ? ??? ?cout<<endl;
? ? ? ? ??? ?}
? ? ? ? ??? ?cout<<"請輸入要翻開的位置的坐標:"<<endl;
?? ??? ?}
?? ??? ?else if(!vis[x][y]&&grid[x][y]==0)
?? ??? ?{
?? ??? ??? ?bfs(x,y);
?? ??? ??? ?system("cls");
?? ??? ??? ?for(int i=0;i<10;i++)
?? ? ? ? ? ?{
?? ? ? ? ? ??? ?for(int j=0;j<10;j++)
?? ? ? ? ?? ? ? ?cout<<showUs[i][j]<<" ";
?? ? ? ? ? ??? ?cout<<endl;
? ? ? ? ??? ?}
? ? ? ? ??? ?cout<<"請輸入要翻開的位置的坐標:"<<endl;
?? ??? ?}
?? ?}
?? ?return 0;
}?

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

相關文章

  • C++智能指針weak_ptr的作用詳解

    C++智能指針weak_ptr的作用詳解

    weak_ptr是一個智能指針,也是一個類模板,本文主要介紹了C++智能指針weak_ptr的作用詳解,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • C++ 中CloseHandle 函數(shù)--關閉一個句柄

    C++ 中CloseHandle 函數(shù)--關閉一個句柄

    這篇文章主要介紹了C++ 中CloseHandle 函數(shù)--關閉一個句柄的相關資料,需要的朋友可以參考下
    2017-05-05
  • C++二叉搜索樹模擬實現(xiàn)示例

    C++二叉搜索樹模擬實現(xiàn)示例

    本文主要介紹了C++二叉搜索樹模擬實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11
  • C++ STL list 遍歷刪除出錯解決方案

    C++ STL list 遍歷刪除出錯解決方案

    這篇文章主要介紹了C++ STL list 遍歷刪除出錯解決方案的相關資料,這里對出錯進行分析,并給出正確的解決方法,需要的朋友可以參考下
    2016-12-12
  • C語言實現(xiàn)隨機抽取紙牌

    C語言實現(xiàn)隨機抽取紙牌

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)隨機抽取紙牌,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • opencv3/C++關于移動對象的輪廓的跟蹤詳解

    opencv3/C++關于移動對象的輪廓的跟蹤詳解

    今天小編就為大家分享一篇opencv3/C++關于移動對象的輪廓的跟蹤詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 使用C語言操作樹莓派GPIO的詳細步驟

    使用C語言操作樹莓派GPIO的詳細步驟

    今天抽空給大家普及使用C語言操作樹莓派GPIO的詳細步驟,本文大概分五步給大家介紹樹莓派GPIO安裝步驟,首先需要安裝GPIO庫然后進行一步步設置,具體操作方法跟隨小編一起學習吧
    2021-06-06
  • C++ OpenCV學習之圖像金字塔與圖像融合詳解

    C++ OpenCV學習之圖像金字塔與圖像融合詳解

    圖像金字塔分為兩種:高斯金字塔和拉普拉斯金字塔。圖像金字塔在保持細節(jié)的條件下進行圖像融合等多尺度編輯操作非常有用。本文將利用圖像金字塔實現(xiàn)圖像融合,需要的可以參考一下
    2022-03-03
  • C++實踐數(shù)組類運算的實現(xiàn)參考

    C++實踐數(shù)組類運算的實現(xiàn)參考

    今天小編就為大家分享一篇關于C++實踐數(shù)組類運算的實現(xiàn)參考,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 關于在C程序中處理UTF-8文本的方法詳解

    關于在C程序中處理UTF-8文本的方法詳解

    這篇文章主要給大家介紹了關于在C程序中處理UTF-8文本的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-11-11

最新評論