c语言扫雷改进版

目录

文章目录

主体

整体架构流程

技术名词解释

技术细节

测试情况

 

文章目录

    • 概要
    • 整体架构流程
    • 技术名词解释
    • 技术细节
    • 测试情况

 

主体

 主体包括菜单,游戏规则简绍,选择进行与否

int main()
{int input;srand((unsigned int)time(NULL));do{   menu();scanf("%d", &input);switch (input){case 2:rule(); break;case 1:game(); break;case 0:printf("退出游戏\n"); break;default:printf("输入非法,请重新输入\n"); break;}} while (input);return 0;
}

整体架构流程

进行游戏概括,首先要创建两个字符数组,一个进行操作另一个进行展示。扫雷选择x*x格式,例如9*9格式,需要先将两个数组初始化,初始化完成后需要进行雷的随机布置

,(在这里编程时尽量先完成棋盘的打印方便调试观察,等到全部任务完成后再调换位置)

布置完雷,后进行棋盘的打印和寻找

主要内容:2b4f0e6f69e84a009737e688e567c790.png

将所有头文件置于一个文件中:

85234f57402a419f8bb85a2ad6828f68.png

技术名词解释

雷的随机布置需要用到随机数,可以使用rand函数,但是制造出来的随机数是伪随机数,这里就可以借助time函数返回时间戳,弄到srand(),将种子数改变,制造出真正的随机数,使用时也要包括头文件time.h   ,stdlib.h

67b81ea65e5b4ef7ab0ef34618565377.png

dd341e5af85f4cc1a91d9559e11f9f21.png

技术细节

1初始化:4958ff8f31ea4bf89ff83dbbe1e1b3bc.png,a,b分别代表横纵坐标,c代表被初始化的字符(‘0’/‘*’)

2打印棋盘:

97e092d779004cff824cd12fdc1b253b.png

3,布置雷

3ca5882941a848639a0c8f7b75038225.png

4寻找雷

c75750f5d97746669c0eb2d9e345216d.png

5*:细节添加

d725b3e3ea454b65af0de4395560b0da.png

这里的细节照应规则2b4f0e6f69e84a009737e688e567c790.png

 

 

 

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"//初始化棋盘
void Init_arr(char board[ROW][COL], int a, int b,char c)
{for (int i = 0; i < a; i++){for (int j = 0; j < b; j++){board[i][j] = c;}}
}void Display(char board[ROW][COL], int a, int b)
{printf("-------------扫雷游戏-----------------\n");for (int i = 0; i <= row; i++){printf(" %d  ", i);}printf("\n");printf("\n");for (int i = 1; i <=a; i++){printf(" %d  ", i);for (int j = 1; j <= b; j++){printf("'%c' ", board[i][j]);}printf("\n");printf("\n");}
}
void SetMine(char board[ROW][COL], int a, int b)
{int count = EASY_MINE;while (count){int x = rand() % a + 1;int y = rand() % b + 1;if (board[x][y] == '0'){board[x][y] = '1';count--;}}
}
int get(char board[ROW][COL], int x, int y)
{return (board[x - 1][y - 1] + board[x - 1][y] + board[x - 1][y + 1] + board[x][y - 1] +board[x][y + 1] + board[x + 1][y - 1] + board[x + 1][y] + board[x + 1][y + 1] - 8 * '0');
}
int GETCOUNT(char board[ROW][COL],char show[ROW][COL], int x, int y)
{for (int i = x - 1; i <= x + 1; i++){for (int j = y - 1; j <= y + 1; j++){int q = rand() % 100;if (board[i][j] != '1'&&q>=50){show[i][j] = get(board, x, y)+'0';}}}return (board[x - 1][y - 1] + board[x - 1][y] + board[x - 1][y + 1] + board[x][y - 1] +board[x][y + 1] + board[x + 1][y - 1] + board[x + 1][y] + board[x + 1][y + 1] - 8 * '0');
}
void FindMine(char board[ROW][COL], char show[ROW][COL], int a, int b)
{int x, y ,win=0;while(win>=0){printf("请选择所要查找的坐标:");scanf("%d %d", &x, &y);if (x > 0 && x <= a && y > 0 && y <= b){if (board[x][y] == '1'){printf("很遗憾,游戏失败\n");Display(board, row, col);break;}else{show[x][y] = GETCOUNT(board,show, x, y)+'0';Display(show, row, col);win++;}}elseprintf("坐标非法,请重新输入\n");if (win == EASY_MINE){printf("恭喜你,所有的雷已被您找到!\n");show[x][y] = GETCOUNT(board, show,x, y);break;}}
}
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu()
{printf("----------------\n");printf("-----0.exit-----\n");printf("-----1.play-----\n");printf("-----2.rule-----\n");printf("----------------\n");
}
void rule()
{printf("总共有%d个雷\n", EASY_MINE);printf("输入所要查找的坐标,\n如若不是雷,则在该处显示周围雷的\n个数,并随机爆出一圈某几个不是雷的\n位置,并也显示周围雷的个数\n");printf("直到所有被找到\n");
}void game()
{char board[ROW][COL] = { 0 };char show[ROW][COL] = { 0 };//初始化棋盘Init_arr(board, ROW, COL,'0');Init_arr(show, ROW, COL,'*');打印棋盘Display(show, row, col);//布置棋盘SetMine(board, row, col);FindMine(board, show, row, col);//寻找}int main()
{int input;srand((unsigned int)time(NULL));do{menu();scanf("%d", &input);switch (input){case 2:rule(); break;case 1:game(); break;case 0:printf("退出游戏\n"); break;default:printf("输入非法,请重新输入\n"); break;}} while (input);return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include <stdio.h>
#include <time.h>
#include <stdlib.h>#define ROW  11
#define COL  11
#define row 9
#define col 9
#define EASY_MINE 10
void Init_arr(char board[ROW][COL], int a, int b, char c);
void Display(char board[ROW][COL], int a, int b);
void SetMine(char board[ROW][COL], int a, int b);
void FindMine(char board[ROW][COL], char show[ROW][COL], int a, int b);

测试情况

844e2213713a4f91ba755e3085348ec1.png

4e56eec4f8ec446985bc6ec1e056df90.png

c11c2714d6364846a4a9c1eb519fc7f5.pngd1f9bd95ef0c4c41aee34e91eafb0d4a.png

 

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

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

相关文章

GPT实战系列-LangChain的Prompt提示模版构建

GPT实战系列-LangChain的Prompt提示模版构建 LangChain GPT实战系列-LangChain如何构建基通义千问的多工具链 GPT实战系列-构建多参数的自定义LangChain工具 GPT实战系列-通过Basetool构建自定义LangChain工具方法 GPT实战系列-一种构建LangChain自定义Tool工具的简单方法…

科技云报道:造完“大模型”,“具身智能”将引领AI下一个浪潮?

科技云报道原创。 资深机器人专家Eric Jang不久前曾预言&#xff1a;“ChatGPT 曾在一夜之间出现。我认为&#xff0c;有智慧的机器人技术也将如此。” 3月13日深夜&#xff0c;一段人形机器人的视频开始热传。 在视频中&#xff0c;Figure的人形机器人&#xff0c;可以完全…

postgresql查看数据库占用空间大小

在PostgreSQL中&#xff0c;查看数据库及数据表当前数据的占用量可以通过执行特定的SQL查询来实现。以下是几种常用的方法&#xff1a; 1.查看单个数据表的占用空间大小&#xff1a; 使用pg_size_pretty和pg_total_relation_size函数可以获取特定数据表的占用空间大小&#xf…

H12-821_887

887.当业务饥配置为VLANPool时&#xff0c;若用户在一定时间内连续获取IP地址失败且配置了dhcp update vlan assignment threshold命令&#xff0c;则会触发VLANPoo1为用户分配新的VLAN&#xff0c;使用户在新VLAN中重新获取IP地址。 A.TRUE B.FALSE 答案&#xff1a;A 注释&a…

【算法】差分算法详解(模板)

类似于数学中的求导和积分之间的关系&#xff0c;差分可以看成前缀和的逆运算。 差分数组&#xff1a; 首先给定一个原数组a&#xff1a;a[1], a[2], a[3],,,,,, a[n]; 然后我们构造一个数组b &#xff1a; b[1] ,b[2] , b[3],,,,,, b[i]; 使得 a[i] b[1] b[2 ] b[3] ,,,…

Java实现10万,并发去重,优雅地处理重复请求!

对于一些用户请求&#xff0c;在某些情况下是可能重复发送的&#xff0c;如果是查询类操作并无大碍&#xff0c;但其中有些是涉及写入操作的&#xff0c;一旦重复了&#xff0c;可能会导致很严重的后果&#xff0c;例如交易的接口如果重复请求可能会重复下单。 重复的场景有可…

C语言实现飞行小游戏

以下是一个简单的C语言实现飞行小游戏的代码示例。这个游戏中&#xff0c;一个飞机需要控制左右移动来避开悬挂在屏幕上方的飞行杂物&#xff0c;代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h&…

CAD建筑版2024 安装教程

CAD建筑版是一种专门用于建筑设计和绘图的CAD软件版本。它提供了专业的建筑设计工具和功能&#xff0c;帮助建筑师、设计师和工程师在建筑领域进行快速、准确和高效的设计工作。 CAD建筑版具备建筑相关的库和元素&#xff0c;用户可以方便地使用预定义的建筑符号和元素进行建筑…

网络基础(二)

1、应用层 程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层&#xff1b; 1.1、再谈 "协议" 协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如果我们要传输一些 "…

设计模式学习笔记 - 设计原则与思想总结:2.运用学过的设计原则和思想完善之前性能计数器项目

概述 在 《设计原则 - 10.实战&#xff1a;针对非业务的通用框架开发&#xff0c;如何做需求分析和设计及如何实现一个支持各种统计规则的性能计数器》中&#xff0c;我们讲解了如何对一个性能计数器框架进行分析、设计与实现&#xff0c;并且实践了一些设计原则和设计思想。当…

IP代理技术革新:探索数据采集的新路径

引言&#xff1a; 随着全球化进程不断加深&#xff0c;网络数据采集在企业决策和市场分析中扮演着愈发重要的角色。然而&#xff0c;地域限制和IP封锁等问题常常给数据采集工作带来了巨大挑战。亿牛云代理服务凭借其强大的网络覆盖和真实住宅IP资源&#xff0c;成为解决这些问…

ruoyi-nbcio-plus后端里mapstruct-plus和lombok的使用

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

Metasploit Pro 4.22.2-2024021501 (Linux, Windows) - 专业渗透测试框架

Metasploit Pro 4.22.2-2024021501 (Linux, Windows) - 专业渗透测试框架 Rapid7 Penetration testing, Release Feb 15, 2024 请访问原文链接&#xff1a;https://sysin.org/blog/metasploit-pro-4/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页…

verilog设计-CDC:单bit脉冲快时钟域到慢时钟域

一、前言 当单bit信号由快时钟域传递给慢时钟域时&#xff0c;快时钟域的异步信号最小可为快时钟信号的一个时钟周期脉冲&#xff0c;快时钟域的单时钟周期脉冲长度小于慢时钟域的时钟周期&#xff0c;很有可能该脉冲信号在慢时钟域的两个时钟上升沿之间&#xff0c;导致该脉冲…

Django数据库查询

聚合查询 分组查询 F与Q查询 默认情况下,用Q包裹的两个条件,用逗号分割也是and关系 choices参数 只要某个字段的可能性是完全可以列举出来的,可以采取choices参数 该gender字段存的还是数字,但是如果数字在上面的元组列举范围内,该怎么获取对应的值,如果不在范围内,会怎…

shell脚本实例

背景 centos7环境 1、获取进程pid,并且kill掉 #! /bin/bash searchNameXXX pids$(ps -ef | grep ${searchName} |grep -v grep |awk {print $2})for pid in ${pids} doecho "kill pid" $pidkill -9 $pid doneecho "finished ..."######################…

20240321, 字符串操作,STRING.H,字符串函数的实现

啥意思&#xff0c;这个循环是&#xff1f;每次给P分配一个字节&#xff0c;然后把那个位置写入0&#xff1f;但是0是整数吧&#xff1f;他需要四个字节&#xff1f;&#xff1f;&#xff1f;这和0地址有什么关系……啊啊啊啊啊 一&#xff0c;字符串操作 1.0 字符数组 补 0…

【C语言基础篇】字符串处理函数(五)strncpy strncat strncamp的介绍及模拟实现

个人主页&#xff1a; 倔强的石头的博客 系列专栏 &#xff1a;C语言指南 C语言刷题系列 后续补充完善

C# 读取指定文件夹

string[] fileNames Directory.GetFiles("D:\demo"); //获取整个demo的文件不包含文件夹 DirectoryInfo dirInfo new DirectoryInfo("D:\demo"); FileInfo[] fils dirInfo.GetFiles(); //获取整个demo的 文件 不包含文件夹 DirectoryInf…

【Golang星辰图】Go语言魔法使者:解锁消息队列魅力,轻松构建强大应用

极速通信&#xff1a;Go语言中不可错过的消息队列库全面解析 前言 随着现代应用程序的复杂性不断增加&#xff0c;消息队列成为了构建可靠、高效和可扩展系统的关键组件之一。在Go语言领域&#xff0c;开发人员可以利用各种消息队列库来简化消息传递过程&#xff0c;实现异步…