四步手把手教你实现扫雷游戏(c语言)

七步手把手教你实现扫雷游戏

  • c语言实现扫雷游戏
    • 一. 整体思路
    • 二. 设计棋盘以及初始化
    • 三. 埋雷
    • 四. 扫雷

c语言实现扫雷游戏

一. 整体思路

和上一篇文章的三子棋一样 第一步咱们创建三个工程文件

game.c 文件 用来实现游戏的函数定义
game.h 文件 用来声明函数以及需要的头文件
test.c文件 用来测试函数的运行调试 并且做一些优化

首先 要进行扫雷游戏 咱先搞两个棋盘

一个棋盘里面放雷以及安全区域的的位置
一个棋盘里面放’#'用来让玩家排查

至于为什么要这样子做呢 后面的详细介绍会解释

然后第二步 我们就要开始布置雷了

第三步 开始扫雷

判断成功失败条件

二. 设计棋盘以及初始化

第一步 我们先把需要用到的所有头文件先再game.h里面声明了

然后在分别在game.c以及test.c里面声明game.h

想想看我们怎么才能设计出来一个棋盘呢?

首先要有行和列

上网查一下 简单难度的扫雷一般是9x9的格子 那我们就先设计一个9x9的棋盘吧

但是呢 根据扫雷的规则 我们要排查周边的9个空格 因此呢 设计一个9x9的棋盘很容易越界

这个时候有些聪明的同学就想到了 我们可以设计一个11 x 11的棋盘 但是只使用中间9 x 9的部分

这样就能完全规避数组指针越界的问题啦

代码如下

char mine[row][col] = { 0 };
char show[row][col] = { 0 };

其中row被定义为9

col也被定义为9

那么我们接着下一步 初始化棋盘

代码如下:

void init_board(char board[row][col],int x,int y, char ret)
{int i = 0;int j = 0;for (  i = 0; i < x; i++){for (  j = 0; j < y; j++){board[i][j]=ret;}}
}void show_board(char board[row][col], int x, int y)
{int i = 0;int j = 0;for ( i = 0; i < x; i++){printf("\n");for ( j = 0; j < y; j++){printf("%c ", board[i][j]);}}printf("\n");
}

效果图如下

在这里插入图片描述

但是呢 我们只需要一个内部9x9的棋盘

所以我们将代码优化一下

优化后代码如下

void show_board(char board[row][col], int x, int y)
{int i = 0;int j = 0;for (  j = 0; j < y-1; j++){printf("%d ", j);}printf("\n");for ( i = 1; i < x-1; i++){printf("%d ", i);for ( j = 1; j < y-1; j++){printf("%c ", board[i][j]);}printf("\n");}printf("\n");}

那么这样子 我们设计棋盘和初始化就全部完成啦

三. 埋雷

埋雷的思路和上一篇文章里面电脑下棋的思路一样

都是产生随机数

然后将数组里面的十个元素赋值字符‘1’ 意思是 这块地址就是雷了

代码参考如下

void set_board(char board[row][col],int x,int y)
{int count = 10;while (count){int i = rand() % 9 + 1;int j = rand() % 9 + 1;if (board[i][j]=='0'){board[i][j] = '1';count--;}}
}

四. 扫雷

要实现扫雷的思路大概讲解一下

1 我们创建一个函数 里面输入mine数组和show数组
2 让我们开始选坐标
3 首先判断这个坐标有没有雷 如果有雷直接game over
4 其次判断这个坐标是否已经输入过
5 如果都没有的话 接下来进行两件事

1 判断这个元素周边有多少个雷
2 将show数组中的这个元素赋值成周边雷的个数

关于如何判断这个元素周边有多少个雷 这个理教给大家一个小知识

字符串数字减去字符串‘0’的ascll码值就是这个数字的ascll码值
关于上面一句话的实现代码如下

int get_mine_count(char mine[row][col], 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 Find_mine(char mine[row][col],char show[row][col], int b, int c)
{int x = 0;int y = 0;int count = 71;while (count){printf("请输入要排查雷的坐标:>\n");scanf("%d %d", &x, &y);if (x >= 1 && x <= 9 && y >= 1 && y <= 9){if (show[x][y] == '#'){if (mine[x][y] == '1'){printf("很遗憾 你被炸死了");show_board(mine, 11, 11);break;}// 计算有多少个雷else{int count = get_mine_count(mine, x, y);show[x][y] = count + '0';// 展示show棋盘show_board(show, 11, 11);count--;}}else{printf("该坐标已被占用");}}else{printf("坐标非法,请重新输入 ");}}if (count==0){printf("排雷成功");}
}

实现函数的所有代码如下
test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"int main()
{srand((unsigned int)time(NULL));char mine[row][col] = { 0 };char show[row][col] = { 0 };// 初始化两个数组init_board(mine, 11, 11, '0');init_board(show, 11, 11, '#'); 打印两个数组 show_board(mine, 11, 11);show_board(show, 11, 11);// 布雷  并且展示一下set_board(mine, 11, 11);//show_board(mine, 11, 11);// 展示排雷Find_mine(mine, show, 11, 11);return 0;
}

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void init_board(char board[row][col],int x,int y, char ret)
{int i = 0;int j = 0;for (  i = 0; i < x; i++){for (  j = 0; j < y; j++){board[i][j]=ret;}}
}void show_board(char board[row][col], int x, int y)
{int i = 0;int j = 0;for (  j = 0; j < y-1; j++){printf("%d ", j);}printf("\n");for ( i = 1; i < x-1; i++){printf("%d ", i);for ( j = 1; j < y-1; j++){printf("%c ", board[i][j]);}printf("\n");}printf("\n");}void set_board(char board[row][col],int x,int y)
{int count = 10;while (count){int i = rand() % 9 + 1;int j = rand() % 9 + 1;if (board[i][j]=='0'){board[i][j] = '1';count--;}}
}int get_mine_count(char mine[row][col], 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 Find_mine(char mine[row][col],char show[row][col], int b, int c)
{int x = 0;int y = 0;int count = 71;while (count){printf("请输入要排查雷的坐标:>\n");scanf("%d %d", &x, &y);if (x >= 1 && x <= 9 && y >= 1 && y <= 9){if (show[x][y] == '#'){if (mine[x][y] == '1'){printf("很遗憾 你被炸死了");show_board(mine, 11, 11);break;}// 计算有多少个雷else{int count = get_mine_count(mine, x, y);show[x][y] = count + '0';// 展示show棋盘show_board(show, 11, 11);count--;}}else{printf("该坐标已被占用");}}else{printf("坐标非法,请重新输入 ");}}if (count==0){printf("排雷成功");}
}

game.h

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
#define ROW 9 
#define COL 9
#define row ROW+2
#define col COL+2
void init_board(char board[row][col], int x, int y, char ret);
void show_board(char board[row][col], int x, int y);
void set_board(char board[row][col], int x, int y);
int get_minr_count(char mine[row][col], int x, int y);
void Find_mine(char mine[row][col], char show[row][col], int x, int y);

以上就是手把手教你扫雷的全部内容啦

大家可以试着自己敲一遍代码试试

由于博主本人知识比较浅薄 难免出现错误 希望大佬看到之后能够不吝赐教 在评论区或者私信指正

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

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

相关文章

C/【扫雷】

**本文是用C语言写的扫雷小游戏———一个C语言前期寓教于乐的小游戏。 &#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;C语言学习笔记 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 一.游戏菜单的创建 二.游戏实现…

扫雷游戏-C实现

扫雷游戏 纯C&#xff0c;运用数组&#xff0c;循环实现&#xff0c;基础巩固 注&#xff1a;本篇将重心放在思路以及核心步骤讲解&#xff0c;重要的不是将每一部分代码记下了&#xff0c;而是将核心思路和代码实现理解透彻。如果你对本篇一些内容跳转&#xff0c;细节表示茫然…

ChatGPT 速通手册——ChatGPT 的自我介绍

从 ChatGPT 的名字就可以看出&#xff0c;它的最核心功能就是 Chat(聊天)。那么&#xff0c;我们就以聊天的形式&#xff0c;开始本书的内容。 先让 ChatGPT 自己做一次自我介绍。既可以展现 ChatGPT 的产品使用形式&#xff0c;也可以快速了解 ChatGPT 的技术概念&#xff1a;…

VUE svg图标 报错

&#xff1a;咱前端用到svg的地方多了去了 这可得会 目录 下载安装 svg 配置config文件 在vue.config.js 创建icon文件夹&#xff0c;存放svg格式图片 icon/index.js 创建组件components ---> SvgIcon src/utils/validate.js 在main.js引入 下载安装 svg npm ins…

可以微调类ChatGPT模型啦!开源Alpaca-LoRA+RTX 4090就能搞定

源 | 机器之心 Alpaca-LoRA 将微调类 ChatGPT 模型的算力需求降到了消费级&#xff0c;训练个自己的中文对话模型真就没那么难了。 2023 年&#xff0c;聊天机器人领域似乎只剩下两个阵营&#xff1a;「OpenAI 的 ChatGPT」和「其他」。 ChatGPT 功能强大&#xff0c;但 OpenAI…

如何使用OpenAI fine-tuning(微调)训练属于自己专有的ChatGPT模型?

要使用OpenAI的微调技术来训练自己的专有模型,您需要遵循以下步骤: 获取和准备数据集:首先,您需要准备自己的数据集。可以使用公共数据集,也可以使用自己的数据集。数据集需要以特定格式(如JSONL)进行存储,并且需要经过清洗和预处理。 选择合适的模型和超参数:根据您…

一觉睡醒,ChatGPT 竟然被淘汰了?

转自机器之心 编辑&#xff1a;杜伟、陈萍 OpenAI 的 Andrej Karpathy 都大力宣传&#xff0c;认为 AutoGPT 是 prompt 工程的下一个前沿。 近日&#xff0c;AI 界貌似出现了一种新的趋势&#xff1a;自主人工智能。 这不是空穴来风&#xff0c;最近一个名为 AutoGPT 的研究开始…

ChatGPT实现stackoverflow 解释

stackoverflow 解释 ChatGPT 公开服务以来&#xff0c;程序员们无疑是最早深入体验和"测试"的一批人。出色的效果也引发了一系列知识产权上的争议。著名的 stackoverflow 网站&#xff0c;就宣布禁止用户使用 ChatGPT 生成的内容来回答问题&#xff0c;一经发现&…

ChatGPT疯狂生成「辣鸡」内容,Stack Overflow气急,连夜封杀!

时下爆火的ChatGPT&#xff0c;被网友们用来生成海量答案。而Stack Overflow已经不堪其扰&#xff0c;发起「追杀」&#xff1a;应封尽封&#xff01; OpenAI的新模型ChatGPT才诞生没几天&#xff0c;已经成为广大网友的「装逼利器」。 它的回答不说正确不正确&#xff0c;乍一…

轻松掌握RecyclerView缓存机制

在 Android 应用程序中&#xff0c;RecyclerView 是一个非常重要的控件。它被广泛使用&#xff0c;因为它可以帮助我们展示大量的数据&#xff0c;同时也能够提供流畅的滑动体验。然而&#xff0c;如果我们不小心处理好 RecyclerView 的缓存机制&#xff0c;就可能会导致性能下…

chatgpt赋能python:Python内存管理:如何清理内存

Python内存管理&#xff1a;如何清理内存 Python作为一种高级编程语言&#xff0c;在各种应用领域都得到了广泛的应用。作为一种解释型语言&#xff0c;Python有着自动垃圾回收器的优点&#xff0c;但在长时间运行的应用程序中&#xff0c;Python可能会占用大量内存&#xff0…

[chat-GPT]解决OpenAI‘s services are not available in your country问题

OpenAI‘s services are not available in your country 按照网上的教程一步步配置chat-GPT&#xff0c;一直换不同国家的梯子也无济于事&#xff0c;各种搜索尝试&#xff0c;终于解决 解决方法 1.换浏览器 我换了firefox 一开始用的谷歌浏览器 2.清楚当前使用的浏览器所有…

最新版ui成语填空答题,成语接龙小程序源码,修复登录接口问题

这类的成语接龙填词游戏&#xff0c;之前我就见过朋友在玩&#xff0c;自带裂变属性&#xff0c;引流、广告效果都是一绝。强制分享广告&#xff0c;可拆随机金额红包&#xff0c;广告配置、激励配置等都在后台即可配置管理&#xff0c;无需翻改代码。朋友运营过的东西&#xf…

小程序“成语猜题”部分答案

哀哀父母可哀呀可哀&#xff0c;我的父母啊&#xff01;原指古时在暴政下人民终年在外服劳役&#xff0c;对父母病痛、老死不能照料而悲哀。哀哀欲绝绝&#xff1a;断气&#xff0c;死。形容极其悲痛。哀兵必胜原意是力量相当的两军对阵&#xff0c;悲愤的一方获得胜利。后指受…

chatgpt赋能python:Python怎样模拟成语填空游戏

Python怎样模拟成语填空游戏 成语填空游戏是一种非常受欢迎的智力游戏。在这个游戏中&#xff0c;玩家需要根据提示&#xff0c;在给出的空格中填入对应的成语。而Python是一个功能强大的编程语言&#xff0c;用起来十分简单。在本文中&#xff0c;我们将介绍如何使用Python来…

看图猜成语小程序设计与实现(小程序+PHP)

目 录 摘 要 I Abstract II 1 绪论 1 1.1 研究背景 1 1.2 国内外研究现状 1 1.2.1 国内研究现状 1 1.2.2 国外研究现状 2 1.3 论文组织结构 3 2 相关技术 4 2.1微信小程序介绍 4 2.1.1微信介绍 4 2.1.2微信小程序简介 4 2.1.3微信小程序基本功能 5 2.2开发技术的介绍 6 2.2.1 P…

12月编程语言排行榜:前三终于变了,Java跌出前三?它居然首次进前三!

因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享 点击关注#互联网架构师公众号&#xff0c;领取架构师全套资料 都在这里 0、2T架构师学习资料干货分 上一篇&#xff1a;爆火的ChatGPT太强了&#xff01;写代码、改bug&#xff0c;网友&…

C++ 涨幅依旧亮眼,Visual Basic 一降再降!TIOBE 5 月榜单发布

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 作为编程语言排行榜领域最权威的组织之一&#xff0c;今天 TIOBE 最新发布了 5 月榜单&#xff0c;快让我们看看这个月编程语言的流行趋势有何变化吧&#xff01; C 涨幅依旧亮眼&#xff0c;Visual …

忆享聚焦|ChatGPT、AI、网络数字、游戏……近期热点资讯一览

“忆享聚焦”栏目第十四期来啦&#xff01;本栏目汇集近期互联网最新资讯&#xff0c;聚焦前沿科技&#xff0c;关注行业发展动态&#xff0c;筛选高质量讯息&#xff0c;拓宽用户视野&#xff0c;让您以最低的时间成本获取最有价值的行业资讯。 目录 行业资讯 1.科技部部长王志…

接了ChatGPT的NewBing如何评价CodeGeeX

一篇《如何用 CodeGeeX 替代 GitHub Copilot》的文章在开发者社区登上热榜&#xff0c;开发者关注的AI生成代码工具CodeGeeX&#xff0c;这款插件产品目前支持在VSCode市场和Jetbrains IDEs下载使用&#xff0c;是国产对标Copilot目前安装量最大的开发者工具。 之所以引发开发…