文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++控制台版扫雷游戏

2024-04-02 19:55

关注

本文实例为大家分享了C++控制台版扫雷游戏的具体代码,供大家参考,具体内容如下

先说思路,其实挺简单的。

(1) 随机生成10个雷,标记到二维数组里,然后计算八个方向的雷的总数记录下来,这是预处理阶段。

(2)输入要翻开的位置的坐标,如果是数字直接显示,是空白的话,这里采用bfs即宽度优先搜索解决,搜到最外层是数字(仅一层)时结束,具体详见代码。

// 扫雷程序 
#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}};//方向数组 
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;
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯