写一段运行扫雷的c++代码
时间: 2023-03-09 08:08:15 浏览: 67
#include<stdio.h>
int main(){
int mineField[10][10]; // 定义雷区
int i,j;
int row, col; // 定义行列变量 // 初始化雷区
for(i = 0; i < 10; i++){
for(j = 0; j < 10; j++){
mineField[i][j] = 0;
}
} // 将雷放置到雷区中
for(i = 0; i < 10; i++){
row = rand() % 10;
col = rand() % 10;
mineField[row][col] = 1;
} // 遍历雷区,输出雷区中的雷
for(i = 0; i < 10; i++){
for(j = 0; j < 10; j++){
if(mineField[i][j] == 1){
printf("* ");
} else{
printf("- ");
}
}
printf("\n");
} return 0;
}
相关问题
用c++写一段扫雷代码
以下是一个简单的C++扫雷游戏代码,实现了基本的游戏逻辑,但没有图形界面。
```c++
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
// 雷区类
class MineSweeper {
private:
int row; // 行数
int col; // 列数
int mineNum; // 雷数
vector<vector<bool>> mines; // 雷区
vector<vector<int>> counts; // 数字区
// 计算某格周围雷数
int countMines(int r, int c) {
int count = 0;
for (int i = r - 1; i <= r + 1; i++) {
if (i < 0 || i >= row) continue;
for (int j = c - 1; j <= c + 1; j++) {
if (j < 0 || j >= col) continue;
if (mines[i][j]) count++;
}
}
return count;
}
public:
MineSweeper(int r, int c, int m) : row(r), col(c), mineNum(m) {
// 初始化雷区和数字区
mines.resize(row, vector<bool>(col));
counts.resize(row, vector<int>(col, -1));
// 随机生成雷区
srand(time(NULL));
int count = 0;
while (count < mineNum) {
int r = rand() % row;
int c = rand() % col;
if (!mines[r][c]) {
mines[r][c] = true;
count++;
}
}
// 计算数字区
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (mines[i][j]) counts[i][j] = -2; // -2 表示当前格是雷
else counts[i][j] = countMines(i, j);
}
}
}
// 翻开某格
void uncover(int r, int c) {
if (counts[r][c] != -1) return; // 已经翻开过或标记过的格子不能再翻开
counts[r][c] = countMines(r, c);
if (counts[r][c] == 0) {
// 如果是空格,递归翻开周围的格子
for (int i = r - 1; i <= r + 1; i++) {
if (i < 0 || i >= row) continue;
for (int j = c - 1; j <= c + 1; j++) {
if (j < 0 || j >= col) continue;
uncover(i, j);
}
}
}
}
// 标记某格为雷或取消标记
void mark(int r, int c) {
if (counts[r][c] != -1) return; // 已经翻开过或标记过的格子不能再标记
if (counts[r][c] == -1) counts[r][c] = -3; // -3 表示当前格已标记为雷
else if (counts[r][c] == -3) counts[r][c] = -1; // 恢复当前格
}
// 判断是否胜利
bool isWin() {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (mines[i][j] && counts[i][j] != -3) return false; // 有雷没被标记
if (!mines[i][j] && counts[i][j] == -1) return false; // 有空格没被翻开
}
}
return true;
}
// 打印当前地图
void print() {
cout << " ";
for (int j = 0; j < col; j++) cout << j << " ";
cout << endl;
for (int i = 0; i < row; i++) {
cout << i << " ";
for (int j = 0; j < col; j++) {
if (counts[i][j] == -1) cout << ". ";
else if (counts[i][j] == -2) cout << "* ";
else if (counts[i][j] == -3) cout << "F ";
else cout << counts[i][j] << " ";
}
cout << endl;
}
}
};
int main() {
int row, col, mineNum;
cout << "请输入行数、列数和雷数:";
cin >> row >> col >> mineNum;
MineSweeper game(row, col, mineNum);
game.print();
while (true) {
int r, c;
cout << "请输入要翻开的行号和列号,中间用空格隔开:";
cin >> r >> c;
game.uncover(r, c);
game.print();
if (game.isWin()) {
cout << "恭喜你,扫雷成功!" << endl;
break;
}
}
return 0;
}
```
用java写一段扫雷游戏代码
以下是一个简单的Java扫雷游戏代码示例:
```java
import java.util.Random;
import java.util.Scanner;
public class Minesweeper {
private int[][] board;
private boolean[][] revealed;
private int size;
private int numOfMines;
public Minesweeper(int size, int numOfMines) {
this.size = size;
this.numOfMines = numOfMines;
board = new int[size][size];
revealed = new boolean[size][size];
initializeBoard();
}
private void initializeBoard() {
Random rand = new Random();
int count = 0;
while (count < numOfMines) {
int row = rand.nextInt(size);
int col = rand.nextInt(size);
if (board[row][col] != -1) {
board[row][col] = -1;
count++;
}
}
for (int r = 0; r < size; r++) {
for (int c = 0; c < size; c++) {
if (board[r][c] != -1) {
int countMines = countMinesAround(r, c);
board[r][c] = countMines;
}
}
}
}
private int countMinesAround(int row, int col) {
int count = 0;
for (int r = row - 1; r <= row + 1; r++) {
for (int c = col - 1; c <= col + 1; c++) {
if (r >= 0 && r < size && c >= 0 && c < size) {
if (board[r][c] == -1) {
count++;
}
}
}
}
return count;
}
public void play() {
Scanner scanner = new Scanner(System.in);
while (true) {
printBoard();
System.out.print("Enter row and column (e.g. 2 3): ");
int row = scanner.nextInt() - 1;
int col = scanner.nextInt() - 1;
if (isMine(row, col)) {
System.out.println("Game over!");
return;
}
reveal(row, col);
if (isWin()) {
System.out.println("You win!");
return;
}
}
}
private void reveal(int row, int col) {
if (row < 0 || row >= size || col < 0 || col >= size) {
return;
}
if (revealed[row][col]) {
return;
}
revealed[row][col] = true;
if (board[row][col] == 0) {
for (int r = row - 1; r <= row + 1; r++) {
for (int c = col - 1; c <= col + 1; c++) {
reveal(r, c);
}
}
}
}
private boolean isMine(int row, int col) {
return board[row][col] == -1;
}
private boolean isWin() {
for (int r = 0; r < size; r++) {
for (int c = 0; c < size; c++) {
if (!revealed[r][c] && board[r][c] != -1) {
return false;
}
}
}
return true;
}
private void printBoard() {
System.out.print(" ");
for (int c = 0; c < size; c++) {
System.out.print((c + 1) + " ");
}
System.out.println();
for (int r = 0; r < size; r++) {
System.out.print((r + 1) + " ");
for (int c = 0; c < size; c++) {
if (revealed[r][c]) {
if (board[r][c] == -1) {
System.out.print("* ");
} else {
System.out.print(board[r][c] + " ");
}
} else {
System.out.print(". ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
Minesweeper game = new Minesweeper(10, 10);
game.play();
}
}
```
这个示例代码实现了一个简单的扫雷游戏,玩家可以通过在控制台输入行和列来选择一个方格进行揭示。当揭示到地雷时,游戏结束;当所有非地雷方格都被揭示时,玩家获胜。