33.【C语言】实践扫雷游戏

预备知识:

第13篇 一维数组 第13.5篇 二维数组

第28篇 库函数 第29篇 自定义函数 第30篇 函数补充

0x1游戏的运行:

1.随机布置雷

2.排雷

基本规则:

3d710df864344b2a9912405bf30b3cda.png点开一个格子后,显示1,对于9*9,代表以1为中心的去心九宫格内有一个雷,找到后标记

,直到标完所有的雷,游戏结束;如果中途点中雷,游戏结束

794c11d3da124074b11e3863f73a549a.pngb9b68844495944cfaaf41ef224d333e3.png74478ccec2194993b0934fe4e6785dc5.png

0x2.编写过程

现创建9*9的雷区,编写代码ddfa4243cc6542c880e563ed6e315a57.png

但这样会程出现问题,边缘的雷需要另外写代码(否则九宫格越界)-->为了方便,扩大一圈(11*11)69253a5512324289868c02f6f896a2ac.png

定义二维数组:char board[11][11]

两个二维数组:一个布雷,一个显示玩家排雷的状态

game.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define COUNT 10
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
void menu();
void game();
void InitBoard(char board[ROWS][COLS], int row, int col, char set);
void SetMine(char board[ROWS][COLS], int row, int col);
void DisplayBoard(char board[ROWS][COLS], int row, int col);
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
int GetMineCount(char mine[ROWS][COLS], int x, int y);

DisplayBoard.c

#include "game.h"
void DisplayBoard(char board[ROWS][COLS],int row,int col)
{printf("-------99扫雷-------\n");printf("0 ");for (int i = 1; i <= row; i++){printf("%d ", i);//打印行}printf("y");printf("\n");for (int i = 1; i <= row; i++){printf("%d ", i);//打印列for (int j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}printf("x");printf("\n--------------------\n");
}

 FineMine.c

#include "game.h"
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-COUNT){//DisplayBoard(mine, ROW, COL);//作弊模式:)printf("输入排查雷的坐标 x y :>");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);Sleep(3000);system("cls");break;}else{win++;system("cls");int sum = GetMineCount(mine, x, y);//t统计去心九宫格雷的个数show[x][y] = sum + '0';DisplayBoard(show, ROW, COL);}}else{printf("输入有误,重新输入\n");}}if (win== row * col - COUNT)printf("赢了\n");
}

game.c

#include "game.h"
void game()
{char mine[ROWS][COLS] = { 0 };//定义布雷数组char show[ROWS][COLS] = { 0 };//定义显示玩家排雷的状态的数组InitBoard(mine, ROWS, COLS, '0');//初始化布雷数组InitBoard(show, ROWS, COLS, '?');//初始化显示玩家排雷的状态的数组SetMine(mine, ROW,COL);//布雷DisplayBoard(show, ROW, COL);//打印显示玩家排雷的状态的数组FindMine(mine,show,ROW,COL);//玩家找雷
}

GetMineCount.c

#include "game.h"
int GetMineCount(char mine[ROWS][COLS],int x,int y)
{return mine[x][y + 1] + mine[x][y - 1] + mine[x - 1][y] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x - 1][y - 1] + mine[x - 1][y + 1] + mine[x + 1][y - 1] - 8 * '0';
}

InitBoard.c

#include "game.h"
//初始化雷区
void InitBoard(char board[ROWS][COLS], int row, int col, char set)
{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){board[i][j] = set;}}
}

main.c


#include "game.h"
int main()
{int tmp = 0;srand((unsigned int)time(NULL));do{menu();//调用菜单函数scanf("%d", &tmp);switch (tmp){case 2:break;default:{printf("输入错误,重新选择!\n");Sleep(1000);system("cls");break;}case 1:{system("cls");game();break;}}} while (tmp != 2);return 0;
}

menu.c

#include "game.h"
void menu()//主菜单函数
{printf("**********************************************\n");printf("*******************1.PLAY********************\n");printf("*******************2.EXIT*********************\n");printf("**********************************************\n");printf("请选择:\n");
}

SetMine.c

#include "game.h"
void SetMine(char board[ROWS][COLS], int row, int col)
{int count = 10;while (count){int x = rand() % row + 1;//x:1~9int y = rand() % col + 1;//y:1~9if (board[x][y] != '1'){board[x][y] = '1';count--;}}}

有兴趣可以看看 CE实现扫雷作弊

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【五】架构设计之思考路线

架构设计之思考路线 概述 看过不少本架构设计方面的书籍&#xff0c;如《亿级流量网站架构核心技术》《超大流量分布式系统架构解决方案》《企业IT架构转型之道》《从程序员到架构师》等&#xff0c;看完之后最终发现架构设计思维大同小异&#xff0c;无非都是围绕实现三高&…

学习Java的日子 Day56 数据库连接池,Druid连接池

Day56 1.数据库连接池 理解&#xff1a;池就是容器&#xff0c;容器中存放了多个连接对象 使用原因&#xff1a; 1.优化创建和销毁连接的时间&#xff08;在项目启动时创建连接池&#xff0c;项目销毁时关闭连接池&#xff09; 2.提高连接对象的复用率 3.有效控制项目中连接的…

Windows下Pytorch入门深度学习环境安装与配置(CPU版本)

Windows下Pytorch入门深度学习环境安装与配置&#xff08;CPU版本&#xff09; 一、安装过程中各个软件的作用&#xff08;一&#xff09;Python&#xff08;二&#xff09;库 / 包 / package / library&#xff08;三&#xff09;PyTorch / Tensorflow&#xff08;四&#xff…

Java之开发 系统设计 分布式 高性能 高可用

1、restful api 基于rest构建的api 规范&#xff1a; post delete put get 增删改查路径 接口命名 过滤信息状态码 2、软件开发流程 3、命名规范 类名&#xff1a;大驼峰方法名&#xff1a;小驼峰成员变量、局部变量&#xff1a;小驼峰测试方法名&#xff1a;蛇形命名 下划…

【云原生】Docker搭建知识库文档协作平台Confluence

目录 一、前言 二、企业级知识库文档工具部署形式 2.1 开源工具平台 2.1.1 开源工具优点 2.1.2 开源工具缺点 2.2 私有化部署 2.3 混合部署 三、如何选择合适的知识库平台工具 3.1 明确目标和需求 3.2 选择合适的知识库平台工具 四、Confluence介绍 4.2 confluence特…

平面点云三角化边数与点的关系

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 点云三角化定义 原文 说人话&#xff1a; 一个二维平面点集P三角化结果是一个满足以下条件的三角形集合&#xff1a; 1 所有三角形的并集刚好是P的凸包。 2 所有三角…

python3GUI--new音乐播放器!By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示1.启动2.MV推荐3.专辑详情页4.歌手详情页5.搜索结果页6.歌曲播放页7.我喜欢歌曲页8.我喜欢专辑页 三&#xff0e;思路&启发1.布局2.细节3.组件复用4.项目结构5.优化速度1.Nuitka1.显著提高性能&#xff1a;2.减小程序体积&am…

Java集合框架2024最通俗易懂(图片超全)

集合 1.1、定义 集合就是类型统一的数据组合而成的数据结构&#xff0c;该数据结构可以任意的改变长度。 1.3、Set Set数据存储结构&#xff0c;无序&#xff0c;且不可以重复&#xff0c;元素可以为null&#xff0c;但是也只能出现一次&#xff0c;如下图: 1.3.1、HashSe…

[240726] Mistral AI 发布新一代旗舰模型 | Node.js 合并 TypeScript 文件执行提案

目录 Mistral AI 发布新一代旗舰模型&#xff1a;Mistral Large 2Node.js 合并 TypeScript 文件执行提案&#xff1a;--experimental-strip-types Mistral AI 发布新一代旗舰模型&#xff1a;Mistral Large 2 Mistral AI 宣布推出新一代旗舰模型 Mistral Large 2&#xff0c;该…

算法-----递归~~搜索~~回溯(宏观认识)

目录 1.什么是递归 1.1二叉树的遍历 1.2快速排序 1.3归并排序 2.为什么会用到递归 3.如何理解递归 4.如何写好一个递归 5.什么是搜索 5.1深度&#xff08;dfs&#xff09;优先遍历&优先搜索 5.2宽度&#xff08;bfs&#xff09;优先遍历&优先搜索 6.回溯 1.什…

Temu测评自养号如何做?三分钟带你入门!

环境系统 现在市场上很多的系统都是现成的或软件包&#xff0c;没有解决风控的能力&#xff0c;如果有需要建议大家自己学习一套技术&#xff0c;把技术掌握在自己手里&#xff0c;这样不会有依赖性 手机端环境:越狱后的ios指定版本手机可以一键新机的系统(参数调试)独享的家…

【NLP自然语言处理】为什么说BERT是bidirectional

首先&#xff0c;来看一下Transformer架构图&#xff1a; 我们知道&#xff0c;Bert设计时主要采用的是Transformer编码器部分&#xff0c;要论述Bert为啥是双向的&#xff0c;我想从编码器和解码器的注意力机制来阐述。 在看这篇博客前&#xff0c;需要对Transformer有一定的…

[C++] vector入门迭代器失效问题详解

文章目录 vector介绍**vector iterator 的使用** vector迭代器失效问题由扩容或改变数据引起的迭代器失效reserve的实现&#xff08;野指针&#xff09;insert实现&#xff08;迭代器位置意义改变&#xff09;insert修改后失效的迭代器 it迭代器失效 erase后的问题总结&#xf…

MyBatis-Plus的基本使用(一)

目录 前言 特性 MyBatis-Plus入门案例 常用注解 小结 前言 这篇文章主要来学习MyBatis-Plus这个非常强大的框架. 在学习MyBatis-Plus之前,需要有MyBatis的学习基础.因为MyBatis -Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#x…

【Java Bean 映射器】通过 MapStruct 和 BeanUtils 拷贝对象的区别

目录 &#x1f44b;前言 &#x1f440;一、环境准备 &#x1f331;二、拷贝工具使用 2.1 BeanUtils 使用 2.2 MapStruct 使用 &#x1f49e;️三、对比 &#x1f4eb;四、章末 &#x1f44b;前言 小伙伴们大家好&#xff0c;最近在一些技术文章中看到了开发时经常接触的对…

面向对象·回顾;万类之祖object;抽象类Abstract。

回顾面向对象 类与对象 类--------&#xff08;instance实例化对象&#xff09;-------->对象 类图 调出你public方法–接口 访问控制符 常用private&#xff0c;public。 封装 可见性本类包不同包private✓✕✕不写dafalt(默认)✓✓✕protected✓✓继承✓public✓✓✓…

【计算机网络】RIP路由协议实验

一&#xff1a;实验目的 1&#xff1a;掌握在路由器上配置RIPv2。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。具体为&#xff1a;三层交换机1台、路由器2台。 软件&#xff1a;wireshark软件、记…

01-调试开发k8s

使用 Docker 构建 Kubernete 官方 release 是使用 Docker 容器构建的。要使用 Docker 构建 Kubernetes&#xff0c;请遵循以下说明: Requirements docker Key scripts 以下脚本位于 build/ 目录中。请注意&#xff0c;所有脚本都必须从 Kubernetes 根目录运行 build/run.…

【科研绘图】记录一次论文结果复现

复现原论文中的图片是科研的基本功之一&#xff0c;它不仅验证了研究结果的可靠性&#xff0c;确保了科学工作的准确性和可重复性&#xff0c;还深刻地评估了方法的有效性&#xff0c;体现了对原始研究的尊重和对科学过程的严谨态度。这个过程不仅提高了研究的透明度&#xff0…

记忆注意力用于多模态情感计算!

记忆注意力用于多模态情感计算&#xff01; 目录 情感计算 一、概述 二、研究背景 三、模型结构和代码 六、数据集介绍 七、性能展示 八、复现过程 九、运行过程 模型总结 本文所涉及所有资源均在传知代码平台可获取。 情感计算 近年来&#xff0c;社交媒体的快速扩张推动了用户…