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

【【C语言康复训练-4】】

C语言康复训练-4

head.h

#pragma once
#define ROWS 11
#define COLS 11
#define ROW 9//为什么会在头文件中定义两个 因为1到9是我们想要实现的标准单元
#define COL 9 //但是对于我们幕后调控者,对边角上并不能和其他一样方便操作,所以我们向外拓展了一圈
#define number 10
void menu();
void game();
void initboard(char board[ROWS][COLS], int rows, int cols, char ret);
void displayboard(char board[ROWS][COLS], int row, int col);
void mailei(char board[ROWS][COLS], int row, int col);
void pailei(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
int tongji(char board[ROWS][COLS], int row, int col);
void jifa(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col, int x, int y);
void biaoji(char show[ROWS][COLS], int row, int col);

head.c

#define _CRT_SECURE_NO_WARNINGS  1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"head.h"int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请开始你的选择:\n");scanf("%d", &input);switch (input){case 1:  printf("游戏开始:\n");game(); break;case 0: printf("爱玩玩,不玩滚\n"); break;default: printf("输入非法,请重试\n"); break;}} while (input);return 0;
}

project.c

#define _CRT_SECURE_NO_WARNINGS  1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"head.h"void menu()
{printf("*************************\n");printf("*************************\n");printf("*******1.开始游戏********\n");printf("*******0.退出游戏********\n");printf("*************************\n");printf("*************************\n");
}void game()
{//进行任何游戏首先第一步是建立一个表格char mine[ROWS][COLS] = { 0 };//ROWS和COLS代表行和列因为在此处一直用上我们在头文件中定义//这样以后对于行列的修改会更加便利char show[ROWS][COLS] = { 0 };//创建一个显示模块,//在实现扫雷过程中,我们将埋雷与排雷置于两张表格initboard(mine, ROWS, COLS, '0');//初始化埋雷表格,置入字符‘0’initboard(show, ROWS, COLS, '*');//初始化结束,对于玩家来说到这里什么也没有,那么我先写一个显示模块// displayboard(mine, ROW, COL);//地雷模块我们一般显示只是为了确认正确性// displayboard(show, ROW, COL);//显示模块是显示在屏幕上的我们把自己增加的外围去掉用ROW//当初始化完成之后,我们需要真正开始游戏mailei(mine, ROW, COL);//埋雷// displayboard(mine, ROW, COL);displayboard(show, ROW, COL);//display只是为了调试时候方便 最后哪个不好看,自己删去即可//雷埋好了,也显示出来了我们需要去排雷pailei(mine, show, ROW, COL);
}//初始化
void initboard(char board[ROWS][COLS], int rows, int cols, char ret)
{int i = 0;int j = 0;//设定两个数开始循环for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = ret;//为什么要设置ret 因为我们在初始化显示模块与地雷模块时赋予了不同的值//为了使两个模块在一次初始化中就完成操作}}}
//显示模块
void displayboard(char board[ROWS][COLS], int row, int col)
{//依次打印值喽int i = 0;int j = 0;for (i = 0; i <= row; i++)//第一行打印 数字序列 1到9{printf("%d ", i);}printf("\n");//换行真正意义上打印数字组for (i = 1; i <= row; i++){printf("%d ", i);//每次经过一轮打印一个数字for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}
}
//埋雷模块
void mailei(char board[ROWS][COLS], int row, int col)
{//我们需要电脑生成随机数。随机生成地雷int x = 0;int y = 0;int count = number;//头文件定义雷的数量是10个while (count)//怎么保证有指定数量的雷呢,这里用count--{x = rand() % row + 1;//指的是1-9y = rand() % col + 1;//rand模块我们需要去game函数中定义if (board[x][y] == '0'){board[x][y] = '1';count--;}}
}
//排雷模块
void pailei(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;char ch = 0;while (win < row * col - number){printf("请输入雷区坐标:\n");//让用户输入坐标scanf("%d%d", &x, &y);//输入坐标我们首先判断是不是无效坐标if (x >= 1 && y >= 1 && x <= row && y <= col){if (mine[x][y] == '1'){printf("你输了\n");displayboard(mine, ROW, COL);break;}else{//此处不是地雷,我们需要激发周围的对象,就像原版扫雷一样,炸开直至看到是地雷的序号//需要我们去递归进行操作jifa(mine, show, row, col, x, y);displayboard(show, row, col);printf("是否标记:Y,不需要标记:N\n");while ((ch = getchar()) != '\n');//剔除掉我们最喜欢摁的回车scanf("%c", &ch);switch (ch){case 'Y':biaoji(show, row, col);break;default:break;}}}else{printf("字符非法,请重新输入:");}}if (win >= row * col - number){printf("扫雷成功");}else{printf("扫雷失败\n");}
}
//统计模块int tongji(char mine[ROWS][COLS], int x, int y)
{//因为我们是字符0,地雷为字符1 ,根据ASICII码值我们得出结论‘1’-‘0’=1return  mine[x - 1][y] +mine[x - 1][y - 1] +mine[x - 1][y + 1] +mine[x][y - 1] +mine[x - 1][y + 1] +mine[x + 1][y - 1] +mine[x + 1][y] +mine[x + 1][y + 1] - 8 * '0';
}
//激发模块
void jifa(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col, int x, int y)
{//激发面对的是如果if (x >= 1 && x <= row && y >= 1 && y <= col){int z = tongji(mine, x, y);if (z == 0){//把附近没有地雷的位置变成字符 “空格”show[x][y] = ' ';int i = 0;//向四周共8个位置递归调用for (i = x - 1; i <= x + 1; i++)//3行{int j = 0;for (j = y - 1; j <= y + 1; j++)//3列{if (show[i][j] == '*'){jifa(mine, show, row, col, i, j);}}}}else{show[x][y] = z + '0';}}
}
//标记模块
void biaoji(char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;while (1){printf("请输入要标记的坐标:");scanf("%d%d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (show[x][y] == '*'){show[x][y] = '!';break;}else{printf("输入非法,请重新输入:\n");}}else{printf("输入非法,请重新输入:\n");}}displayboard(show, row, col);
}

相关文章:

【【C语言康复训练-4】】

C语言康复训练-4 head.h #pragma once #define ROWS 11 #define COLS 11 #define ROW 9//为什么会在头文件中定义两个 因为1到9是我们想要实现的标准单元 #define COL 9 //但是对于我们幕后调控者&#xff0c;对边角上并不能和其他一样方便操作&#xff0c;所以我们向外拓展了…...

[DM8] DM-DM DBLINK DPI方式

前言 对于DM与DM之间的DBLINK&#xff0c;三种方式中&#xff0c;使用DPI方式配置上最为方便&#xff0c;ODBC方式需要安装ODBC包并配置ODBC数据源&#xff0c;dmmal方式需要设置MAL_INI数据库参数、配置dmmal.ini文件并需要重启数据库服务。 dpi类型的dblink&#xff0c;达梦…...

创建了一个名为nums_list的vector容器,其中存储了一系列的pair<int, int>

vector<pair<int, int>> nums_list;for (int i 0; i < nums.size(); i) {nums_list.emplace_back(i, nums[i]);}这段代码创建了一个名为nums_list的vector容器&#xff0c;其中存储了一系列的pair<int, int>。代码的逻辑如下&#xff1a;1. 创建一个空的…...

SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置

一.文件上传 1.导入依赖 <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version> </dependency> 2.配置文件上传解析器 在spring-mvc.xml文件中添加文件…...

Leetcode143. 重排链表

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只…...

Git 回顾小结

Git是一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;版主开发团队维护代码 作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高校合并代码内容 Git常用命令 命令作用注意git -v查看Git版本git init初始化本地Git仓库git add 文件…...

响应式布局(3种) + flex计算

响应式布局 1.媒体查询2.使用百分比、rem、vw、vh等相对单位来设置元素的宽度、高度、字体大小等1.rem与em2.vw、vh、vmax、vmin 3.Flexboxflexbox计算题 响应式布局是指同一个页面在不同屏幕尺寸下有不同的布局。 1.媒体查询 媒体查询是最基础的实现响应式的方式 使用media关键…...

Pytorch从零开始实战01

Pytorch从零开始实战——MNIST手写数字识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——MNIST手写数字识别环境准备数据集模型选择模型训练可视化展示 环境准备 本系列基于Jupyter notebook&#xff0c;使用Python3.7.12&#xff0c;Py…...

inappropriate address 127.0.0.1 for the fudge command, line ignored 时间同步的时候报错

1、安装ntp服务后&#xff0c;启动ntpd正常&#xff0c;但是在查看ntpd服务状态时&#xff0c;有一个红色的报错&#xff0c;报错信息如下&#xff1a; inappropriate address 127.0.0.1 for the fudge command, line ignored 2、解决方法&#xff1a;编辑ntp配置文件&#xf…...

linux并发服务器 —— 项目实战(九)

阻塞/非阻塞、同步/异步 数据就绪 - 根据系统IO操作的就绪状态 阻塞 - 调用IO方法的线程进入阻塞状态&#xff08;挂起&#xff09; 非阻塞 - 不会改变线程的状态&#xff0c;通过返回值判断 数据读写 - 根据应用程序和内核的交互方式 同步 - 数据的读写需要应用层去读写 …...

生信教程|替代模型选择

摘要 由于教程时间比较久远&#xff0c;因此不建议实操&#xff0c;仅阅读以了解学习。 在运行基于可能性的系统发育分析之前&#xff0c;用户需要决定模型中应包含哪些自由参数&#xff1a;是否应该为所有替换假设单一速率&#xff08;如序列进化的 Jukes-Cantor 模型&#xf…...

redis持久化、主从和哨兵架构

一、redis持久化 1、RDB快照&#xff08;snapshot&#xff09; redis配置RDB存储模式&#xff0c;修改redis.conf文件如下配置&#xff1a; # 在300s内有100个或者以上的key被修改就会把redis中的数据持久化到dump.rdb文件中 # save 300 100# 配置数据存放目录&#xff08;现…...

Python 连接 Oracle 详解

文章目录 1 首先&#xff0c;安装第三方库 cx_Oracle2 其次&#xff0c;配置命令 1 首先&#xff0c;安装第三方库 cx_Oracle 参考 CSDN 博客&#xff1a;Python 安装第三方库详解&#xff08;含离线&#xff09; 2 其次&#xff0c;配置命令 import cx_Oracle# 1.数据库连接…...

认识模块化

1. 模块化的基本概念 1.1 什么是模块化 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组 合、分解和更换的单元。 1. 现实生活中的模块化 2.编程领域中的模块化 编程领域中的模块化&#xff0c;…...

2023年及以后语言、视觉和生成模型的发展和展望

一、简述 在过去的十年里,研究人员都在追求类似的愿景——帮助人们更好地了解周围的世界,并帮助人们更好地了解周围的世界。把事情做完。我们希望建造功能更强大的机器,与人们合作完成各种各样的任务。各种任务。复杂的信息搜寻任务。创造性任务,例如创作音乐、绘制新图片或…...

OpenLdap +PhpLdapAdmin + Grafana docker-compose部署安装

目录 一、OpenLdap介绍 二、PhpLdapAdmin介绍 三、使用docker-compose进行安装 1. docker-compose.yml 2. grafana配置文件 3. provisioning 四、安装openldap、phpldapadmin、grafana 五、配置OpenLDAP 1. 登陆PhpLdapAdmin web管理 2. 需要注意的细节 内容介绍参考…...

Java | 排序内容大总结

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;前言&#x1f334;算法整理&#x1f334;两个结论&#x1f334;总结 &#x1f334;前言 本文内容是关于选择排序、冒泡排序、插入排序…...

Go 语言入门指南:基础语法和常用特性解析

什么是Go语言&#xff1f; Go语言是Google开发的一种静态强类型、编译型、并发型&#xff0c;并具有垃圾回收功能的编程语言。它用批判吸收的眼光&#xff0c;融合C语言、Java等众家之长&#xff0c;将简洁、高效演绎得淋漓尽致。 Go语言语法与C相近&#xff0c;但功能上有&a…...

20.添加HTTP模块

添加一个简单的静态HTTP。 这里默认读者是熟悉http协议的。 来看看http请求Request的例子 客户端发送一个HTTP请求到服务器的请求消息&#xff0c;其包括&#xff1a;请求行、请求头部、空行、请求数据。 HTTP之响应消息Response 服务器接收并处理客户端发过来的请求后会返…...

Qemu 架构 硬件模拟器

Qemu 架构 硬件模拟器 Qemu 是纯软件实现的虚拟化模拟器&#xff0c; 几乎可以模拟任何硬件设备&#xff0c; 我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机&#xff0c; 虚拟机认为自己和硬件打交道&#xff0c; 但其实是和 Qemu 模拟出来的硬件打交道&#xff…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...