扫雷

· · 休闲·娱乐

本人与豆包精心配置了一个小游戏:扫雷。希望大家喜欢!可以到dev-c++上编译运行(快捷键F11)

可以的话就点个赞,收个藏吧

游戏说明:

1.操作方式: 首先,你将输入一个操作符y/n/u,然后输入对应的坐标(第一个数为x坐标,也就是从上到下分别为1到10,第二个数为y坐标,也就是从左到右分别为1到10)y代表这个格子是雷,将显示‘$’,n表示这个不是雷,会被翻开,u表示取消标记雷。

2.获胜方式: 找到所有的雷并标记,如果翻开了雷,那么直接失败。

求关,求加团

如有任何疑问,请私信

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;

bool is(int x,int y) {
    return x >= 1 && x <= 10 && y >= 1 && y <= 10;
}

void r(char a[13][13], char b[11][11], int x, int y) {
    if (!is(x, y) || b[x][y] != '#') return;
    b[x][y] = a[x][y];
    if (a[x][y] == ' ') {
        for (int dx = -1; dx <= 1; dx++) {
            for (int dy = -1; dy <= 1; dy++) {
                r(a, b, x + dx, y + dy);
            }
        }
    }
}

int main() {
    time_t startTime = time(NULL);  // 记录游戏开始时间
    int c = 0, yes = 0, w = 0;
    char a[13][13]{0};
    char b[11][11];
    char z;
    int i, j, l = 0;
    for (i = 1; i <= 10; i++) {
        for (j = 1; j <= 10; j++) {
            b[i][j] = '#';
        }
    }
    srand(time(NULL));
    while (l < 10) {
        int x = rand() % 10 + 1;
        int y = rand() % 10 + 1;
        if (a[x][y] != '*') {
            a[x][y] = '*';
            l++;
        }
    }
    for (i = 1; i <= 10; i++) {
        for (j = 1; j <= 10; j++) {
            if (a[i][j] != '*') {
                int c = 0;
                for (int dx = -1; dx <= 1; dx++) {
                    for (int dy = -1; dy <= 1; dy++) {
                        if (is(i + dx, j + dy) && a[i + dx][j + dy] == '*') {
                            c++;
                        }
                    }
                }
                if (c > 0) {
                    a[i][j] = '0' + c;
                }
                else {
                    a[i][j] = ' ';
                }
            }
        }
    }
    while (true) {
        Sleep(1000);
        system("cls");
        for (i = 1; i <= 10; i++) {
            for (j = 1; j <= 10; j++) {
                cout << b[i][j];
            }
            cout << endl;
        }
        char z;
        int x, y;
        cin >> z >> x >> y;
        if (!is(x, y)) {
            cout << "输入无效,请重新输入!" << endl;
            Sleep(1000);
            continue;
        }
        if (z == 'n') { // 翻开地块 
            if (a[x][y] == '*') {
                time_t endTime = time(NULL);  // 记录游戏结束时间
                double elapsedTime = difftime(endTime, startTime);  // 计算所用时间
                cout << "你输了!" << endl;
                for (int i = 1; i <= 10; i++) {
                    for (int j = 1; j <= 10; j++) {
                        cout << a[i][j];
                    }
                    cout << endl;
                }
                cout << "你一共用了 " << elapsedTime << " 秒。" << endl;
                system("pause");
                system("pause");
                system("pause");
                return 0;
            }
            else {
                r(a, b, x, y);
            }
        }
        else if (z == 'u') { // 取消标志 
            if (b[x][y] == '$') {
                b[x][y] = '#';
                if (a[x][y] == '*') {
                    yes--;
                }
            }
        }
        else if (z == 'y') { // 标记 
            b[x][y] = '$';
            w++;
            if (a[x][y] == '*') {
                yes++;
            }
        }
        if (w == yes == 10) {
            time_t endTime = time(NULL);  // 记录游戏结束时间
            double elapsedTime = difftime(endTime, startTime);  // 计算所用时间
            cout << "你赢了!" << endl;
            for (int i = 1; i <= 10; i++) {
                for (int j = 1; j <= 10; j++) {
                    cout << a[i][j];
                }
                cout << endl;
            }
            cout << "你一共用了 " << elapsedTime << " 秒。" << endl;
            system("pause");
            system("pause");
            system("pause");
            return 0;
        }
    }
}

高难度版(极高的耐心,作者都过不去,因为作者没耐心)

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;

bool is(int x,int y) {
    return x >= 1 && x <= 20 && y >= 1 && y <= 20;
}

void r(char a[23][23], char b[21][21], int x, int y) {
    if (!is(x, y) || b[x][y] != '#') return;
    b[x][y] = a[x][y];
    if (a[x][y] == ' ') {
        for (int dx = -1; dx <= 1; dx++) {
            for (int dy = -1; dy <= 1; dy++) {
                r(a, b, x + dx, y + dy);
            }
        }
    }
}

int main() {
    time_t startTime = time(NULL);  // 记录游戏开始时间
    int c = 0, yes = 0, w = 0;
    char a[23][23]{0};
    char b[21][21];
    char z;
    int i, j, l = 0;
    for (i = 1; i <= 20; i++) {
        for (j = 1; j <= 20; j++) {
            b[i][j] = '#';
        }
    }
    srand(time(NULL));
    while (l < 30) {
        int x = rand() % 20 + 1;
        int y = rand() % 20 + 1;
        if (a[x][y] != '*') {
            a[x][y] = '*';
            l++;
        }
    }
    for (i = 1; i <= 20; i++) {
        for (j = 1; j <= 20; j++) {
            if (a[i][j] != '*') {
                int c = 0;
                for (int dx = -1; dx <= 1; dx++) {
                    for (int dy = -1; dy <= 1; dy++) {
                        if (is(i + dx, j + dy) && a[i + dx][j + dy] == '*') {
                            c++;
                        }
                    }
                }
                if (c > 0) {
                    a[i][j] = '0' + c;
                }
                else {
                    a[i][j] = ' ';
                }
            }
        }
    }
    while (true) {
        Sleep(1000);
        system("cls");
        for (i = 1; i <= 20; i++) {
            for (j = 1; j <= 20; j++) {
                cout << b[i][j];
            }
            cout << endl;
        }
        char z;
        int x, y;
        cin >> z >> x >> y;
        if (!is(x, y)) {
            cout << "输入无效,请重新输入!" << endl;
            Sleep(1000);
            continue;
        }
        if (z == 'n') { // 翻开地块 
            if (a[x][y] == '*') {
                time_t endTime = time(NULL);  // 记录游戏结束时间
                double elapsedTime = difftime(endTime, startTime);  // 计算所用时间
                cout << "你输了!" << endl;
                for (int i = 1; i <= 20; i++) {
                    for (int j = 1; j <= 20; j++) {
                        cout << a[i][j];
                    }
                    cout << endl;
                }
                cout << "你一共用了 " << elapsedTime << " 秒。" << endl;
                system("pause");
                system("pause");
                system("pause");
                return 0;
            }
            else {
                r(a, b, x, y);
            }
        }
        else if (z == 'u') { // 取消标志 
            if (b[x][y] == '$') {
                b[x][y] = '#';
                if (a[x][y] == '*') {
                    yes--;
                }
                w--;
            }
        }
        else if (z == 'y') { // 标记 
            b[x][y] = '$';
            w++;
            if (a[x][y] == '*') {
                yes++;
            }
        }
        if (w == yes == 30) {
            time_t endTime = time(NULL);  // 记录游戏结束时间
            double elapsedTime = difftime(endTime, startTime);  // 计算所用时间
            cout << "你赢了!" << endl;
            for (int i = 1; i <= 20; i++) {
                for (int j = 1; j <= 20; j++) {
                    cout << a[i][j];
                }
                cout << endl;
            }
            cout << "你一共用了 " << elapsedTime << " 秒。" << endl;
            system("pause");
            system("pause");
            system("pause");
            return 0;
        }
    }
}

如果你想的话也可以看看我的其他作品

贪吃蛇

乒乓球游戏

口袋奇兵

逃离后室游戏

求关QAQ