用c语言写一个扫雷小游戏 代码
时间: 2023-12-29 19:58:19 浏览: 80
以下是一个简单的扫雷游戏的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 10
#define COLS 10
#define MINES 10
int main() {
int board[ROWS][COLS] = {0}; // 游戏棋盘
int displayBoard[ROWS][COLS] = {0}; // 显示棋盘,存储玩家已经翻开的方块
int row, col, minesLeft, gameOver;
int i, j;
// 随机生成地雷
srand(time(NULL)); // 初始化随机数种子
minesLeft = MINES;
while (minesLeft > 0) {
row = rand() % ROWS;
col = rand() % COLS;
if (board[row][col] == 0) {
board[row][col] = 1;
minesLeft--;
}
}
gameOver = 0;
while (!gameOver) {
// 显示游戏棋盘
printf(" ");
for (i = 0; i < COLS; i++) {
printf("%d ", i);
}
printf("\n");
for (i = 0; i < ROWS; i++) {
printf("%d ", i);
for (j = 0; j < COLS; j++) {
if (displayBoard[i][j] == 0) {
printf(". ");
} else if (displayBoard[i][j] == 1) {
if (board[i][j] == 1) {
printf("* ");
} else {
printf("%d ", countMines(board, i, j));
}
}
}
printf("\n");
}
printf("Mines left: %d\n", minesLeft);
// 玩家选择翻开哪个方块
printf("Enter row and column: ");
scanf("%d %d", &row, &col);
// 检查翻开的方块是否合法
if (row < 0 || row >= ROWS || col < 0 || col >= COLS) {
printf("Invalid input!\n");
} else if (displayBoard[row][col] == 1) {
printf("Already flipped!\n");
} else {
// 翻开方块
displayBoard[row][col] = 1;
if (board[row][col] == 1) {
printf("Game over! You hit a mine!\n");
gameOver = 1;
} else {
// 如果翻开的方块周围没有地雷,自动翻开周围的方块
if (countMines(board, row, col) == 0) {
autoFlip(displayBoard, board, row, col);
}
// 检查是否已经胜利
if (countFlipped(displayBoard) == ROWS * COLS - MINES) {
printf("Congratulations! You win!\n");
gameOver = 1;
}
}
}
}
return 0;
}
// 计算一个方块周围的地雷数量
int countMines(int board[ROWS][COLS], int row, int col) {
int 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 && board[i][j] == 1) {
count++;
}
}
}
return count;
}
// 自动翻开一个方块周围的方块
void autoFlip(int displayBoard[ROWS][COLS], int board[ROWS][COLS], int row, int col) {
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 && displayBoard[i][j] == 0) {
displayBoard[i][j] = 1;
if (board[i][j] == 0) {
autoFlip(displayBoard, board, i, j);
}
}
}
}
}
// 计算已翻开的方块数量
int countFlipped(int displayBoard[ROWS][COLS]) {
int count = 0;
int i, j;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
if (displayBoard[i][j] == 1) {
count++;
}
}
}
return count;
}
```
这个扫雷游戏使用10x10的棋盘,包含10个地雷。玩家可以选择翻开棋盘上的某个方块,如果翻开的方块是地雷,则游戏结束;否则,游戏继续进行。如果翻开的方块周围没有地雷,则自动翻开周围的方块。当所有非地雷方块都被翻开时,玩家获胜。
阅读全文