一、扫雷游戏介绍扫雷Minesweeper是一款经典的逻辑推理游戏。虽然规则简单但非常考验逻辑判断和一定的运气。以下是扫雷的核心规则与基本技巧1. 游戏目标在一个隐藏的网格中找出所有没有地雷的格子并避开所有地雷。一旦点开地雷游戏直接失败当所有安全格子都被点开或所有地雷都被正确标记时游戏胜利。2. 核心数字规则最重要当你点开一个安全的格子时上面会显示一个数字1-8。这个数字代表以该格子为中心周围紧挨着的 8 个格子中一共埋藏了多少颗地雷。例如显示 1周围 8 个格子中只有 1 颗地雷。显示 3周围 8 个格子中有 3 颗地雷。显示 0通常不显示数字直接展开一片空白周围 8 个格子全都没有地雷。3. 玩家操作左键点击翻开格子。如果点到地雷则游戏结束如果是数字或空白则继续。由于只是入门级的扫雷游戏教程这里不使用鼠标点击而是使用输入坐标为代替。二、前期代码#define _CRT_SECURE_NO_WARNINGS 1 #include iostream #include stdio.h #include game.h void menu() { printf(********扫雷游戏*********\n); printf(*******1、开始游戏*******\n); printf(*******0、退出游戏*******\n); } void game() { char show[ROWS][COLS] { 0 }; char mine[ROWS][COLS] {0}; initboard(mine,ROWS,COLS,0); initboard(show, ROWS, COLS, *); displayboard(show, ROW, COL); setmine(mine, ROW, COL); //排雷 finemine(mine,show,ROW,COL); } void test() { srand((unsigned int)time(NULL)); int input0; do { menu(); printf(请选择\n); scanf(%d, input); switch (input) { case 1: printf(---------开始游戏---------\n); game(); break; case 0: printf(退出游戏\n); break; default: printf(选择错误); printf(重新选择\n); break; } } while (input); } int main() { test(); return 0; }在test.c的源文件中实现目录及各种函数调用功能。三、核心内容1、创建棋盘这里我们考虑使用两个数组一个数组存放雷与非雷另一个存放排查出的雷的信息。原因防止冲突区别设置雷为1和统计雷个数为1做区分。如果棋盘的大小是9*9数组的大小就给11*11。因为若查找的地方没有地雷需要显示周围八格中地雷的数量而在最下方9,7的位置周围不足八格这样就很容易出错所以我们需要在周围再加上一圈格子并且这一圈不存放地雷。#pragma once #define ROW 9 #define COL 9 #define ROWS ROW2 #define COLS COL2char show[ROWS][COLS] { 0 }; char mine[ROWS][COLS] {0};实现效果2、棋盘初始化定义一个initbroad的函数void initboard(char board[ROWS][COLS], int rows, int cols,char set) { for (int i 0; i rows; i) { for (int j 0; j cols; j) { board[i][j] set; } } }将创建的两个棋盘分别初始化initboard(mine,ROWS,COLS,0); initboard(show, ROWS, COLS, *);效果展示3、制作一个展示棋盘的功能定义一个函数displaybroadvoid displayboard(char board[ROWS][COLS], int row, int col) { for (int i 0; i row; i) { printf(%d , i); } printf(\n); for (int i 1; i row; i) { printf(%d , i); for (int j 1; j col; j) { printf(%c , board[i][j]); } printf(\n); } }4、放置地雷到棋盘中制作一个放置地雷的函数void setmine(char board[ROWS][COLS], int row, int col) { int count 10; while (count) { int x rand() % row 1; int y rand() % col 1; if (board[x][y] 0) { board[x][y] 1; count--; } } }一共放置十个地雷。setmine(mine, ROW, COL);效果展示没有雷的都是0有雷的就变成1。5、排雷过程static int get_mine_count(char mine[ROWS][COLS],int x,int y) { int count (mine[x - 1][y] mine[x - 1][y - 1] mine[x][y - 1] mine[x 1][y - 1] mine[x 1][y] mine[x 1][y 1] mine[x][y 1] mine[x-1][y 1]) - 8 * 0; return count; } void finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { int x0, y0; int win 0; while (wincol*row-10) { printf(请输入你要排查的坐标\n); scanf(%d%d, x, y); if (x 1 x row y 1 y col) { if (mine[x][y] 1) { printf(很遗憾,你被炸死了\n); displayboard(mine, ROW, COL); break; } else { int count get_mine_count(mine, x, y); show[x][y] count 0; displayboard(show, ROW, COL); win; } } else { printf(坐标非法请重新输入\n); } } if (win col * row - 10) { printf(恭喜你排雷成功); displayboard(mine, ROW, COL); } }如果输入不是雷就会显示周围的雷数此效果展示中把雷在哪都显示出来了在全部源码中我不会打印雷在哪的大家可以试玩哟