C语言钥匙迷宫2.0

目录

  • 开头
  • 程序
  • 程序的流程图
  • 程序游玩的效果
  • 结尾

开头

大家好,我叫这是我58。废话不多说,咱们直接开始。

程序

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <Windows.h>
enum color {Y,B,R
};
typedef struct Key {enum color co;int ix;int iy;
}Key;
typedef struct Door {enum color co;int ix;int iy;
}Door;
void printmaze(char strmaze[11][11], int* apkeys, Key(*k)[12], Door(*d)[29]) {const char sarr[3][5] = { "33","36","31;1" };Key* ka = *k;Door* da = *d;const Key* const kb = *k + 11;const Door* const db = *d + 28;int ia = 0;int ib = 0;char stc[5] = "";for (ia = 0; ia < 11; ia++) {for (ib = 0; ib < 11; ib++) {while (ka->ix <= ia) {if (ka->iy == ib && ka->ix == ia) {strcpy(stc, sarr[ka->co]);}if (ka == kb) { break; }ka++;}while (da->ix <= ia) {if (da->iy == ib && da->ix == ia) {strcpy(stc, sarr[da->co]);}if (da == db) {break;}da++;}printf("\033[%sm%c\033[0m", 'G' == strmaze[ia][ib] ? "32;1" : !!strcmp(stc,"33") + !!strcmp(stc,"36") + !!strcmp(stc,"31;1") == 2 && 'P' != strmaze[ia][ib] && '*' != strmaze[ia][ib] ? stc : "0", strmaze[ia][ib]);ka = *k;da = *d;strcpy(stc, "");}printf("|\n");}printf("-----------@\n\033[33m黄钥匙*%d\033[0m\n\033[36m蓝钥匙*%d\033[0m\n\033[31;1m红钥匙*%d\033[0m\n", apkeys[0], apkeys[1], apkeys[2]);
}
int main() {int apkeys[3] = { 0 };Key k[12] = { {R,0,5},{Y,0,6},{B,0,8},{R,2,3},{B,3,4},{B,3,6},{Y,4,3},{R,4,7},{Y,6,3},{Y,6,4},{Y,7,1},{Y,9,0} };Door d[29] = { {B,0,7}, {Y,0,10}, {Y,1,0}, {B,1,1}, {R,1,3}, {B,1,6}, {Y,1,9}, {B,1,10}, {B,2,9}, {Y,3,0}, {Y,4,8}, {Y,5,0}, {Y,7,7}, {Y,7,8}, {B,7,9}, {Y,7,10}, {Y,8,0}, {R,8,5}, {Y,8,7}, {R,8,8}, {B,8,9}, {B,8,10}, {B,9,7}, {B,9,8}, {R,9,9}, {R,9,10}, {Y,10,7}, {B,10,8}, {R,10,9} };const Key ka[12] = { {R,0,5},{Y,0,6},{B,0,8},{R,2,3},{B,3,4},{B,3,6},{Y,4,3},{R,4,7},{Y,6,3},{Y,6,4},{Y,7,1},{Y,9,0} };const Door da[29]= { {B,0,7}, {Y,0,10}, {Y,1,0}, {B,1,1}, {R,1,3}, {B,1,6}, {Y,1,9}, {B,1,10}, {B,2,9}, {Y,3,0}, {Y,4,8}, {Y,5,0}, {Y,7,7}, {Y,7,8}, {B,7,9}, {Y,7,10}, {Y,8,0}, {R,8,5}, {Y,8,7}, {R,8,8}, {B,8,9}, {B,8,10}, {B,9,7}, {B,9,8}, {R,9,9}, {R,9,10}, {Y,10,7}, {B,10,8}, {R,10,9} };int i = 0;int ia = 0;char ch = 0;char strmaze[11][11] = {' ',' ',' ',' ','*','+','+','#','+',' ','#','#','#','*','#','*','*','#',' ',' ','#','#',' ',' ','*','+',' ','*','*','*','*','#',' ','#',' ','*',' ','+','*','+',' ','*','*',' ',' ',' ','*','+',' ','*',' ','+','#',' ',' ','#','*','*','*','*','*','*','*','*','*',' ',' ',' ','*','+','+','*',' ',' ',' ',' ',' ',' ','+','*','*',' ','*',' ','#','#','#','#','#',' ',' ','*',' ','#',' ','#','#','#','#','+','*',' ','*','*',' ',' ','#','#','#','#','P','*',' ',' ',' ',' ',' ','#','#','#','G'};const char strmz[] = "    *++#+ ###*#**#  ##  *+ ****# # * +*+ **   *+ * +#  #*********   *++*      +** * #####  * # ####+* **  ####P*     ###G";char* cp = &strmaze[10][0];printf("欢迎你来玩这个\033[33m钥\033[36m匙\033[31;1m迷宫\033[0m,这个迷宫的规则与50层魔塔的规则基本无异,只不过输入“r”可以使你重新开始这个游戏,而且,这三种颜色的“+”:“\033[33m+\033[0m”“\033[36m+\033[0m”“\033[31;1m+\033[0m”分别代表了50层魔塔里的\033[33m黄钥匙\033[0m,\033[36m蓝钥匙\033[0m和\033[31;1m红钥匙\033[0m,并且那三种颜色的“#”:“\033[33m#\033[0m”“\033[36m#\033[0m”“\033[31;1m#\033[0m”分别代表了50层魔塔里的\033[33m黄门\033[0m,\033[36m蓝门\033[0m和\033[31;1m红门\033[0m,你明白了吗?");Sleep(6600);system("cls");while ('G' == strmaze[10][10]) {int ix = (cp - &strmaze[0][0]) / 11;int iy = (cp - &strmaze[0][0]) % 11;for (ia = 0; ia < 12; ia++) {if (k[ia].ix == ix && k[ia].iy == iy && -2 != k[ia].ix + k[ia].iy) {apkeys[k[ia].co]++;k[ia].ix = -1;k[ia].iy = -1;}}printmaze(strmaze, apkeys, &k, &d);scanf("%c", &ch);while ('\n' != getchar()) {;}*cp = ' ';switch (ch) {case 'w':for (i = 0; i < 11; i++) {if (cp == &strmaze[0][i]) {break;}}(11 == i && '*' != *(cp - 11) && '#' != *(cp - 11)) && (cp -= 11);for (ia = 0; ia < 29; ia++) {if (apkeys[d[ia].co] > 0 && -1 != d[ia].ix && -1 != d[ia].iy && d[ia].ix == ix - 1 && d[ia].iy == iy) {strmaze[d[ia].ix][d[ia].iy] = ' ';apkeys[d[ia].co]--;d[ia].ix = -1;d[ia].iy = -1;}}break;case 'a':for (i = 0; i < 11; i++) {if (cp == &strmaze[i][0]) {break;}}(11 == i && '*' != *(cp - 1) && '#' != *(cp - 1)) && cp--;for (ia = 0; ia < 29; ia++) {if (apkeys[d[ia].co] > 0 && -1 != d[ia].ix && -1 != d[ia].iy && d[ia].ix == ix && d[ia].iy == iy - 1) {strmaze[d[ia].ix][d[ia].iy] = ' ';apkeys[d[ia].co]--;d[ia].ix = -1;d[ia].iy = -1;}}break;case 's':for (i = 0; i < 11; i++) {if (cp == &strmaze[10][i]) {break;}}(11 == i && '*' != *(cp + 11) && '#' != *(cp + 11)) && (cp += 11);for (ia = 0; ia < 29; ia++) {if (apkeys[d[ia].co] > 0 && -1 != d[ia].ix && -1 != d[ia].iy && d[ia].ix == ix + 1 && d[ia].iy == iy) {strmaze[d[ia].ix][d[ia].iy] = ' ';apkeys[d[ia].co]--;d[ia].ix = -1;d[ia].iy = -1;}}break;case 'd':for (i = 0; i < 11; i++) {if (cp == &strmaze[i][10]) {break;}}(11 == i && '*' != *(cp + 1) && '#' != *(cp + 1)) && cp++;for (ia = 0; ia < 29; ia++) {if (apkeys[d[ia].co] > 0 && -1 != d[ia].ix && -1 != d[ia].iy && d[ia].ix == ix && d[ia].iy == iy + 1) {strmaze[d[ia].ix][d[ia].iy] = ' ';apkeys[d[ia].co]--;d[ia].ix = -1;d[ia].iy = -1;}}break;case 'r':for (ia = 0; ia < 12; ia++) {k[ia] = ka[ia];d[ia] = da[ia];}for (; ia < 29; ia++) {d[ia] = da[ia];}for (i = 0; i < 121; i++) {strmaze[0][i] = strmz[i];}cp = &strmaze[10][0];for (i = 0; i < 3; i++) {apkeys[i] = 0;}break;default:break;}*cp = 'P';system("cls");}system("color 0A");printf("恭喜你,你赢了\n");return 0;
}

程序的流程图

开始
把宏_CRT_SECURE_NO_WARNINGS定义为1
导入stdio.h
导入string.h
导入Windows.h
创建枚举color,并把枚举color里的“Y”“B”“R”分别初始化为0,1和2
创建一个Key结构体,里面有类型为枚举color的co,整型ix和整型iy,并去掉结构体Key中的struct关键字
创建一个Door结构体,里面有类型为枚举color的co,整型ix和整型iy,并去掉结构体Door中的struct关键字
定义printmaze函数
把有三个整型的整型数组apkeys都初始化为0
把有12个结构体Key的变量的数组k分别初始化为{R,0,5},{Y,0,6},{B,0,8},{R,2,3},{B,3,4},{B,3,6},{Y,4,3},{R,4,7},{Y,6,3},{Y,6,4},{Y,7,1},{Y,9,0}
把有29个结构体Door的变量的数组d分别初始化为{B,0,7}, {Y,0,10}, {Y,1,0}, {B,1,1}, {R,1,3}, {B,1,6}, {Y,1,9}, {B,1,10}, {B,2,9}, {Y,3,0}, {Y,4,8}, {Y,5,0}, {Y,7,7}, {Y,7,8}, {B,7,9}, {Y,7,10}, {Y,8,0}, {R,8,5}, {Y,8,7}, {R,8,8}, {B,8,9}, {B,8,10}, {B,9,7}, {B,9,8}, {R,9,9}, {R,9,10}, {Y,10,7}, {B,10,8}, {R,10,9}
把有12个结构体Key的变量的常量数组ka也分别初始化为{R,0,5},{Y,0,6},{B,0,8},{R,2,3},{B,3,4},{B,3,6},{Y,4,3},{R,4,7},{Y,6,3},{Y,6,4},{Y,7,1},{Y,9,0}
把有29个结构体Door的变量的常量数组da也分别初始化为{B,0,7}, {Y,0,10}, {Y,1,0}, {B,1,1}, {R,1,3}, {B,1,6}, {Y,1,9}, {B,1,10}, {B,2,9}, {Y,3,0}, {Y,4,8}, {Y,5,0}, {Y,7,7}, {Y,7,8}, {B,7,9}, {Y,7,10}, {Y,8,0}, {R,8,5}, {Y,8,7}, {R,8,8}, {B,8,9}, {B,8,10}, {B,9,7}, {B,9,8}, {R,9,9}, {R,9,10}, {Y,10,7}, {B,10,8}, {R,10,9}
定义整型i为0
定义整型ia为0
定义字符ch为0
把有11行11列的二维字符数组strmaze初始化为下面的图片

等待6.6秒,等待好后就清屏
是(break)
否(break)
清屏
是(break)
否(break)
是(break)
否(break)
是(break)
否(break)
否(break)
否(break)
把常量字符串strmz初始化为“ *++#+ ###*#**# ## *+ ****# # * +*+ ** *+ * +# #********* *++* +** * ##### * # ####+* ** ####P* ###G”
把字符指针cp设为二维字符数组strmaze的第10行第0列的地址
输出“欢迎你来玩这个\​033[33m钥\​033[36m匙\​033[31;1m迷宫\​033[0m,这个迷宫的规则与50层魔塔的规则基本无异,而你只需要到达终点“\​033[32;1mG\​033[0m”就可以了,只不过输入“r”可以使你重新开始这个游戏,而且,这三种颜色的“+”:“\​033[33m+\​033[0m”“\​033[36m+\​033[0m”“\​033[31;1m+\​033[0m”分别代表了50层魔塔里的\​033[33m黄钥匙\​033[0m,\​033[36m蓝钥匙\​033[0m和\​033[31;1m红钥匙\​033[0m,并且那三种颜色的“#”:“\​033[33m#\​033[0m”“\​033[36m#\​033[0m”“\​033[31;1m#\​033[0m”分别代表了50层魔塔里的\​033[33m黄门\​033[0m,\​033[36m蓝门\​033[0m和\​033[31;1m红门\​033[0m,你明白了吗?”
'G' == strmaze[10][10]?
定义整型ix为cp与二维字符数组strmaze的第0行第0列的地址的差除以11的结果
定义整型iy为cp与二维字符数组strmaze的第0行第0列的地址的差模11的结果
设i为0
ia < 12?
k[ia].ix == ix && k[ia].iy == iy && -2 != k[ia].ix + k[ia].iy?
把apkeys的第k的第ia项的成员变量co的值项自增1
k的第ia项的成员变量ix设为-1
k的第ia项的成员变量iy设为-1
ia自增1
执行printmaze函数,参数有二维字符数组strmaze,apkeys,结构体Key的变量k的地址和结构体Door的变量d的地址
把ch设为你输入的字符
'\n' != getchar()?
把解引用的cp设为空格
'w' == ch?
设i为0
i < 11?
cp == &strmaze[0][i]?
11 == i && '*' != *(cp - 11) && '#' != *(cp - 11)?
把cp向左移动11位
设ia为0
ia < 29?
apkeys[d[ia].co] > 0 && -1 != d[ia].ix && -1 != d[ia].iy && d[ia].ix == ix - 1 && d[ia].iy == iy?
把二维字符数组strmaze的第d的ia项的成员变量ix的值行第d的第ia项的成员变量iy的值列设为空格
apkeys的第d的第ia项的成员变量co的值项自减1
把d的第ia项的成员变量ix设为-1
把d的第ia项的成员变量iy也设为-1
ia自增1
把解引用的cp设为字符“P”
把窗口的背景色设为黑色,前景色设为淡绿色
输出“恭喜你,你赢了\n”
结束
'a' == ch?
设i为0
i < 11?
cp == &strmaze[i][0]?
11 == i && '*' != *(cp - 1) && '#' != *(cp - 1)?
把cp向左移动一位
设ia为0
ia < 29?
apkeys[d[ia].co] > 0 && -1 != d[ia].ix && -1 != d[ia].iy && d[ia].ix == ix && d[ia].iy == iy - 1?
把二维字符数组strmaze的第d的ia项的成员变量ix的值行第d的第ia项的成员变量iy的值列设为空格
apkeys的第d的第ia项的成员变量co的值项自减1
把d的第ia项的成员变量ix设为-1
把d的第ia项的成员变量iy也设为-1
i自增1
's' == ch?
设i为0
i < 11?
cp == &strmaze[10][i]?
11 == i && '*' != *(cp + 11) && '#' != *(cp + 11)?
把cp向右移动11位
设ia为0
ia < 29?
apkeys[d[ia].co] > 0 && -1 != d[ia].ix && -1 != d[ia].iy && d[ia].ix == ix + 1 && d[ia].iy == iy?
把二维字符数组strmaze的第d的ia项的成员变量ix的值行第d的第ia项的成员变量iy的值列设为空格
apkeys的第d的第ia项的成员变量co的值项自减1
把d的第ia项的成员变量ix设为-1
把d的第ia项的成员变量iy也设为-1
ia自增1
'd' == ch?
设i为0
i < 11?
cp == &strmaze[i][10]?
11 == i && '*' != *(cp + 1) && '#' != *(cp + 1)?
把cp向右移动一位
设ia为0
ia < 29?
apkeys[d[ia].co] > 0 && -1 != d[ia].ix && -1 != d[ia].iy && d[ia].ix == ix && d[ia].iy == iy + 1?
把二维字符数组strmaze的第d的ia项的成员变量ix的值行第d的第ia项的成员变量iy的值列设为空格
apkeys的第d的第ia项的成员变量co的值项自减1
把d的第ia项的成员变量ix设为-1
把d的第ia项的成员变量iy也设为-1
ia自增1
'r' == ch?
设i为0
ia < 12?
把k的第ia项设为ka的第ia项
把d的第ia项设为da的第ia项
ia自增1
ia < 29?
把d的第ia项设为da的第ia项
ia自增1
设i为0
i < 121?
把二维字符数组strmaze第0行第i列设为字符串strmz的第i项
i自增1
把cp设为二维数组strmaze第10行第0列的地址
设i为0
i < 3?
把apkeys的第i项设为0
i自增1
i自增1
i自增1
i自增1
i自增1
printfmaze函数
是(break)
是(break)
结束
开始
把有3行5列二维常量字符串数组sarr分别初始化为“33”“36”和“31;1”
定义结构体Key指针ka为解引用的k
定义结构体Door指针da为解引用的d
定义结构体Key常量指针常量kb为解引用的k加上11的结果
定义结构体Door常量指针常量db为解引用的d加上28的结果
定义整型ia为0
定义整型ib为0
把有5个字符的字符串stc初始化为空字符串
设ia为0
ia < 11?
设ib为0
ib < 11?
ka->ix <= ia?
ka->iy == ib && ka->ix == ia?
把sarr的第ka指向的成员变量co的值项拷贝到字符串stc里面去
ka == kb?
da->ix <= ia?
da->iy == ib && da->ix == ia?
把sarr的第da指向的成员变量co的值项拷贝到字符串stc里面去
da == db?
输出“\​033[%sm%c\​033[0m”(如果字符“G”为二维字符数组strmaze第ia行第ib列的元素,那么就代“32;1”,否则如果stc是否与“33”相等的逻辑值加上stc是否与“36”相等的逻辑值加上stc是否与“32;1”相等的逻辑值的和为2,并且字符“P”不为二维字符数组strmaze第ia行第ib列的元素,而且字符“*”不为二维字符数组strmaze第ia行第ib列的元素,那么就代字符串stc,否则代“0”,“%c”则代二维字符数组strmaze的第ia行第ib列的元素)
把ka设为解引用的k
把da设为解引用的d
把空字符串拷贝到字符串stc里面去
ib自增1
输出“|\​n”
ia自增1
输出“-----------@\​n\​033[33m黄钥匙*%d\​033[0m\​n\​033[36m蓝钥匙*%d\​033[0m\​n\​033[31;1m红钥匙*%d\​033[0m\​n”(三个“%d”分别代apkeys的第0项,apkeys的第1项和apkeys的第2项)
把ka向右移动一位
把da向右移动一位

程序游玩的效果

钥匙迷宫2.0

结尾

在你看到这里之后,可以评论来互动一下我哦。

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

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

相关文章

裸金属服务器和裸金属云服务器:区别、优势与选择

首先&#xff0c;必须肯定的是&#xff1a;裸金属服务器和裸金属云服务器是有区别的。 ‌ 二者的概述 裸金属服务器&#xff08;‌Bare Metal Server&#xff09;‌是一种物理服务器&#xff0c;‌它直接在硬件上运行&#xff0c;‌没有额外的虚拟化层。‌这意味着每个应用程…

ChatGLM-4-9b-chat本地化|天翼云GPU上vLLM本地部署开源模型完整攻略

“ 拥有一个私有化的领先国产开源大模型&#xff1f;本文详细介绍了如何在天翼云GPU上使用vLLM部署ChatGLM-4-9b-chat本地化模型的完整攻略&#xff0c;助您快速上手。” 01 — vLLM 本来打算用ollama在GPU服务器上部署开源模型GLM4&#xff0c;在之前文章有部署教程&#xff1…

刷题篇 - 03

题目一&#xff1a; 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; public ListNode removeElements(ListNode head, int val) {//1. 如果链表为null&#xff0c;直接返回headif (head null) {return head;}//2. 定义快慢指针ListNode pre head;ListNode del …

Tomcat:Web 领域的闪耀明珠,魅力何在?

一、Web技术 HTTP 协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最为广泛的一种网络协议。它的主要作用是在客户端和服务器之间传输超文本数据&#xff0c;如网页、图片、视频等。 HTTP 协议的特点 无状态性 HTTP 协议是…

STM32H7双路CAN踩坑记录

STM32H7双路CAN踩坑记录 目录 STM32H7双路CAN踩坑记录1 问题描述2 原因分析3 解决办法4 CAN配置参考代码 1 问题描述 STM32的CAN1和CAN2无法同时使用。 注&#xff1a;MCU使用的是STM32H743&#xff0c;其他型号不确定是否一样&#xff0c;本文只以STM32H743举例说明。 2 原因…

了解同步带选择同步带

同步带和轮选型 同步带传动属于皮带传动&#xff0c;但是改进了传统皮带传动无法保持严格的传动比的打滑问题&#xff0c;传统皮带传动依靠皮带和皮带轮张紧时产生的摩擦力传输动力&#xff0c;但是从动轮遇到障碍或超载荷时&#xff0c;皮带会在皮带轮产生滑动。 解决打滑问题…

项目1 物流仓库管理系统

一、项目概述 本项目旨在开发一个功能全面的物流仓库管理系统&#xff0c;以数字化手段优化仓库作业流程&#xff0c;提高管理效率。系统集成了前端用户交互界面与后端数据处理逻辑&#xff0c;涵盖了从用户注册登录、订单管理、货单跟踪到用户信息维护等多个核心业务模块。通…

前端3d动画-----平移 transform: translate3d()

必须加这个属性&#xff1a;transform-style: preserve-3d; perspective: 900px; 设置了景深才能感到近大远小的感觉 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible&q…

分享一个基于python爬虫的“今日头条”新闻数据分析可视化系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

AI赋能软件测试:从自动化到智能化,让测试工作事半功倍

引言 在当今这个日新月异的数字时代&#xff0c;人工智能&#xff08;AI&#xff09;正以不可阻挡之势渗透并重塑着各行各业&#xff0c;其中&#xff0c;软件开发与测试领域更是迎来了前所未有的变革。随着软件系统的复杂性日益增加&#xff0c;用户对软件质量、性能及安全性的…

Nginx笔记(高级)

扩容 通过扩容提升整体吞吐量 单机垂直扩容&#xff1a;硬件资源增加 云服务资源增加 整机&#xff1a;IBM、浪潮、DELL、HP等CPU/主板&#xff1a;更新到主流网卡&#xff1a;10G/40G网卡磁盘&#xff1a;SAS(SCSI) HDD&#xff08;机械&#xff09;、HHD&#xff08;混合&…

android13布局查看工具 无源码查看布局 在线查找ui布局id

总纲 android13 rom 开发总纲说明 目录 1.前言 2.工具介绍 2.1工具1 2.2工具2 2.3工具3 2.4工具4 3.彩蛋 1.前言 Android 13提供了一些工具来帮助开发人员查看和优化应用的布局。方便的让我们找到具体应用的布局文件等信息。 2.工具介绍 2.1工具1 老版本DDMS&#x…

封装通用第三方平台用户表(微信开放平台)

文章目录 一. 注册微信开放平台1.1 开发者资质认证1.2 应用申请1.3 配置应用 二.通用数据库表设计三.入库实体类四. 对接第三方平台4.1 微信开放平台VO对象4.2 通用方法 我们的系统可能要对接很多第三方系统&#xff0c;为了便利用户授权使用和对多平台账户的管理。有必要设计通…

ant design pro 技巧之实现列表页多标签

ant design pro 如何去保存颜色ant design pro v6 如何做好角色管理ant design 的 tree 如何作为角色中的权限选择之一ant design 的 tree 如何作为角色中的权限选择之二ant design pro access.ts 是如何控制多角色的权限的ant design pro 中用户的表单如何控制多个角色ant des…

影响五金精密零件加工价格的因素

在制造业中&#xff0c;五金精密零件的加工价格受到多种因素的影响。了解这些因素&#xff0c;对于企业合理控制成本、选择合适的加工供应商至关重要。 首先&#xff0c;零件的设计复杂度是一个重要因素。复杂的设计通常需要更先进的加工技术和更多的加工工序。例如&#xff0c…

Unity编辑器扩展:创建一个欢迎窗口,在启动Editor的时候显示自定义窗口。

Unity编辑器扩展&#xff1a;创建一个欢迎窗口&#xff0c;在启动Editor的时候显示自定义窗口。 在Unity开发过程中&#xff0c;经常会遇到需要向其他人展示重要信息的情况&#xff0c;比如项目文档、脚本说明、插件介绍等。这个窗口不仅能够展示必要的文档信息&#xff0c;还…

用手机写一本电子书

第1步、进入Andi.cn网站 第2步、点击登录&#xff0c;注册用户 第3步、点击去创作&#xff0c;进入创作页面 第4步、点击右下角的小笔&#xff0c;写一篇文章 第5步、下翻&#xff0c;点击提交按钮 第6步、再写一篇文章 第7步、点击栏目设计 第8步、进入栏目设计&#xff0c;点…

FFmpeg的入门实践系列三(基础知识)

欢迎诸位来阅读在下的博文~ 在这里&#xff0c;在下会不定期发表一些浅薄的知识和经验&#xff0c;望诸位能与在下多多交流&#xff0c;共同努力 文章目录 前期博客一、音视频常用术语二、FFmpeg库的结构介绍三、FFmpeg的常用函数初始化封装格式编解码器相关 四、FFmpeg常用的数…

安装搭建MongoDB及配置副本集

目录 一、什么是MongoDB的副本集 简介 &#xff08;1&#xff09;冗余和数据可用性 &#xff08;2&#xff09;MongoDB中的复制 &#xff08;3&#xff09;主从复制和副本集区别 二、副本集的架构 三、副本集的成员 四、部署副本集 1、节点划分 2、安装MongoDB 2.1、…