最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++控制臺版掃雷游戲

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

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

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

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

(2)輸入要翻開的位置的坐標(biāo),如果是數(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<<"請輸入要翻開的位置的坐標(biāo):"<<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<<"請輸入要翻開的位置的坐標(biāo):"<<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<<"請輸入要翻開的位置的坐標(biāo):"<<endl;
?? ??? ?}
?? ?}
?? ?return 0;
}?

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

相關(guān)文章

  • 解析使用C++編寫無錯代碼的方法技巧

    解析使用C++編寫無錯代碼的方法技巧

    本篇文章是對使用C++編寫無錯代碼的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c++ static詳細(xì)使用分析

    c++ static詳細(xì)使用分析

    在C++中,static是一個關(guān)鍵字,用于聲明靜態(tài)成員、靜態(tài)局部變量以及靜態(tài)函數(shù),這篇文章主要介紹了c++ static詳細(xì)分析,需要的朋友可以參考下
    2024-05-05
  • C語言數(shù)據(jù)結(jié)構(gòu)之學(xué)生信息管理系統(tǒng)課程設(shè)計

    C語言數(shù)據(jù)結(jié)構(gòu)之學(xué)生信息管理系統(tǒng)課程設(shè)計

    這篇文章主要為大家詳細(xì)介紹了C語言數(shù)據(jù)結(jié)構(gòu)之學(xué)生信息管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • C++11智能指針之weak_ptr詳解

    C++11智能指針之weak_ptr詳解

    這篇文章主要介紹了 C++11智能指針之weak_ptr詳解,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • C++訪問Redis的mset 二進(jìn)制數(shù)據(jù)接口封裝方案

    C++訪問Redis的mset 二進(jìn)制數(shù)據(jù)接口封裝方案

    這篇文章主要介紹了C++訪問Redis的mset 二進(jìn)制數(shù)據(jù)接口封裝方案的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • c語言描述回文數(shù)的三種算法

    c語言描述回文數(shù)的三種算法

    這篇文章主要介紹了c語言描述回文數(shù)的三種算法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • opencv平均背景法詳解

    opencv平均背景法詳解

    這篇文章主要為大家詳細(xì)介紹了opencv平均背景法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語言數(shù)據(jù)的存儲超詳細(xì)講解上篇

    C語言數(shù)據(jù)的存儲超詳細(xì)講解上篇

    使用編程語言進(jìn)行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么
    2022-04-04
  • VC實現(xiàn)ODBC數(shù)據(jù)庫操作實例解析

    VC實現(xiàn)ODBC數(shù)據(jù)庫操作實例解析

    這篇文章主要介紹了VC實現(xiàn)ODBC數(shù)據(jù)庫操作的方法,非常有實用價值,需要的朋友可以參考下
    2014-07-07
  • C語言SetConsoleCursorInfo函數(shù)使用方法

    C語言SetConsoleCursorInfo函數(shù)使用方法

    這篇文章介紹了C語言SetConsoleCursorInfo函數(shù)的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評論

和平县| 奉新县| 通海县| 阜平县| 鄂伦春自治旗| 鄂托克旗| 前郭尔| 双城市| 台东市| 望谟县| 扶余县| 东至县| 日土县| 抚顺市| 炎陵县| 万荣县| 修武县| 万荣县| 茶陵县| 察雅县| 加查县| 蒲城县| 阿鲁科尔沁旗| 南乐县| 许昌市| 新密市| 徐汇区| 周口市| 城固县| 荣昌县| 聊城市| 鲁甸县| 拜城县| 凤庆县| 邻水| 揭东县| 陇川县| 冷水江市| 柯坪县| 开封县| 天水市|