news 2026/5/1 7:54:52

C语言实现扫雷游戏基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言实现扫雷游戏基础

一、扫雷游戏分析和设计

1.1 扫雷游戏的功能说明

1. 运行载体:使用控制台实现经典扫雷游戏。

2. 游戏流程:通过菜单选择继续玩游戏或退出游戏。

3. 棋盘规格:9*9的格子棋盘。

4. 雷的设置:默认随机布置10个雷。

5. 排雷规则:

◦ 排查位置非雷:显示该位置周围雷的数量。

◦ 排查位置是雷:游戏结束,提示被炸死。

◦ 排雷成功:找出除10个雷外的所有非雷位置,游戏结束。

1.2 游戏的分析和设计

1.2.1 数据结构的分析

1. 基础存储需求:需要存储雷的布置信息和排雷的结果信息,初始设想用9*9数组,雷的位置存1,无雷存0。

2. 越界问题解决:排查棋盘边缘位置时,统计周围雷数会出现坐标越界,因此将数组扩展为1111,雷仅布置在中间99区域,外围不布置雷。

3. 数组分工设计:

◦ mine数组:专门存放雷的布置信息,初始化为字符'0',有雷位置改为'1'。

◦ show数组:专门存放排雷的结果信息,初始化为字符'*',排查后显示周围雷数。

◦ 数组定义:char mine[11][11] = {0};、char show[11][11] = {0};。

1.2.2 文件结构设计

采用多文件模式拆分代码,明确功能分工:

1. test.c:编写游戏的测试逻辑(菜单展示、游戏流程控制)。

2. game.c:实现游戏中所有函数的具体功能(棋盘初始化、布雷、排雷等)。

3. game.h:存放游戏所需的数据类型定义和函数声明。

二、扫雷游戏的代码实现

2.1 头文件game.h

#pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> // 宏定义 #define EASY_COUNT 10 // 简单难度雷的数量 #define ROW 9 // 棋盘实际行数 #define COL 9 // 棋盘实际列数 #define ROWS ROW+2 // 扩展后数组行数 #define COLS COL+2 // 扩展后数组列数 // 函数声明 // 初始化棋盘 void InitBoard(char board[ROWS][COLS], int rows, int cols, char set); // 打印棋盘 void DisplayBoard(char board[ROWS][COLS], int row, int col); // 布置雷 void SetMine(char board[ROWS][COLS], int row, int col); // 排查雷 void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

2.2 功能实现文件game.c

#include "game.h" // 初始化棋盘:将数组每个位置设为指定字符set void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) { int i = 0; for (i = 0; i < rows; i++) { int j = 0; for (j = 0; j < cols; j++) { board[i][j] = set; } } } // 打印棋盘:展示9*9的游戏区域,包含行列号 void DisplayBoard(char board[ROWS][COLS], int row, int col) { int i = 0; printf("------扫雷游戏------\n"); // 打印列号 for (i = 0; i <= col; i++) { printf("%d ", i); } printf("\n"); // 打印棋盘内容 for (i = 1; i <= row; i++) { printf("%d ", i); // 打印行号 int j = 0; for (j = 1; j <= col; j++) { printf("%c ", board[i][j]); } printf("\n"); } } // 布置雷:随机在9*9区域生成10个雷 void SetMine(char board[ROWS][COLS], int row, int col) { // 布置EASY_COUNT个雷 // 生成随机坐标布置雷 int count = EASY_COUNT; while (count) { int x = rand() % row + 1; int y = rand() % col + 1; if (board[x][y] == '0') { board[x][y] = '1'; count--; } } } // 统计指定坐标周围雷的数量 int GetMineCount(char mine[ROWS][COLS], int x, int y) { return (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'); } // 排查雷:处理玩家输入,判断是否踩雷、统计雷数、判断胜利 void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { int x = 0; int y = 0; int win = 0; while (win < row * col - EASY_COUNT) { printf("请输入要排查的坐标:>"); 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 = GetMineCount(mine, x, y); show[x][y] = count + '0'; DisplayBoard(show, ROW, COL); win++; } } else { printf("坐标非法,重新输入\n"); } } if (win == row * col - EASY_COUNT) { printf("恭喜你,排雷成功\n"); DisplayBoard(mine, ROW, COL); } }

2.3 测试文件test.c

#include "game.h" // 打印游戏菜单 void menu() { printf("********************\n"); printf("***** 1. play *****\n"); printf("***** 0. exit *****\n"); printf("********************\n"); } // 游戏核心逻辑 void game() { char mine[ROWS][COLS]; // 存放雷的信息 char show[ROWS][COLS]; // 存放排查出的雷的个数信息 // 初始化棋盘 // mine数组初始化为'0' InitBoard(mine, ROWS, COLS, '0'); // show数组初始化为'*' InitBoard(show, ROWS, COLS, '*'); // 打印棋盘(可隐藏mine棋盘,仅展示show) DisplayBoard(show, ROW, COL); // 布置雷 SetMine(mine, ROW, COL); // 排查雷 FindMine(mine, show, ROW, COL); } int main() { int input = 0; // 设置随机数种子 srand((unsigned int)time(NULL)); do { menu(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏\n"); break; default: printf("选择错误,重新选择\n"); break; } } while (input); return 0; }

三、扫雷游戏的扩展

1. 难度选择:

◦ 简单:9*9棋盘,10个雷(基础版)。

◦ 中等:16*16棋盘,40个雷。

◦ 困难:30*16棋盘,99个雷。

2. 功能拓展:

◦ 无雷区域自动展开:排查位置非雷且周围无雷时,展开周围一片区域。

◦ 雷标记功能:支持玩家标记疑似雷的位置。

◦ 计时功能:添加排雷时间显示,记录游戏耗时。

在线扫雷参考:http://www.minesweeper.cn/

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

谷歌浏览器插件辅助调试Qwen-Image-Edit-2509 API请求

谷歌浏览器插件辅助调试 Qwen-Image-Edit-2509 API 请求 在电商运营、社交媒体内容批量生成等高频视觉更新场景中&#xff0c;AI驱动的图像编辑正迅速从“锦上添花”变为“刚需”。传统依赖Photoshop或Canva的操作流程已难以应对每日成百上千张素材的修改需求——比如更换背景、…

作者头像 李华
网站建设 2026/4/29 20:00:43

从零开始训练?其实你只需要微调Qwen-Image-Edit-2509即可

从零开始训练&#xff1f;其实你只需要微调 Qwen-Image-Edit-2509 即可 在电商运营的深夜&#xff0c;设计师正为上百张商品图逐一替换促销标签而焦头烂额&#xff1b;社交媒体团队为了测试五种不同的海报风格&#xff0c;连续三天通宵改图&#xff1b;跨国品牌每次上线新市场&…

作者头像 李华
网站建设 2026/4/20 15:57:07

如何在Ollama中部署Qwen3-14B模型?详细步骤说明

如何在 Ollama 中部署 Qwen3-14B 模型&#xff1f;完整实践指南 在企业对数据隐私和响应效率要求日益提升的今天&#xff0c;将大语言模型&#xff08;LLM&#xff09;本地化部署已不再是“可选项”&#xff0c;而是许多业务场景下的“必选项”。尤其是在金融、法律、医疗等敏感…

作者头像 李华
网站建设 2026/5/1 1:42:56

大语言模型推理极致优化:TensorRT-LLM高性能推理实践指南

大语言模型推理极致优化&#xff1a;TensorRT-LLM技术详解与云上实践指南&#xff0c;系统性地介绍了如何使用 TensorRT-LLM 优化大语言模型推理性能。 一、背景与挑战 大语言模型&#xff08;LLM&#xff09; 是基于海量数据预训练的超大规模深度学习模型&#xff0c;其基础是…

作者头像 李华
网站建设 2026/4/19 18:21:12

C#实现HC32L130 CRC16校验

要在 C# 中实现与小华 HC32L130 MCU 匹配的 CRC16 校验&#xff0c;需先明确HC32L130 的 CRC16 参数规则&#xff0c;再基于该规则编写 C# 代码。一、HC32L130 的 CRC16 参数解析从你提供的文档和 MCU 代码可提取核心参数&#xff1a;参数项具体值 / 规则多项式\(x^{16}x^{12}x…

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

告别局域网!SimpleMindMap+cpolar 让思维导图协作更自由

文章目录 前言1. Docker一键部署思维导图2. 本地访问测试3. Linux安装Cpolar4. 配置公网地址5. 远程访问思维导图6. 固定Cpolar公网地址7. 固定地址访问 前言 SimpleMindMap 是一款可以自己部署的思维导图工具&#xff0c;能用来画项目计划、产品架构、会议纪要等&#xff0c;…

作者头像 李华