c++小游戏之扫雷

简介: c++小游戏之扫雷

image.png

扫雷是一款比较常见的智力游戏,游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。今天我们的目标是做一个扫雷小游戏。

void intt(){
    srand(time(NULL));
    for(int i=0;i<maxn+5;i++)
        for(int j=0;j<maxm+5;j++)
            square[i][j]=9;
    memset(flag,true,sizeof(flag));
    int xx=rand() % maxn+1;
    int yy=rand() % maxm+1;
    int num=1;
    while(num<=99)
    {
        while(square[xx][yy]==-1||xx==xxx&&yy==yyy)
        {
            xx=rand()%maxn+1;
            yy=rand()%maxm+1;
        }
        square[xx][yy]=-1;
        num++;
    }
    for(int i=1;i<=maxn;i++)
        for(int j=1;j<=maxm;j++)
            if(square[i][j]!=-1) square[i][j]=count_num(i,j);
}

首先是初始化雷,这里初始化的计数是99,虽然雷的随机的,但是不运行在相同的地方埋雷,所以需要再检查一遍这个地方是否已经有雷了。

int count_num(int x,int y)
{
    int sum=0;
    for(int i=x-1;i<=x+1;i++)
        for(int j=y-1;j<=y+1;j++)
            if (square[i][j]==-1) sum++;
    return sum;
}

这是用于数雷的,记录周围一共有多少个雷。如果没有那就返回0,如果有多少个,那就返回多少个。

void dfs(int x,int y){
    flag[x][y]=false;
    if(square[x][y]==-1) gameover=false;
    if(!gameover) return;
    if(square[x][y]!=0) return;
    for(int i=0;i<8;i++)
    {
        int now_x=move_x[i]+x;
        int now_y=move_y[i]+y;
        if(square[now_x][now_y]!=0){
            flag[now_x][now_y]=false;
        }
    }
    for(int i=0;i<4;i++)
    {
        int now_x=move_x[i]+x;
        int now_y=move_y[i]+y;
        if(flag[now_x][now_y]){
            flag[now_x][now_y]=false;
            dfs(now_x,now_y);
        }
    }
}

这是鼠标点击之后的动作,如果是数字,则直接翻开;如果是空格,则进行搜索。

void display_y(){
    for(int i=1;i<=maxn;i++)
    {
        for(int j=1;j<=maxm;j++)
            if(square[i][j]==-1) 
            {
                SetColor(4);
                cout<<"* ";
                SetColor(15);
            }
                else if (square[i][j]!=0) cout<<square[i][j]<<" ";else cout<<"  ";
        cout<<endl;
    }
}

最后如果引爆了一个雷,那就把所有的雷都打印出来引爆。

这个扫雷游戏稍微有一点难度,你需要初始化雷,计算雷的个数,点击之后排雷。基本思想就是这样。

有想要学习如何做游戏的,可以关注公众号:诗一样的代码,找我一起学习。

相关文章
|
11月前
|
C++
推箱子小游戏(c++实现)
推箱子小游戏(c++实现)
|
算法 定位技术 C++
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
简单的来说,算法就是用计算机程序代码来实现数学思想的一种方法。学习算法就是为了了解它们在计算机中如何演算,以及在当今的信息时代,它们是如何在各个层面上影响我们的日常生活的,从而提高我们的逻辑思维能力和处理实际问题的能力。善用算法、巧用算法,是培养程序设计逻辑的重中之重,许多实际的问题都可用多个可行的算法来解决, 但是要从中找出最优的解决算法却是一项挑战。
490 6
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
C++急速赛车小游戏(注释几天后更新)
C++急速赛车小游戏(注释几天后更新)
218 0
C++急速赛车小游戏(注释几天后更新)
【推荐福利】c++使用easyx做出像素鸟,简单上手小游戏
【推荐福利】c++使用easyx做出像素鸟,简单上手小游戏
c++【键盘读入操作】,两种方法做小游戏的控制摇杆
c++【键盘读入操作】,两种方法做小游戏的控制摇杆
c++【键盘读入操作】,两种方法做小游戏的控制摇杆
|
算法 C++
c++编写简易版2048小游戏
c++编写简易版2048小游戏
|
算法 定位技术 C++
用c++写一个的一个推箱子小游戏
用c++写一个的一个推箱子小游戏
用c++写一个的一个推箱子小游戏
c++循环、continue、排序、goto以及猜数字小游戏
c++循环、continue、排序、goto以及猜数字小游戏
|
人工智能 定位技术 C++
C++实用编程——坦克大战小游戏
我们直接看代码吧,适于win XP和win 7,win 10 画质有些毒瘤 #include <stdio.h> #include <windows.h> #include <time.
22958 0