用c++代码写出扫雷小程序。
时间: 2024-09-19 08:03:30 浏览: 38
基于c++实现自动扫雷小程序源码(带说明介绍)课程大作业.zip
在C++编写扫雷小游戏的基本步骤包括创建游戏板、随机放置地雷、用户输入操作以及检查是否踩到雷。这里是一个简单的控制台版扫雷游戏的示例代码:
```cpp
#include <iostream>
#include <cstdlib> // 需要用到rand函数
const int ROWS = 10;
const int COLS = 10;
const int MIN_MINE = 10;
const int MAX_MINE = 99;
class MineSweeper {
public:
void startGame();
bool reveal(int row, int col);
private:
char board[ROWS][COLS];
int mineCount;
};
void MineSweeper::startGame() {
mineCount = rand() % (MAX_MINE - MIN_MINE) + MIN_MINE;
for (int i = 0; i < ROWS; ++i)
for (int j = 0; j < COLS; ++j)
board[i][j] = '.';
// 随机放置地雷
while (mineCount > 0) {
int r = rand() % ROWS;
int c = rand() % COLS;
if (board[r][c] != 'M') { // 如果格子未被标记为地雷
board[r][c] = 'M';
--mineCount;
}
}
// 初始化周围数字
for (int i = 0; i < ROWS; ++i) {
for (int j = 0; j < COLS; ++j) {
countAdjacentMines(i, j);
reveal(i, j); // 显示初始状态
}
}
}
bool MineSweeper::reveal(int row, int col) {
if (row < 0 || row >= ROWS || col < 0 || col >= COLS || board[row][col] == 'M')
return false;
std::cout << board[row][col];
if (board[row][col] != '.') {
return true;
}
for (int dr = -1; dr <= 1; ++dr)
for (int dc = -1; dc <= 1; ++dc)
if (dr != 0 || dc != 0) {
if (reveal(row + dr, col + dc))
std::cout << " ";
else
return true; // 如果邻近有雷,直接结束
}
return false;
}
void MineSweepers::countAdjacentMines(int row, int col) {
int mineCount = 0;
for (int dr = -1; dr <= 1; ++dr)
for (int dc = -1; dc <= 1; ++dc)
if (dr != 0 || dc != 0) {
if (board[row + dr][col + dc] == 'M')
++mineCount;
}
board[row][col] += mineCount;
}
int main() {
MineSweeper game;
game.startGame();
// 用户交互,例如 'r 3 2' 表示在第3行第2列点击
char userMove;
while (true) {
std::cout << "请输入坐标(r,c), 或者 'q' 退出: ";
std::cin >> userMove;
if (userMove == 'q')
break;
int row, col;
std::cin >> row >> col;
if (game.reveal(row - 1, col - 1)) {
std::cout << "\n游戏结束!\n";
break;
} else {
std::cout << "错误的输入!\n";
}
}
return 0;
}
```
这个代码实现了基本的游戏流程,用户通过输入坐标来揭示周围的方块。注意这只是一个简化的版本,实际应用中可能会添加更多的游戏逻辑和用户界面。
阅读全文