news 2026/7/1 8:58:03

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/7/1 14:39:58

Layui-Vue:构建企业级应用的终极Vue组件解决方案

Layui-Vue是一个基于Vue 3.0构建的企业级UI组件库&#xff0c;继承了Layui经典的设计理念&#xff0c;为开发者提供80开箱即用的高质量组件&#xff0c;覆盖后台管理系统全流程需求。通过精心设计的API接口和直观的使用方式&#xff0c;Layui-Vue让企业应用开发变得简单高效&am…

作者头像 李华
网站建设 2026/6/24 23:24:39

GitHub Actions自动化测试ACE-Step提交代码:确保项目质量

GitHub Actions自动化测试ACE-Step提交代码&#xff1a;确保项目质量 在AI音乐生成技术迅速发展的今天&#xff0c;开源模型的协作开发正面临前所未有的挑战。当一个像ACE-Step这样的前沿扩散模型不断收到来自全球开发者的贡献时&#xff0c;如何保证每一次代码合并都不会破坏核…

作者头像 李华
网站建设 2026/6/30 1:17:50

PyTorch Lightning简化Qwen3-VL-30B训练流程代码结构

PyTorch Lightning简化Qwen3-VL-30B训练流程代码结构 在构建百亿参数级视觉语言模型的实践中&#xff0c;一个常见的痛点是&#xff1a;明明研究的是前沿AI能力&#xff0c;却有超过一半的时间花在调试分布式训练脚本、处理显存溢出、修复多卡同步异常上。尤其当面对像 Qwen3-V…

作者头像 李华
网站建设 2026/6/25 18:46:27

如何在本地部署HunyuanVideo-Foley?超详细GitHub镜像安装包下载指南

如何在本地部署 HunyuanVideo-Foley&#xff1a;从零开始的完整实践指南 在短视频日活破十亿、AI 内容生产进入工业化阶段的今天&#xff0c;一个曾经被忽视的环节正成为效率瓶颈——音效制作。你有没有试过为一段 30 秒的动画手动配上脚步声、关门声和环境风声&#xff1f;这看…

作者头像 李华
网站建设 2026/6/25 2:29:03

HunyuanVideo-Foley支持NPM包管理?探索JS生态中的音效生成新方式

HunyuanVideo-Foley 探索 JS 生态&#xff1a;当音效生成走进前端开发者的工具箱 在短视频创作几乎成为全民技能的今天&#xff0c;一个常被忽视却至关重要的环节浮出水面——音效。一段没有脚步声、环境回响或动作反馈的视频&#xff0c;总让人觉得“少了点什么”。传统上&…

作者头像 李华