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,一经查实,立即删除!

相关文章

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

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

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

类似于数学中的求导和积分之间的关系&#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] ,,,…

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;成为解决这些问…

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字段存的还是数字,但是如果数字在上面的元组列举范围内,该怎么获取对应的值,如果不在范围内,会怎…

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

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

LeetCode_Java_递归系列(题目+思路+代码)

206.反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]以此类推&#xff0c;直到反转结束返回头结点 class Solution {public ListNode rever…

是德科技N9020A信号分析仪

181/2461/8938产品概述&#xff1a; N9020A MXA信号分析仪通过增加针对新一代技术的信号分析和频谱分析能力&#xff0c;具备了中档分析仪的更高性能。它突破了以往分析仪的极限&#xff0c;支持业界更快的信号和频谱分析,实现了速度与性能的更佳优化。 速度 测试速度超过其它…

linux之shell脚本基础

1.构建基础脚本 1.1 创建shell脚本 1.1.1 第一行需要指定使用的shell # 用作注释行.shell并不会处理脚本中的注释行,但是第一行的注释,会告诉shell使用哪个shell来运行脚本. #!/bin/bash 1.1.2 让shell找到你的脚本 直接运行脚本会提示-bash: a.sh: command not found.因…

一套键盘鼠标控制两台电脑 Mouse Without Borders

有两台电脑&#xff0c;一台笔记本一台台式机&#xff0c;拥有各自拥有鼠标和键盘&#xff0c;但总是需要切换&#xff0c;感觉太麻烦&#xff0c;想找个简单的方式&#xff0c;不需要额外操作就能同时操作这两台电脑。无意间发现了一个微软软件Mouse Without Borders&#xff…

算法体系-13 第十三 二叉树的基本算法+二叉树的递归套路

一 完全二叉树的判断 1.1 描述 完全二叉树&#xff1a;他每一层都是满的&#xff0c;即使不满也是最后一层不满&#xff0c;最后一层不满也是从左到右变满的&#xff1b;话句话说就是 完全二叉树从根结点到倒数第二层满足完美二叉树&#xff0c;最后一层可以不完全填充&#x…

MySQL数据库 - 索引

一. 索引的相关知识 1. 索引的概念 是一个排序的列表&#xff0c;存储着索引值和这个值所对应的物理地址&#xff08;类似于C语言的链表通过指针指向数据记录的内存地址&#xff09;使用索引后可以不用扫描全表来定位某行的数据&#xff0c;而是先通过索引表找到该行数据对应…

【Godot 3.5控件】用TextureProgress制作血条

说明 本文写自2022年11月13日-14日&#xff0c;内容基于Godot3.5。后续可能会进行向4.2版本的转化。 概述 之前基于ProgressBar创建过血条组件。它主要是基于修改StyleBoxFlat&#xff0c;好处是它几乎可以算是矢量的&#xff0c;体积小&#xff0c;所有东西都是样式信息&am…

基于Arduino IDE 野火ESP8266模块WIiFi开发

一、函数介绍 头文件 #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h>ESP8266WiFi.h库主要用于连接单个WiFi网络。如果需要连接到多个WiFi网络&#xff0c;例如在需要切换不同网络或者备用网络时&#xff0c;可以使用ESP8266WiFiMulti.h头文件&#xff…

java.lang.String final

关于String不可变的问题&#xff1a;从毕业面试到现在&#xff0c;一个群里讨论的东西&#xff0c;反正码农面试啥都有&#xff0c;这也是我不咋喜欢面试代码&#xff0c;因为对于我而言&#xff0c;我并不喜欢这些面试。知道或不知道基本没啥含氧量&#xff0c;就是看看源代码…

【ZooKeeper】2、安装

本文基于 Apache ZooKeeper Release 3.7.0 版本书写 作于 2022年3月6日 14:22:11 转载请声明 下载zookeeper安装包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz解压 tar -zxvf apache-zookeeper-3.7.0-b…