|
发表于 2025-6-5 21:25:25
|
显示全部楼层
扫雷游戏C语言源码分享
你好!这是一个基础的控制台扫雷实现,适合初学者理解数组、循环和函数调用。代码包含雷区初始化、地雷布置、数字计算和游戏主循环,结构清晰易读:
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define ROW 9
- #define COL 9
- #define MINES 10
- // 初始化雷区(0为空,1为雷)
- void initBoard(int board[ROW][COL]) {
- for (int i = 0; i < ROW; i++) {
- for (int j = 0; j < COL; j++) {
- board[i][j] = 0;
- }
- }
- }
- // 随机布置地雷
- void placeMines(int board[ROW][COL]) {
- int count = 0;
- while (count < MINES) {
- int x = rand() % ROW;
- int y = rand() % COL;
- if (board[x][y] == 0) {
- board[x][y] = 1; // 1代表地雷
- count++;
- }
- }
- }
- // 计算格子周围地雷数
- int countMines(int board[ROW][COL], int x, int y) {
- int count = 0;
- for (int i = x - 1; i <= x + 1; i++) {
- for (int j = y - 1; j <= y + 1; j++) {
- if (i >= 0 && i < ROW && j >= 0 && j < COL) {
- count += board[i][j];
- }
- }
- }
- return count;
- }
- // 打印游戏界面
- void printBoard(int showMines) {
- printf(" ");
- for (int i = 0; i < COL; i++) printf("%d ", i);
- printf("\n -------------------\n");
-
- for (int i = 0; i < ROW; i++) {
- printf("%d |", i);
- for (int j = 0; j < COL; j++) {
- if (showMines && board[i][j] == 1) printf("* ");
- else if (visible[i][j]) printf("%d ", countMines(board, i, j));
- else printf(". ");
- }
- printf("\n");
- }
- }
- int main() {
- srand(time(NULL));
- int board[ROW][COL];
- int visible[ROW][COL] = {0}; // 记录格子是否被翻开
-
- initBoard(board);
- placeMines(board);
-
- int gameOver = 0;
- while (!gameOver) {
- printBoard(0); // 不显示地雷
-
- int x, y;
- printf("输入坐标 (行 列): ");
- scanf("%d %d", &x, &y);
-
- if (x < 0 || x >= ROW || y < 0 || y >= COL) {
- printf("坐标无效!\n");
- continue;
- }
-
- if (board[x][y] == 1) {
- printf("踩雷了!游戏结束\n");
- printBoard(1); // 显示地雷位置
- gameOver = 1;
- } else {
- visible[x][y] = 1; // 标记为已翻开
- printf("安全!周围有%d个雷\n", countMines(board, x, y));
- }
- }
- return 0;
- }
复制代码
学习要点:
- 使用二维数组存储雷区状态
- 随机数生成实现地雷随机布置
- 双层循环遍历周围8个格子计算地雷数
- 通过 visible 数组控制格子显示状态
扩展建议:
1. 添加递归翻开空白区域功能
2. 增加胜利条件(所有非雷格子被翻开)
3. 用 getchar() 实现坐标输入防错机制
遇到问题欢迎回帖讨论!源码可直接复制到Dev-C++等工具编译运行。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|