使用c语言写个扫雷系统
时间: 2024-01-31 16:02:43 浏览: 121
好的,下面是使用C语言写的扫雷系统的简单代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 10 // 行数
#define COLS 10 // 列数
#define MINES 15 // 地雷数
void init_board(char board[][COLS], int rows) {
// 初始化棋盘
int i, j;
for (i = 0; i < rows; i++) {
for (j = 0; j < COLS; j++) {
board[i][j] = '*';
}
}
}
void print_board(char board[][COLS], int rows) {
// 打印棋盘
int i, j;
printf(" ");
for (i = 0; i < COLS; i++) {
printf("%d ", i + 1);
}
printf("\n");
for (i = 0; i < rows; i++) {
printf("%d ", i + 1);
for (j = 0; j < COLS; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
void set_mines(char board[][COLS], int rows, int mines) {
// 随机设置地雷
int count = 0;
while (count < mines) {
int x = rand() % rows;
int y = rand() % COLS;
if (board[x][y] == '*') {
board[x][y] = 'X';
count++;
}
}
}
int count_mines(char board[][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] == 'X') {
count++;
}
}
}
return count;
}
void update_board(char board[][COLS], int row, int col) {
// 更新棋盘
int count = count_mines(board, row, col);
if (count == 0) {
board[row][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 && board[i][j] == '*') {
update_board(board, i, j);
}
}
}
} else {
board[row][col] = count + '0';
}
}
int main() {
srand((unsigned int)time(NULL)); // 随机数种子
char board[ROWS][COLS];
int mines = MINES;
int x, y;
init_board(board, ROWS);
set_mines(board, ROWS, mines);
print_board(board, ROWS);
while (1) {
printf("请输入坐标(x, y):");
scanf("%d %d", &x, &y);
if (x < 1 || x > ROWS || y < 1 || y > COLS) {
printf("坐标输入错误!\n");
continue;
}
if (board[x-1][y-1] == 'X') {
printf("你踩到地雷了!游戏结束!\n");
break;
} else {
update_board(board, x-1, y-1);
print_board(board, ROWS);
}
}
return 0;
}
```
这个代码示例中,使用了二维字符数组 `board` 来存储棋盘,其中 `*` 表示未翻开的格子,`X` 表示地雷,数字表示周围地雷数量,空格表示周围没有地雷。使用了函数来封装不同的功能,使代码更加模块化。在 `main` 函数中,使用 `while` 循环来不断读入玩家输入的坐标,并根据坐标来更新棋盘。当玩家踩到地雷时,游戏结束。
阅读全文