【C语言极简自学笔记】项目开发——扫雷游戏

article/2025/8/29 12:04:27

一、项目概述

1.项目背景

扫雷是一款经典的益智游戏,由于它简单而富有挑战性的玩法深受人们喜爱。在 C 语言学习过程中,开发扫雷游戏是一个非常合适的实践项目,它能够综合运用 C 语言的多种基础知识,如数组、函数、循环、条件判断等,有助于提升编程能力和逻辑思维能力。

2.项目目标

本次项目旨在使用 C 语言开发一个控制台版本的扫雷游戏,实现以下基本功能:

  1. 初始化游戏棋盘,包括雷区的布置和非雷区域周围雷数的计算。
  2. 玩家通过输入坐标来翻开棋盘格子,若翻开雷则游戏失败,若翻开所有非雷格子则游戏胜利。
  3. 提供标记雷的功能,方便玩家识别可能有雷的区域。
  4. 具备良好的用户交互界面,显示棋盘状态和游戏提示信息。

二.游戏设计 

 1.界面设置

由于进入游戏之后首先需要显示选择是否进行游戏的界面,因此需要利用do...while循环至少执行一次的特点来显示界面,并根据用户的选择来决定是否进入游戏,对主函数的编码如下所示:

int main()
{int input = 0;do{menu();printf("请选择:>");scanf("%d",&input);switch (input){case 1:printf("开始游戏\n");break;case 0:printf("退出游戏\n");break;default:printf("选择错误请重新选择\n");break;}} while (input);return 0;
}

通过switch语句,根据输入的值来选择是否进入游戏,若输入0,则退出游戏;若输入1,则开始游戏;若输入其他数字,提醒选择错误请重新输入。

菜单函数编辑如下:

void menu()
{printf("******************************\n");printf("********    1.play    ********\n");printf("********    0.exit    ********\n");printf("******************************\n");
}

2.游戏环节设置

当用户选择开始游戏后,需要进入游戏,因此需要创建一个函数来实现游戏的过程。由于需要同时布置雷和排查雷,因此需要创建两个二维数组来实现对雷的布置与排查。

(1)初始化棋盘

void Initboard(char board[ROWS][COLS], int row, int col, char ret)
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){board[i][j] = ret;}}
}

将布置雷的数组的所有元素初始化0,将排查雷的数组的所有元素初始化为*,因此需要一个字符变量来传递参数。

(2)打印棋盘

void Displayboard(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;printf("-------------------扫雷-----------------------\n");for (j = 0; j <= col; j++){printf("%d ",j);}printf("\n");for (i = 1; i <= row; i++){printf("%d ",i);for (j = 1; j <= col; j++){printf("%c ",board[i][j]);}printf("\n");}printf("-------------------扫雷-----------------------\n");
}

为了更好的识别数组中的哪一个元素,增加了打印行和列的部分

(3)设置雷

void Setmine(char board[ROWS][COLS], int row, int col)
{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--;}}
}

通过调用srand函数生成随机数的生成起点,然后通过取模运算即可随机设置雷的位置。

此时游戏函数的代码如下:

void game()
{char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };Initboard(mine, ROWS, COLS,'0');Setmine(mine, ROW, COL);//Displayboard(mine, ROW, COL);//为了展示设置雷和初始化后的结果,正式游戏不用打印Initboard(show, ROWS, COLS,'*');Displayboard(show, ROW, COL);
}

 代码整体运行结果如下:

 可以看到,已经随机设置了十个雷,而且排查雷的数组所有元素被初始化为*。

欲知后事如何,且看下篇文章!!!!!


http://www.hkcw.cn/article/ergrxIpwHf.shtml

相关文章

职业本科院校无人机专业人才培养解决方案

2023年的中央经济工作会议强调了以科技创新推动现代化产业体系构建的重要性&#xff0c;并提出发展生物制造、商业航天、低空经济等战略性新兴产业。低空经济&#xff0c;依托民用无人机等低空飞行器&#xff0c;在多场景低空飞行活动的牵引下&#xff0c;正逐步形成一个辐射广…

Text-to-SQL评估体系:从Spider 1.0数据集到2.0框架的跨越与革新

文章目录 一、引言&#xff1a;评估体系迭代推动Text-to-SQL技术发展二、Spider 1.0&#xff1a;跨领域语义解析数据集的奠基2.1 数据集构建与核心特征2.2 评估逻辑与技术局限 三、Spider 2.0&#xff1a;企业级工作流评估框架的崛起3.1 框架定位与核心组件3.2 工作流任务的革命…

电感器在数据中心电源系统中的应用及选型

当前&#xff0c;AI应用的加速落地带来了功耗的大幅提升&#xff0c;直接推动了数据中心电源需求的增长。根据国际能源署2023年的数据&#xff0c;全球数据中心能耗占比已超全球电力消耗的3%&#xff0c;单台A100 GPU服务器峰值功耗已经突破10kW。数据中心功耗的大幅提升&#…

WordPress搜索引擎优化的最佳重定向插件:进阶指南

在管理网站时&#xff0c;我们经常需要调整网页地址或修复错误链接。这时&#xff0c;通过重定向不仅能有效解决这些问题&#xff0c;还能显著提升网站在搜索引擎中的排名。对于熟悉基础重定向插件的用户来说&#xff0c;一些功能更强大的工具可以帮助你更全面地管理网站&#…

Codejock ToolkitPro 与 BCGControlBar Pro 深度对比

Codejock ToolkitPro 与 BCGControlBar Pro 深度对比 在 MFC (即 Microsoft Foundation Classes)基础上开发框架应用时&#xff0c;控件 UI 的环境一直是个难题&#xff1a;原生控件设计落后&#xff0c;不支持现代化主题&#xff0c;缩放适配性差&#xff0c;形成了 MFC 开发…

2.qml使用c++

目录 1.概述2.注册方式3. 分类①枚举类②工具类③数据类④资源类②视图类 1.概述 qml是用来干嘛的&#xff1f; 当然是提高UI开发效率的 为什么要混合C&#xff1f; 因为qml无法处理密集型数据逻辑 而加入c则兼顾了性能 达到11>2 总结就是 qml 开发UI, C 实现逻辑 而js的用…

复合机器人:纠偏算法如何重塑工业精度与效率?

在智能制造领域&#xff0c;复合机器人正成为柔性生产与高精度作业的核心载体。面对“复合机器人有纠偏算法吗&#xff1f;”这一行业高频问题&#xff0c;富唯智能以多模态纠偏技术体系给出了答案——通过自研的AI驱动纠偏算法与多传感器融合方案&#xff0c;复合机器人不仅能…

[ Qt ] | QPushButton常见用法

目录 绑定键盘快捷键 前面已经说了很多用法了&#xff0c;下面主要说说绑定键盘&#xff0c;设置Icon图片。 绑定键盘快捷键 实现四个按钮&#xff0c;可以使用wsad来控制另一个按钮的上下左右的移动。 #include "widget.h" #include "ui_widget.h"Wid…

TortoiseSVN账号切换

SVN登录配置及账号切换 本文主要为了解答svn客户端如何进行账号登录及切换不同权限账号的方式。 一、环境准备与客户端安装 安装TortoiseSVN客户端 ​​下载地址​​&#xff1a;TortoiseSVN官网 ​​安装步骤​​&#xff1a; 双击安装包&#xff0c;按向导完成安装后&#x…

Linux 程序管理

一、Linux程序与进程 1、程序,进程,线程的概念 程序&#xff1a;是一组指令及参数的集合&#xff0c;按照既定的逻辑控制计算机运行用来完成特定任务&#xff0c;是静态的&#xff1b; 进程&#xff1a;是运行着的程序&#xff0c;是操作系统执行的基本单位&#xff0c;是程序…

Android Gnss模块初步整理

一. 概述&#xff1a; Android的Gnss功能分布在App层和Framework层&#xff0c;App层主要调用LocationManager&#xff0c;通过Binder调用请求Framework的LocationManagerService服务&#xff0c;注册回调函数等: 1. // 获取Fw的LocaitonManagerService locManager (Location…

【学习笔记】Transformer

学习的博客&#xff08;在此致谢&#xff09;&#xff1a; 初识CV - Transformer模型详解&#xff08;图解最完整版&#xff09; 1 整体结构 Transformer由Encoder和Decoder组成&#xff0c;分别包含6个block。 Transformer的工作流程大体如下&#xff1a; 获取每个单词的em…

AmazonMQ:化解消息队列运维难题的云解决方案

作者&#xff1a;[MOMO] &#xff5c; 深度求索科技专栏 &#xff5c; 2025年5月29日 一、痛点直击&#xff1a;消息队列的运维之痛 当你的微服务架构因订单激增而崩溃&#xff0c;当RabbitMQ集群半夜突发故障&#xff0c;当Kafka运维成本吞噬团队精力——消息中间件的运维复…

Linux日志管理

目录 一、Linux日志系统概述 1.1 日志的重要性 1.2 日志分类 二、核心日志管理工具 2.1 syslog&#xff08;传统系统日志&#xff09; 2.1.1 配置文件 2.1.2 配置语法 2.1.3 优先级说明 2.1.4 应用场景 2.2 rsyslog&#xff08;增强型系统日志&#xff09; 2.2.1 核…

Mac系统下,利用wget批量下载ICESat-2测高内陆水位高数据ALT13

首先在NASA地球数据网站中下载测高的数据下载链接文件&#xff1a; Earthdata Search 这是一个txt文件&#xff0c;提供了每一个文件的下载链接&#xff1a; 为了批量下载这些文件&#xff0c;我在mac系统中使用wget工具。 安装wget&#xff08;如果未安装&#xff09;&…

传统呼叫中心系统升级的必要性

据了解&#xff0c;一些老企业或是政务行业&#xff0c;服务型的业务场景还在使用十几年前的呼叫中心系统&#xff0c;经常会出现一些问题&#xff0c;这种情况下是否需要升级到新一代呼叫中心系统呢&#xff1f; 传统的呼叫中心系统采用程控电话交换机&#xff0c;带有基础的I…

大话软工笔记—知识体系分解与归集

1. 知识体系分解 软件工程知识体系有两个分解方向&#xff0c;横向是方向工程分解&#xff0c;纵向是工作分解。 1.1 工程分解 在设计工程部分&#xff0c;工程分解有概要设计、详细设计、应用设计三个阶段。 概要设计 基于需求分析的成果&#xff0c;对未来业务的整体进行…

MySQL的基本架构

1. MySQL基本架构 1.1. MySQL架构 MySQL 可以分为 Server 层和存储引擎层两部分。 1. Server 层&#xff08;上层&#xff09; 作用&#xff1a;处理所有的通用功能&#xff0c;与存储引擎无关。 包含模块&#xff1a; 连接器&#xff08;Connection&#xff09;&#xff…

DeepSeek R1-0528 新开源推理模型(免费且快速)

DeepSeek推出了新模型,但这不是R2! R1-0528是DeepSeek的最新模型,在发布仅数小时后就在开源社区获得了巨大关注。 这个悄然发布的模型DeepSeek R1-0528,已经开始与OpenAI的o3一较高下。 让我来详细介绍这次更新的新内容。 DeepSeek R1-0528 发布 DeepSeek在这次发布中采…

杏仁海棠花饼的学习日记第十四天CSS

一&#xff0c;前言 第二天&#xff0c;今天看CSS。 二&#xff0c;CSS简介及导入方式 CSS简介 CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;是一种用于描述 HTML 或 XML&#xff08;包括 SVG、XHTML 等&#xff09;文档呈现效果的样式语言。…