news 2026/4/23 17:40:09

#扫雷游戏

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
#扫雷游戏

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 定义雷区大小(可修改)
#define ROWS 9
#define COLS 9
#define ROWS_ALL ROWS + 2 // 实际数组开更大,方便边界判断
#define COLS_ALL COLS + 2
#define MINE_COUNT 10 // 雷的数量


// 函数声明
void menu();
void game();
void InitBoard(char board[ROWS_ALL][COLS_ALL], int rows, int cols, char set);
void SetMine(char mine[ROWS_ALL][COLS_ALL], int rows, int cols);
void ShowBoard(char board[ROWS_ALL][COLS_ALL], int rows, int cols);
int CountMine(char mine[ROWS_ALL][COLS_ALL], int x, int y);
void FindMine(char mine[ROWS_ALL][COLS_ALL], char show[ROWS_ALL][COLS_ALL], int rows, int cols);


// 菜单函数
void menu() {
printf("*************************\n");
printf("***** 1. play *****\n");
printf("***** 0. exit *****\n");
printf("*************************\n");
}


// 初始化棋盘(mine数组初始化为'0',show数组初始化为'*')
void InitBoard(char board[ROWS_ALL][COLS_ALL], int rows, int cols, char set) {
int i, j;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
board[i][j] = set;
}
}
}


// 布置雷(随机生成MINE_COUNT个雷,存放在mine数组中)
void SetMine(char mine[ROWS_ALL][COLS_ALL], int rows, int cols) {
int count = MINE_COUNT;
srand((unsigned int)time(NULL)); // 随机数种子

while (count > 0) {
int x = rand() % rows + 1; // 生成1~rows的随机行
int y = rand() % cols + 1; // 生成1~cols的随机列

if (mine[x][y] == '0') { // 确保当前位置没有雷
mine[x][y] = '1'; // '1'代表雷
count--;
}
}
}


// 打印棋盘(只打印有效区域:1~ROWS行、1~COLS列)
void ShowBoard(char board[ROWS_ALL][COLS_ALL], int rows, int cols) {
int i, j;
// 打印列号
printf(" ");
for (i = 1; i <= cols; i++) {
printf("%d ", i);
}
printf("\n");

// 打印棋盘内容
for (i = 1; i <= rows; i++) {
printf("%d ", i); // 打印行号
for (j = 1; j <= cols; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}


// 统计坐标(x,y)周围的雷数
int CountMine(char mine[ROWS_ALL][COLS_ALL], int x, int y) {
// 周围8个格子的和('1'-'0'=1,'0'-'0'=0)
return (mine[x-1][y-1] + mine[x-1][y] + mine[x-1][y+1]
+ mine[x][y-1] + mine[x][y+1]
+ mine[x+1][y-1] + mine[x+1][y] + mine[x+1][y+1]) - 8 * '0';
}


// 扫雷逻辑(玩家输入坐标,判断是否踩雷/统计周围雷数)
void FindMine(char mine[ROWS_ALL][COLS_ALL], char show[ROWS_ALL][COLS_ALL], int rows, int cols) {
int x, y;
int win = 0; // 已排查的非雷格子数

while (win < rows * cols - MINE_COUNT) { // 非雷格子全部排查完则胜利
printf("请输入要排查的坐标(行 列): ");
scanf("%d %d", &x, &y);

// 坐标合法性判断
if (x >= 1 && x <= rows && y >= 1 && y <= cols) {
if (mine[x][y] == '1') { // 踩雷
printf("很遗憾,你被炸死了!\n");
ShowBoard(mine, rows, cols); // 显示所有雷的位置
break;
} else if (show[x][y] == '*') { // 该位置未被排查过
int count = CountMine(mine, x, y); // 统计周围雷数
show[x][y] = count + '0'; // 转换为字符存入show数组
ShowBoard(show, rows, cols);
win++;
} else {
printf("该坐标已被排查,请重新输入!\n");
}
} else {
printf("坐标非法,请重新输入!\n");
}
}

if (win == rows * cols - MINE_COUNT) {
printf("恭喜你,扫雷成功!\n");
ShowBoard(mine, rows, cols);
}
}


// 游戏核心逻辑
void game() {
// 定义两个二维数组:mine存雷信息('1'是雷,'0'是非雷);show存玩家看到的信息(初始为'*')
char mine[ROWS_ALL][COLS_ALL] = {0};
char show[ROWS_ALL][COLS_ALL] = {0};

// 初始化棋盘
InitBoard(mine, ROWS_ALL, COLS_ALL, '0');
InitBoard(show, ROWS_ALL, COLS_ALL, '*');

// 布置雷
SetMine(mine, ROWS, COLS);
// 测试:打印雷的位置(实际游戏可注释)
// ShowBoard(mine, ROWS, COLS);

// 显示初始棋盘
ShowBoard(show, ROWS, COLS);

// 扫雷
FindMine(mine, show, ROWS, COLS);
}


// 主函数
int main() {
int input = 0;
do {
menu(); // 打印菜单
printf("请选择: ");
scanf("%d", &input);

switch (input) {
case 1:
printf("扫雷游戏开始!\n");
game(); // 进入游戏
break;
case 0:
printf("退出游戏!\n");
break;
default:
printf("选择错误,请重新输入!\n");
break;
}
} while (input != 0); // 选择0则退出循环

return 0;
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:52:53

小程序毕设选题推荐:基于微信小程序的网红餐饮店订餐预约系统的设计与实现基于springboot+微信小程序的餐厅预约系统设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/23 12:57:36

计算机小程序毕设实战-基于springboot+微信小程序的在线复习小程序基于SpringBoot+微信小程序考试刷题系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/22 17:14:33

WordPress处理站群平台pdf文档解析需求

要求&#xff1a;开源&#xff0c;免费&#xff0c;技术支持 博客&#xff1a;WordPress 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 功能&#xff1a;导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台&#xff1a;Window…

作者头像 李华
网站建设 2026/4/23 15:39:27

PocoEmit遥遥领先于AutoMapper之打通充血模型的任督二脉

一、充血模型和失血模型1. 充血模型的优势充血模型更加OOP充血模型代码可读性更好1.1 充血模型伪代码var messageDto controller.ReadDto();var message messageDto.ToEntity();message.Save();1.2 失血模型伪代码var messageDto controller.ReadDto();var message message…

作者头像 李华
网站建设 2026/4/23 13:09:33

基于改进蛇优化算法(GOSO/ISO)优化BP神经网络的数据回归预测探索

基于改进蛇优化算法(GOSO/ISO)优化BP神经网络的数据回归预测(GOSO/ISO-BP) 蛇优化算法SO是2022年提出的新算法&#xff0c;性能优异&#xff0c;目前应用较少&#xff0c;改进蛇优化算法GOSO/ISO应用更少&#xff0c;适合PAPER 改进点1为在初始化种群引入混沌映射&#xff0c;本…

作者头像 李华
网站建设 2026/4/23 14:48:22

数据结构总结笔记

1 数据结构三要素是什么&#xff1f;逻辑结构包括什么&#xff1f;存储结构包括什么&#xff1f; 数据结构三要素&#xff1a;逻辑结构、存储结构、数据运算。 逻辑结构包括线性结构和非线性结构&#xff1a; 线性结构&#xff1a;线性表、栈、队列&#xff1b;非线性结构&a…

作者头像 李华