【【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 //但是对于我们幕后调控者,对边角上并不能和其他一样方便操作,所以我们向外拓展了…...
[DM8] DM-DM DBLINK DPI方式
前言 对于DM与DM之间的DBLINK,三种方式中,使用DPI方式配置上最为方便,ODBC方式需要安装ODBC包并配置ODBC数据源,dmmal方式需要设置MAL_INI数据库参数、配置dmmal.ini文件并需要重启数据库服务。 dpi类型的dblink,达梦…...
创建了一个名为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容器,其中存储了一系列的pair<int, int>。代码的逻辑如下:1. 创建一个空的…...
SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置
一.文件上传 1.导入依赖 <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version> </dependency> 2.配置文件上传解析器 在spring-mvc.xml文件中添加文件…...
Leetcode143. 重排链表
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只…...
Git 回顾小结
Git是一个免费开源,分布式的代码版本控制系统,版主开发团队维护代码 作用:记录代码内容,切换代码版本,多人开发时高校合并代码内容 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,使用Python3.7.12,Py…...
inappropriate address 127.0.0.1 for the fudge command, line ignored 时间同步的时候报错
1、安装ntp服务后,启动ntpd正常,但是在查看ntpd服务状态时,有一个红色的报错,报错信息如下: inappropriate address 127.0.0.1 for the fudge command, line ignored 2、解决方法:编辑ntp配置文件…...
linux并发服务器 —— 项目实战(九)
阻塞/非阻塞、同步/异步 数据就绪 - 根据系统IO操作的就绪状态 阻塞 - 调用IO方法的线程进入阻塞状态(挂起) 非阻塞 - 不会改变线程的状态,通过返回值判断 数据读写 - 根据应用程序和内核的交互方式 同步 - 数据的读写需要应用层去读写 …...
生信教程|替代模型选择
摘要 由于教程时间比较久远,因此不建议实操,仅阅读以了解学习。 在运行基于可能性的系统发育分析之前,用户需要决定模型中应包含哪些自由参数:是否应该为所有替换假设单一速率(如序列进化的 Jukes-Cantor 模型…...
redis持久化、主从和哨兵架构
一、redis持久化 1、RDB快照(snapshot) redis配置RDB存储模式,修改redis.conf文件如下配置: # 在300s内有100个或者以上的key被修改就会把redis中的数据持久化到dump.rdb文件中 # save 300 100# 配置数据存放目录(现…...
Python 连接 Oracle 详解
文章目录 1 首先,安装第三方库 cx_Oracle2 其次,配置命令 1 首先,安装第三方库 cx_Oracle 参考 CSDN 博客:Python 安装第三方库详解(含离线) 2 其次,配置命令 import cx_Oracle# 1.数据库连接…...
认识模块化
1. 模块化的基本概念 1.1 什么是模块化 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组 合、分解和更换的单元。 1. 现实生活中的模块化 2.编程领域中的模块化 编程领域中的模块化,…...
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 | 排序内容大总结
不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始,不如现在行动! 文章目录 🌴前言🌴算法整理🌴两个结论🌴总结 🌴前言 本文内容是关于选择排序、冒泡排序、插入排序…...
Go 语言入门指南:基础语法和常用特性解析
什么是Go语言? Go语言是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。它用批判吸收的眼光,融合C语言、Java等众家之长,将简洁、高效演绎得淋漓尽致。 Go语言语法与C相近,但功能上有&a…...
20.添加HTTP模块
添加一个简单的静态HTTP。 这里默认读者是熟悉http协议的。 来看看http请求Request的例子 客户端发送一个HTTP请求到服务器的请求消息,其包括:请求行、请求头部、空行、请求数据。 HTTP之响应消息Response 服务器接收并处理客户端发过来的请求后会返…...
Qemu 架构 硬件模拟器
Qemu 架构 硬件模拟器 Qemu 是纯软件实现的虚拟化模拟器, 几乎可以模拟任何硬件设备, 我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机, 虚拟机认为自己和硬件打交道, 但其实是和 Qemu 模拟出来的硬件打交道ÿ…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
