c语言可选择模式扫雷游戏代码
时间: 2023-06-20 10:09:35 浏览: 71
以下是一个基于 C 语言的命令行模式扫雷游戏代码示例。该代码实现了一个简单的扫雷游戏,玩家可以通过输入坐标来打开方块,如果打开的方块是雷,游戏结束。如果所有非雷方块都被打开,游戏胜利。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 9
#define COLS 9
#define MINES 10
int mines[ROWS][COLS]; // 雷区
int mask[ROWS][COLS]; // 玩家看到的区域
// 初始化雷区
void init_mines() {
int i, j, k;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
mines[i][j] = 0;
}
}
for (k = 0; k < MINES; k++) {
i = rand() % ROWS;
j = rand() % COLS;
if (mines[i][j] == 0) {
mines[i][j] = 1;
} else {
k--;
}
}
}
// 显示游戏区域
void display() {
int i, j;
printf(" ");
for (i = 0; i < COLS; i++) {
printf("%d ", i);
}
printf("\n");
printf(" +");
for (i = 0; i < COLS; i++) {
printf("- ");
}
printf("\n");
for (i = 0; i < ROWS; i++) {
printf("%d | ", i);
for (j = 0; j < COLS; j++) {
if (mask[i][j] == 0) {
printf(". ");
} else if (mask[i][j] == 1) {
printf("%d ", mines[i][j]);
} else if (mask[i][j] == 2) {
printf("* ");
}
}
printf("\n");
}
}
// 计算指定坐标周围的雷数
int count_mines(int row, int col) {
int i, j;
int count = 0;
for (i = row - 1; i <= row + 1; i++) {
for (j = col - 1; j <= col + 1; j++) {
if (i >= 0 && i < ROWS && j >= 0 && j < COLS) {
if (mines[i][j] == 1) {
count++;
}
}
}
}
return count;
}
// 打开指定坐标的方块
void open_block(int row, int col) {
if (mines[row][col] == 1) {
// 点到雷,游戏结束
printf("Game over!\n");
mask[row][col] = 2;
display();
exit(0);
}
int count = count_mines(row, col);
mask[row][col] = 1;
if (count == 0) {
// 如果周围没有雷,递归打开周围的方块
int i, j;
for (i = row - 1; i <= row + 1; i++) {
for (j = col - 1; j <= col + 1; j++) {
if (i >= 0 && i < ROWS && j >= 0 && j < COLS) {
if (mask[i][j] == 0) {
open_block(i, j);
}
}
}
}
}
}
// 判断是否胜利
int check_win() {
int i, j;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
if (mines[i][j] == 0 && mask[i][j] == 0) {
return 0;
}
}
}
return 1;
}
int main() {
srand((unsigned int) time(NULL));
init_mines();
int row, col;
while (1) {
display();
printf("Enter row and col: ");
scanf("%d%d", &row, &col);
open_block(row, col);
if (check_win()) {
printf("You win!\n");
display();
exit(0);
}
}
return 0;
}
```
注意: 该代码只是一个示例,可能存在一些不足之处,建议仅供参考。