用c语言写一个扫雷游戏
时间: 2023-11-17 14:04:51 浏览: 91
好的,以下是使用C语言实现的扫雷游戏的基本框架:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 10
#define COLS 10
#define MINES 10
void init_board(char board[ROWS][COLS], int rows, int cols, char ch);
void set_mine(char board[ROWS][COLS], int rows, int cols, int mines);
void display_board(char board[ROWS][COLS], int rows, int cols);
void play_game(char mine[ROWS][COLS], char show[ROWS][COLS], int rows, int cols);
int main()
{
char mine[ROWS][COLS]; // 存储雷的位置
char show[ROWS][COLS]; // 存储显示的内容
int rows = ROWS, cols = COLS, mines = MINES;
char ch;
printf("请输入棋盘的大小(行和列,用空格隔开): ");
scanf("%d %d", &rows, &cols);
printf("请输入雷的数量: ");
scanf("%d", &mines);
// 初始化棋盘
init_board(show, rows, cols, '*');
init_board(mine, rows, cols, '0');
// 随机设置雷
set_mine(mine, rows, cols, mines);
// 显示棋盘
display_board(show, rows, cols);
// 开始游戏
play_game(mine, show, rows, cols);
return 0;
}
void init_board(char board[ROWS][COLS], int rows, int cols, char ch)
{
int i, j;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
board[i][j] = ch;
}
}
}
void set_mine(char board[ROWS][COLS], int rows, int cols, int mines)
{
int i, j, count = 0;
srand((unsigned int)time(NULL));
while (count < mines) {
i = rand() % rows;
j = rand() % cols;
if (board[i][j] == '0') {
board[i][j] = 'M';
count++;
}
}
}
void display_board(char board[ROWS][COLS], int rows, int cols)
{
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++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
void play_game(char mine[ROWS][COLS], char show[ROWS][COLS], int rows, int cols)
{
int i, j, x, y, count = 0;
while (count < rows * cols - MINES) {
printf("请输入要翻开的格子的坐标(行和列,用空格隔开): ");
scanf("%d %d", &x, &y);
if (mine[x][y] == 'M') {
printf("很遗憾,你踩到了地雷,游戏结束!\n");
display_board(mine, rows, cols);
break;
} else {
if (show[x][y] != '*') {
printf("此格已经翻开,请重新输入坐标!\n");
continue;
} else {
count++;
if (mine[x][y] == '0') {
// 翻开周围8个格子
for (i = x - 1; i <= x + 1; i++) {
for (j = y - 1; j <= y + 1; j++) {
if (i >= 0 && i < rows && j >= 0 && j < cols && mine[i][j] != 'M') {
show[i][j] = mine[i][j];
count++;
}
}
}
} else {
show[x][y] = mine[x][y];
}
display_board(show, rows, cols);
if (count == rows * cols - MINES) {
printf("恭喜你,你赢了!\n");
}
}
}
}
}
```
这个程序采用了二维数组来存储棋盘,其中 `mine` 数组存储雷的位置,`show` 数组存储显示的内容。程序首先要求用户输入棋盘大小和雷的数量,然后初始化棋盘,随机设置雷,显示棋盘,最后开始游戏。在游戏的过程中,用户需要输入要翻开的格子的坐标,如果翻开的是雷,游戏结束,否则翻开周围的格子,直到所有非雷的格子都被翻开为止。
阅读全文