当前位置: 首页 > article >正文

手把手教你用C语言开发扫雷小游戏

C语言扫雷游戏一.游戏逻辑分析与结构框架1.棋盘的创建2.布置炸弹3.排除炸弹二.游戏实现1.头文件game.h2.源文件game.c3.源文件test.c在此之前我们已经对分支与循环语句、数组和函数有了一定得了解接下来我们将写一个简单的扫雷游戏代码在写之前得先对扫雷逻辑要有一定的了解。游戏要求1.电脑生成一个9x9的棋盘2.在这9x9棋盘中随机部署10个炸弹3.在游戏过程中如果踩到炸弹游戏结束并且打印棋盘布局如果没有则统计其周围共有几个炸弹并继续游戏直到把除10个雷之外的所有⾮雷都找出来排雷成功游戏结束。扫雷游戏一.游戏逻辑分析与结构框架1.棋盘的创建首先我们得要创建一个9x9的棋盘来存放炸弹这很简单运用我们之前学的二维数组即可。#defineROW9#defineCOL9但是得想想如果我们只是创建了一个9x9的棋盘就足够了吗在这之前就已经说明了在游戏要求3中如果没有踩到炸弹则统计其周围共有几个炸弹那如果非炸弹刚好布置在棋盘边沿有三个位置已经超出了棋盘范围了又该如何统计其周围共有几个炸弹呢如下图所示其中设0为非炸弹1为炸弹遇到这种情况又该如何去解决仔细想想既然超出的范围我们用不上并且也为非雷区何不将这9x9的棋盘边沿包围住并填充上0在创建一个11x11的棋盘解决了因为范围超出的问题。#defineROWSROW2#defineCOLSCOL2如下图所示创建棋盘代码参考voidInitBoard(charboard[ROWS][COLS],introws,intcols,charset);voidInitBoard(charboard[ROWS][COLS],introws,intcols,charset){inti0;for(i0;irows;i){intj0;for(j0;jcols;j){board[i][j]set;}}}InitBoard(mine,ROWS,COLS,0);InitBoard(show,ROWS,COLS,*);//在这里*是为了覆盖炸弹布置的位置看到这里你会觉得有些迷茫为什么这代码分开来的这是因为第一份代码我放在叫game.h的头文件里主要是写游戏需要的数据类型和函数声明等 第二份代码放在game.c文件里主要是写游戏中函数的实现等第三份代码放在test.c文件里主要是写游戏的测试逻辑如何操作呢如下图所示右击源文件添加新建项然后有两个选项一个是.c后缀的c文件另一个是.h后缀的头文件。通过这些操作我们就可以得到在这里我们又看到除了创建棋盘之外还顺便打印了行和列只需在代码中加上这几句就行voidDisplayBoard(charboard[ROWS][COLS],introw,intcol){inti0;printf(--------扫雷游戏-------\n);for(i0;icol;i)//----打印列{printf(%d ,i);}printf(\n);for(i1;irow;i){printf(%d ,i);//----打印行intj0;for(j1;jcol;j){printf(%c ,board[i][j]);}printf(\n);}}2.布置炸弹那接下来又应该如何布置我们的炸弹呢想一想我们之前学过的猜数字游戏中想要得到一个随机数是如何做到的这就不得不提rand、srand和time这三个函数了并且炸弹布置的范围不能超过棋盘的范围仔细缕一缕思路不就来了吗首先创建随机值srand((unsignedint)time(NULL));接着设置范围arand()%(b-a1);//⽣成a~b的随机数但我们要的是9x9的范围所以可以这样写intxrand()%row1;//rand() % row范围在0~row-1, 1后范围在1~rowintyrand()%col1;最后布置炸弹设置数量count运用while循环将炸弹(1)随机赋值给9x9坐标任何一个每布置完一个count--布置完后count0跳出循环voidSetMine(charboard[ROWS][COLS],introw,intcol){intcountEASY_COUNT;while(count){intxrand()%row1;//rand() % row范围在0~row-1, 1后范围在1~rowintyrand()%col1;if(board[x][y]0){board[x][y]1;count--;}}}在这里我们要注意的是棋盘布局是用char类型所有0和1要写成0和13.排除炸弹既然炸弹都布置完了那接下来的操作便是找出棋盘中所有的炸弹思路是这样的首先得输入一个有效坐标如果该坐标是 ‘1’ ,真倒霉被炸了游戏结束并打印炸弹布局是否再来一局如果该坐标是 ‘0’ 统计该坐标周围一共有几个炸弹继续游戏直至找出所有炸弹恭喜您通关了是否再来一局。根据上面的思路我们就可这样写voidFindMine(charmine[ROWS][COLS],charshow[ROWS][COLS],introw,intcol){intx0;inty0;intwin0;while(winrow*col-EASY_COUNT){printf(请输入要排查的坐标:);scanf(%d %d,x,y);if(x1xrowy1ycol){if(mine[x][y]1){printf(很遗憾你被炸死了\n);DisplayBoard(mine,ROW,COL);break;}else{intcountGetMineCount(mine,x,y);show[x][y]count0;DisplayBoard(show,ROW,COL);win;}}else{printf(坐标错误重新输入\n);}}if(winrow*col-EASY_COUNT){printf(恭喜你排雷成功\n);DisplayBoard(mine,ROW,COL);}}那如果该坐标是 ‘0’ 又该如何统计该坐标周围一共有几个炸弹呢我们可以在判断该坐标不为炸弹调用函数int count GetMineCount(mine, x, y);来计算因为我们在此之前设置炸弹为 ‘1’非炸弹为 ‘0’那我们就可以将选择的坐标(x,y)的周围8个坐标值加起来即可如下所示intGetMineCount(charmine[ROWS][COLS],intx,inty){return(mine[x-1][y]mine[x-1][y-1]mine[x][y-1]mine[x1][y-1]mine[x1][y]mine[x1][y1]mine[x][y1]mine[x-1][y1]-8*0);}二.游戏实现声明game.c和test.c的头文件在game.h里面所有这两个文件顶端都要加上#include game.h1.头文件game.h#define_CRT_SECURE_NO_WARNINGS#pragmaonce#includestdio.h#includestdlib.h#includetime.h#defineROW9#defineCOL9#defineROWSROW2#defineCOLSCOL2#defineEASY_COUNT10//设置炸弹数量voidInitBoard(charboard[ROWS][COLS],introws,intcols,charset);voidDisplayBoard(charboard[ROWS][COLS],introw,intcol);voidSetMine(charboard[ROWS][COLS],introw,intcol);voidFindMine(charmine[ROWS][COLS],charshow[ROWS][COLS],introw,intcol);2.源文件game.c#includegame.h//初始棋盘voidInitBoard(charboard[ROWS][COLS],introws,intcols,charset){inti0;for(i0;irows;i){intj0;for(j0;jcols;j){board[i][j]set;}}}voidDisplayBoard(charboard[ROWS][COLS],introw,intcol){inti0;printf(--------扫雷游戏-------\n);for(i0;icol;i)//打印列{printf(%d ,i);}printf(\n);for(i1;irow;i){printf(%d ,i);//打印行intj0;for(j1;jcol;j){printf(%c ,board[i][j]);}printf(\n);}}voidSetMine(charboard[ROWS][COLS],introw,intcol){intcountEASY_COUNT;while(count){intxrand()%row1;//rand() % row范围在0~row-1, 1后范围在1~rowintyrand()%col1;if(board[x][y]0){board[x][y]1;count--;}}}intGetMineCount(charmine[ROWS][COLS],intx,inty){return(mine[x-1][y]mine[x-1][y-1]mine[x][y-1]mine[x1][y-1]mine[x1][y]mine[x1][y1]mine[x][y1]mine[x-1][y1]-8*0);}voidFindMine(charmine[ROWS][COLS],charshow[ROWS][COLS],introw,intcol){intx0;inty0;intwin0;while(winrow*col-EASY_COUNT){printf(请输入要排查的坐标:);scanf(%d %d,x,y);if(x1xrowy1ycol){if(mine[x][y]1){printf(很遗憾你被炸死了\n);DisplayBoard(mine,ROW,COL);break;}else{intcountGetMineCount(mine,x,y);show[x][y]count0;DisplayBoard(show,ROW,COL);win;}}else{printf(坐标错误重新输入\n);}}if(winrow*col-EASY_COUNT){printf(恭喜你排雷成功\n);DisplayBoard(mine,ROW,COL);}}3.源文件test.c#includegame.h//test.c 写游戏的测试逻辑//game.c 写游戏中函数的实现等//game.h 写游戏需要的数据类型和函数声明等voidmenu()//创建菜单{printf(********************\n);printf(***** 1.play *****\n);printf(***** 0.exit *****\n);printf(********************\n);}voidgame()//创建game{//用二维数组创建棋盘charmine[ROWS][COLS]{0};//存放好布置好的炸弹charshow[ROWS][COLS]{0};//存放排查出的炸弹的信息InitBoard(mine,ROWS,COLS,0);InitBoard(show,ROWS,COLS,*);//布置炸弹SetMine(mine,ROW,COL);//打印棋盘//DisplayBoard(mine, ROW, COL);//如果想看炸弹布局可将DisplayBoard前面//去掉DisplayBoard(show,ROW,COL);FindMine(mine,show,ROW,COL);}intmain(){intinput0;srand((unsignedint)time(NULL));do{menu();//调用menu菜单printf(请选择:);scanf(%d,input);switch(input){case1:game();//调用gamebreak;case0:printf(退出游戏);break;default:printf(请重新选择);break;}}while(input);return0;}运行结果(部分截图)以上为简单扫雷游戏代码想要做到真正的扫雷还需跟进一步学习最后可以动手去试试实践出真知宝剑锋从磨砺出梅花香自苦寒来。

相关文章:

手把手教你用C语言开发扫雷小游戏

C语言:扫雷游戏一.游戏逻辑分析与结构框架1.棋盘的创建2.布置炸弹3.排除炸弹二.游戏实现1.头文件game.h2.源文件game.c3.源文件test.c在此之前我们已经对分支与循环语句、数组和函数有了一定得了解,接下来我们将写一个简单的扫雷游戏代码,在写…...

从对抗到共生:SITS2026定义2026人机协作新范式——基于17国247家企业实测的协作成熟度五级评估体系

第一章:从对抗到共生:SITS2026人机协作范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 过去十年,人机关系常被简化为“替代—竞争”叙事:模型越强,岗位越危。SITS2026首次系统性提出“协作熵减”理论——即人…...

AI安全基础:AI系统权限管理的安全规范

AI安全基础:AI系统权限管理的安全规范📝 本章学习目标:本章是基础入门部分,帮助零基础读者建立对AI安全合规治理的初步认知。通过本章学习,你将全面掌握"AI安全基础:AI系统权限管理的安全规范"这…...

企业安全生产知识竞赛活动组织与实施指南

🛡️ 企业安全生产知识竞赛活动组织与实施指南🎯 一、活动目标与意义核心目标:以赛促学、以学促安。通过趣味性竞赛,普及安全知识,检验培训成果,强化“安全第一、预防为主、综合治理”意识,营造…...

网络初级第二次作业(静态路由配置)

一、网络拓扑图二、配置路由器改名和配置路由器:以AR1为例三、配置 PC端的网络参数:为PC1和PC2配置静态IP地址:四、配置静态路由为四个路由器分别配置静态路由:以AR3和AR4为例五、Ping测试...

玻璃的前世今生,了解一下?

玻璃的前世今生,了解一下? 玻璃的前世今生 改革开放40年,我国基础建设飞速发展。一栋栋高耸入云端的摩天大楼,一片片一望无边的居民住宅,房地产行业为我国的GDP画上了浓墨重彩的一笔。毫无疑问,为建筑物穿上漂亮外衣的玻璃行业也是突飞猛进,为我们建筑表皮的安全节能美…...

GLM-OCR环境配置保姆级教程:Windows系统下快速安装与问题排查

GLM-OCR环境配置保姆级教程:Windows系统下快速安装与问题排查 如果你在Windows电脑上尝试部署GLM-OCR时,被各种环境报错、路径问题或者神秘的“403 forbidden”搞得头大,那这篇文章就是为你准备的。我遇到过太多在Windows上卡住的朋友&#…...

Linux环境下高效获取SRA数据的四种方法及实战技巧

1. SRA数据库基础与数据获取逻辑 在生物信息学研究中,SRA(Sequence Read Archive)数据库堪称原始测序数据的宝库。这个由NCBI维护的数据库,就像是一个全球共享的测序数据图书馆,里面存放着来自各种测序平台&#xff08…...

别再死记硬背了!用D触发器设计任意进制计数器的通用思路与Verilog实现

从状态机到Verilog:用D触发器构建任意进制计数器的通用方法论 在数字电路设计中,计数器就像乐高积木中的基础模块——看似简单却能构建出复杂系统。传统教学中,我们常被要求死记硬背特定进制(如12进制)的计数器设计&am…...

KES核心伪列深度解析:OID与ROWID机制、差异及实践

目录 一、引言 二、KES 中 OID 对象标识符机制详解 2.1 OID 基本定义与核心定位 2.2 系统表 OID:全局唯一、跨对象连续分配 2.3 普通表 OID:局部独立、表内自增(KES 核心差异) 2.4 OID 别名 regclass:简化元数据…...

网络安全8大就业领域和待遇对比!

网络安全8大就业领域和待遇对比! 游戏、互联网企业集中在北上广深;医疗、运营商岗位在省会城市机会更多;汽车物流则需关注长三角、珠三角等制造业集群,教育类比较适合女生发展。 学习资源 如果你也是零基础想转行网络安全&#x…...

5倍效率提升的秘密:B站直播助手架构解析与微服务实践

5倍效率提升的秘密:B站直播助手架构解析与微服务实践 【免费下载链接】MagicalDanmaku 本仓库及所有相关项目已永久停止开发、维护和任何形式的分发。 项目地址: https://gitcode.com/gh_mirrors/bi/MagicalDanmaku 神奇弹幕(MagicalDanmaku&…...

T113平台Tina5.0(OpenWrt)开发实战:编译指令深度解析与高效编译指南

1. T113平台与Tina5.0开发环境概览 T113-S3/S4是全志科技推出的高性能嵌入式处理器,采用Cortex-A7双核架构,主频可达1.2GHz。这颗芯片有个特别实用的设计——内置了RISC-V协处理器(仅T113-S4支持),在处理特定任务时能显…...

字符函数 和 字符串函数超全详解(后续会持续优化)

📖 目录字符分类函数字符转换函数strlen 的使用和模拟实现strcpy /strncpy 的使用和模拟实现strcat /strncat 的使用和模拟实现strcmp /strncmp 的使用和模拟实现 strstr 的使用和模拟实现strtok 函数的使用strerror 函数的使用一、字符分类函数核心说明头文件&am…...

TwitchDropsMiner完全指南:5个步骤轻松自动化获取游戏掉落奖励

TwitchDropsMiner完全指南:5个步骤轻松自动化获取游戏掉落奖励 【免费下载链接】TwitchDropsMiner An app that allows you to AFK mine timed Twitch drops, with automatic drop claiming and channel switching. 项目地址: https://gitcode.com/GitHub_Trendin…...

TrollInstallerX终极指南:简单快速安装TrollStore的完整教程

TrollInstallerX终极指南:简单快速安装TrollStore的完整教程 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 您是否一直在寻找一种简单可靠的方法&#xff0…...

魔兽世界宏工具终极指南:3步掌握GSE高级宏编译器,实现游戏操作优化与技能自动化

魔兽世界宏工具终极指南:3步掌握GSE高级宏编译器,实现游戏操作优化与技能自动化 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. 项目地址: https://gitcode.com/gh_m…...

安全:经验总结

那份报价单比正确的贵了30%:一次版本事故的完整复盘“胡总,您看看这个报价,土耳其那边说我们价格太高了。” 我接过手机,看到客户发来的邮件截图。那份报价单清清楚楚写着:“V2方案,总价130万美元&#xff…...

Linux时间同步实战:NTP与PTP的精度对比与应用场景

1. 时间同步为什么重要? 想象一下这样的场景:你正在和远方的朋友视频通话,结果发现对方的声音总是比画面慢半拍;或者金融交易所里,因为服务器时间不同步,导致高频交易出现偏差。这些问题的根源往往在于时间…...

Cesium 热力图:从原理到实战,打造三维空间数据可视化利器

1. 为什么需要Cesium热力图? 当你在处理地理空间数据时,经常会遇到这样的场景:手上有成百上千个带有经纬度和数值的坐标点,比如气象站的温度数据、共享单车的分布密度、城市人口热力分布等。如果直接在三维地图上用点标记展示&…...

README文档自动化生成工具的技术实现指南

README文档自动化生成工具的技术实现指南 【免费下载链接】readme-md-generator 📄 CLI that generates beautiful README.md files 项目地址: https://gitcode.com/gh_mirrors/re/readme-md-generator 在开源项目日益增多的今天,项目文档的质量直…...

如何用AI智能翻译漫画:5分钟掌握专业级本地化工具

如何用AI智能翻译漫画:5分钟掌握专业级本地化工具 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项目地址: https://gi…...

运维面试必问的10个K8s问题

在运维岗位的面试中,Kubernetes(K8s)作为容器编排的主流技术,常常是面试官重点考察的内容。以下是运维面试中可能会被问到的10个K8s相关问题及其详细解答,帮助你更好地准备面试。1. 请简要介绍一下Kubernetes及其核心功…...

QTableWidget 表格组件磷

7.1 初识三维模型 7.1.1 三维模型的数据载体 随着计算机图形技术的发展,我们或多或少都会见过或者听说过三维模型。笔者始终记得小时候第一次在电视上看到三维动画《变形金刚:超能勇士》的震撼感受;而现在我们已经可以在手机上玩三维游戏《王…...

从零构建五子棋AI:C++实现中的博弈树搜索与剪枝优化

1. 五子棋AI的基本原理 五子棋是一种双人策略型棋类游戏,玩家通过在棋盘上交替落子,先形成五子连线的一方获胜。要让计算机学会下五子棋,我们需要教会它如何评估棋局并做出最佳决策。这就像教一个小朋友下棋,只不过我们用的是代码…...

掌握AI专著撰写技巧,借助工具,轻松打造高质量学术专著

学术专著创作困境与AI工具解决方案 许多学者在撰写学术专著时,常常面临着“有限的精力”与“无限的需求”之间的矛盾。写一本专著通常需要耗费3到5年,甚至更长的时间,而研究者在日常生活中还要兼顾教学、科研和学术交流等多重任务&#xff0…...

用Docker一键部署OpenMVS开发环境(Ubuntu 18.04 LTS版)

基于Docker的OpenMVS开发环境快速部署指南 在三维重建和计算机视觉领域,OpenMVS作为一套开源的Multi-View Stereo系统,因其强大的功能和灵活性而广受欢迎。然而,传统的本地安装方式往往面临依赖管理复杂、环境配置繁琐、系统兼容性等问题&…...

告别裸奔开发:手把手教你用英飞凌Traveo II SDL7.5.0快速点亮第一个LED

从零到一:Traveo II SDL7.5.0开发环境搭建与LED控制实战 第一次接触英飞凌Traveo II这类车规级MCU时,许多开发者会被其多核架构和丰富的外设资源所震撼——这就像突然从自行车换到了F1赛车,兴奋之余又担心无从下手。作为过来人,我…...

WinDiskWriter:macOS上一键搞定Windows启动盘制作的终极指南

WinDiskWriter:macOS上一键搞定Windows启动盘制作的终极指南 【免费下载链接】windiskwriter 🖥 Windows Bootable USB creator for macOS. 🛠 Patches Windows 11 to bypass TPM and Secure Boot requirements. 👾 UEFI & Le…...

番茄小说下载器完整指南:免费工具让你永久保存心爱小说

番茄小说下载器完整指南:免费工具让你永久保存心爱小说 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 还在为网络不稳定时无法阅读番茄小说而烦恼吗?fanqienovel-d…...