游戏规则:
扫雷游戏的核心是玩家需要点击格子,避开地雷。
每个格子可能是地雷,也可能是数字(表示周围地雷的数量)。
玩家通过推理,标记所有地雷的位置即可获胜。
数据结构:
使用二维数组表示游戏棋盘。
一个数组存储地雷的位置(mineMap
)。
另一个数组存储玩家可见的棋盘状态(playerMap
)。
游戏流程:
初始化棋盘:随机布置地雷,并计算每个格子周围的地雷数量。
玩家输入坐标,检查是否踩雷。
更新玩家可见的棋盘状态。
判断游戏是否胜利或失败。
自定义难度:
通过调整棋盘大小和地雷数量来实现不同难度.
以下为本作者原创代码:
//头文件
#include
#include
#include
#include
#define ROW 5
#define COL 5
#define ROWS ROW+2
#define COLS COL+2
#define count 5
void Initboard(char board[ROWS][COLS], int rows, int cols, char set);
void Displayboard(char board[ROWS][COLS], int row, int col);
void Mineset(char board[ROWS][COLS], int row, int col);
void Minefinding(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
int Minechoosecount(char board[ROWS][COLS], int row, int col);
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void menu()
{
printf("****************************************\n");
printf("***************1 . play **************\n");
printf("***************0 . exit **************\n");
printf("****************************************\n");
}
void game()
{
char mine [ROWS] [COLS];//save the data of mine setting
char show [ROWS] [COLS];//display player's choice of mine
Initboard(mine, ROWS, COLS, '0');//initiate the original MINE board
Initboard(show, ROWS, COLS, '*');//initiate the original SHOW board
Mineset(mine, ROW, COL);
//show the board to the player
//Displayboard(mine, ROW, COL);
Displayboard(show, ROW, COL);
Minefinding(mine, show, ROW, COL);
}
//源文件
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("please choose to play or exit:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("exiting the game.\n");
break;
default:
printf("an illegal input.\n");
break;
}
} while (input);
return 0;
}
以下为deepseek大模型生成的代码,供广大读者借鉴思考:
//头文件
#ifndef MINESWEEPER_H
#define MINESWEEPER_H
#include
#include
#include
// 定义棋盘大小和地雷数量
#define ROWS 10
#define COLS 10
#define MINES 15
// 函数声明
// 初始化棋盘
void initBoard();
// 计算某个格子周围的地雷数量
int countMines(int x, int y);
// 打印玩家可见的棋盘
void printPlayerMap();
// 打开格子
int openCell(int x, int y);
// 检查是否胜利
int checkWin();
#endif // MINESWEEPER_H
//源文件
#include "minesweeper.h"
// 全局变量
int mineMap[ROWS][COLS]; // 地雷分布图
char playerMap[ROWS][COLS]; // 玩家可见的棋盘
// 初始化棋盘
void initBoard() {
// 初始化玩家棋盘
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
playerMap[i][j] = '-'; // 初始状态为未打开
mineMap[i][j] = 0; // 初始状态为无地雷
}
}
// 随机布置地雷
srand(time(NULL));
int minesPlaced = 0;
while (minesPlaced < MINES) {
int x = rand() % ROWS;
int y = rand() % COLS;
if (mineMap[x][y] == 0) {
mineMap[x][y] = 1; // 1表示地雷
minesPlaced++;
}
}
}
// 计算某个格子周围的地雷数量
int countMines(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 < ROWS && j >= 0 && j < COLS && mineMap[i][j] == 1) {
count++;
}
}
}
return count;
}
// 打印玩家可见的棋盘
void printPlayerMap() {
printf(" ");
for (int j = 0; j < COLS; j++) {
printf("%d ", j);
}
printf("\n");
for (int i = 0; i < ROWS; i++) {
printf("%d ", i);
for (int j = 0; j < COLS; j++) {
printf("%c ", playerMap[i][j]);
}
printf("\n");
}
}
// 打开格子
int openCell(int x, int y) {
if (mineMap[x][y] == 1) {
return -1; // 踩到地雷,游戏结束
}
int minesAround = countMines(x, y);
playerMap[x][y] = '0' + minesAround; // 显示周围地雷数量
return 1; // 成功打开
}
// 检查是否胜利
int checkWin() {
int unopened = 0;
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (playerMap[i][j] == '-' && mineMap[i][j] == 0) {
unopened++;
}
}
}
return unopened == 0; // 所有非地雷格子都被打开
}
// 主函数
int main() {
initBoard();
printf("欢迎来到扫雷游戏!\n");
printf("输入坐标 (行 列) 来打开格子。\n");
while (1) {
printPlayerMap();
int x, y;
printf("请输入坐标 (行 列): ");
scanf("%d %d", &x, &y);
if (x < 0 || x >= ROWS || y < 0 || y >= COLS) {
printf("坐标无效,请重新输入!\n");
continue;
}
int result = openCell(x, y);
if (result == -1) {
printf("你踩到地雷了!游戏结束!\n");
break;
}
if (checkWin()) {
printf("恭喜你,扫雷成功!\n");
break;
}
}
return 0;
}