扫雷
本人与豆包精心配置了一个小游戏:扫雷。希望大家喜欢!可以到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