扫雷c++

今天简单介绍一下扫雷代码

1,设计一个9*9棋盘的扫雷游戏

2,实现switch case语句 来实行游戏的开始结束

3,游戏部分创建两个二维数组,分别是mine和show数组mine数组是有关炸弹的数组,有炸弹的位置是1,没有炸弹的位置是0;show数组是查找炸弹的数组,不知道的位置是‘*’,查出来的位置的数字是周围的炸弹个数 

4,main初始化是‘0’ show 初始化是‘*’

5,打印棋盘 每当输出坐标数 就要打印一次棋盘

6,当输入坐标数时,电脑也有输入我们就用到 rand(引用头文件:stdlib.h)和time(引用头文件:time.h),结合使用可以使电脑随机布置雷

7,实现排查雷的操作玩家输入一个坐标,若踩雷则会提醒游戏结束;若未踩雷,则在show数组中的相应位置中显示周围一圈雷的个数

接下来就是代码实现的步骤

创建一个game.h的头文件

使在ff.cpp和game.cpp中引入“#include game.h”

 创建函数、简单的游戏选择 函数

在ff.cpp中main函数do while 语句以及switch case语句

menu();中间打错了

 

设计一个9*9((横坐标ROW纵坐标COL))的棋盘

但是如果在边框会出现溢出的现象于是我们设计一个11*11的棋盘(横坐标ROWS 纵坐标COLS但是显示9*9出来所以设计两个宏定义 以及 雷的数量这里就先设计10个

接下来就是所有函数的过程

 初始化棋盘首先 set=0 将二维数组初始化0;

 

 打印棋盘 是11*11的棋盘在考虑溢出只遍历9*9 就可以解决溢出 

随机函数   Setmine()设置的雷的数量x,y代表横纵坐标

将处在处在3*3的雷的排查出来算出周围雷的个数

void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
    int x=0;
    int y=0;
    int win=0;
    while(win<row*col-EASY_COUNT)
    {cout<<"请输入要排查的目标";
        cin>>x>>y;
        if(x>=1&&x<=row&&y>=1&&y<=col)
        {
            if(mine[x][y]=='1')
            {cout<<"很遗憾,你被炸死了"<<endl;
                DisplayBoard(mine,ROW,COL);
                break;
            }
           else {
                int count = GetMineCount(mine, x, y);
                show[x][y] == count + '0';
                DisplayBoard(show, ROW, COL);
                win++;
           }
        }
        else
        {cout<<"坐标非法,重新输入"<<endl;}

    }

接下来是排雷的过程 如果输入的坐标数是==‘1’ 这里‘1’就是设置雷的个数相当于踩到雷了

如果没2踩到雷就继续执行Displayboard继续执行排雷过程 如果我们输入1的坐标出现溢出,自然就要重新输入

if(win==row*col-EASY_COUNT)
{
    cout<<"恭喜你,排雷成功"<<endl;
    DisplayBoard(mine,ROW,COL);
}


}
如果我们将排查的数等于总键盘的数量(9*9)-雷的数量那么我们排雷就成功了

所有代码

game.h

#pragma once
#include<iostream>
#include<stdlib.h>
#include<time.h>
#define EASY_COUNT 10
#define ROW 9
#define COL 9
#define ROWS 11
#define COLS 11
using namespace std;
void Initboard(char board[ROWS][COLS],int rows,int cols,char set);
void DisplayBoard(char board[ROWS][COLS],int row,int col);
void SetMine(char board [ROWS][COLS],int row,int col);
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);

game.cpp

#include"game.h"
void Initboard(char board[ROWS][COLS],int rows,int cols,char set)
{ int i=0;
    for(i=0;i<rows;i++)
    { int j=0;
        for(j=0;j<=cols;j++)
        {
            board[i][j]=set;
        }

    }
}
void DisplayBoard(char board[ROWS][COLS],int row,int col)
{int i=0;
    cout<<"---------扫雷游戏-----------"<<endl;
    for(i=0;i<=col;i++)
    {cout<<i;

    }cout<<endl;
    for(i=1;i<=row;i++)
    { cout<<i;
        int j=0;
        for(j=1;j<=col;j++)
        {
            cout<<board[i][j];

        }cout<<endl;

    }


}void SetMine(char board [ROWS][COLS],int row,int col) {
    int count = EASY_COUNT;
    while (count) {
        int x = rand() % row + 1;
        int y = rand() % col + 1;
        if (board[x][y] == '0') {
            board[x][y] = '1';
            count--;}
    }
}
int  GetMineCount(char mine[ROWS][COLS],int x,int y)
{
   return (mine[x-1][y]+mine[x][y-1]+mine[x+1][y-1]+mine[x+1][y]+mine[x+1][y+1]+mine[x][y=1]+mine[x-1][y+1]-8*'0');


}
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
    int x=0;
    int y=0;
    int win=0;
    while(win<row*col-EASY_COUNT)
    {cout<<"请输入要排查的目标";
        cin>>x>>y;
        if(x>=1&&x<=row&&y>=1&&y<=col)
        {
            if(mine[x][y]=='1')
            {cout<<"很遗憾,你被炸死了"<<endl;
                DisplayBoard(mine,ROW,COL);
                break;
            }
           else {
                int count = GetMineCount(mine, x, y);
                show[x][y] == count + '0';
                DisplayBoard(show, ROW, COL);
                win++;
           }
        }
        else
        {cout<<"坐标非法,重新输入"<<endl;}

    }
if(win==row*col-EASY_COUNT)
{
    cout<<"恭喜你,排雷成功"<<endl;
    DisplayBoard(mine,ROW,COL);
}


}

game执行.cpp

#include"game.h"//

void menu() {
    cout << "*******************" << endl;
    cout << "********1.play*****" << endl;
    cout << "********0. exit****" << endl;
    cout << "*******************" << endl;
}

void game() {
    char mine[ROWS][COLS];
    char show[ROWS][COLS];
    Initboard(mine, ROWS, COLS, '0');
    Initboard(show, ROWS, COLS, '*');
    DisplayBoard(show, ROW, COL);
    SetMine(mine, ROW, COL);
    FindMine(mine, show, ROW, COL);
}

int main() {
    int input;
    srand((unsigned int) time((NULL)));
    do {
        menu();
        cout << "请选择:>";
        cin >> input;
        switch (input) {
            case 1:
                game();
                break;
            case 0:
                cout << "退出游戏" << endl;
                break;
            default:
                cout << "选择错误,重新选择";
        }

    } while (input);
    return 0;
}

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值