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

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;
}

程序的流程图

等待6.6秒,等待好后就清屏
是(break)
否(break)
清屏
是(break)
否(break)
是(break)
否(break)
是(break)
否(break)
否(break)
否(break)
开始
把宏_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初始化为左边指向的图片
把常量字符串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

结尾

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

相关文章:

C语言钥匙迷宫2.0

目录 开头程序程序的流程图程序游玩的效果结尾 开头 大家好&#xff0c;我叫这是我58。废话不多说&#xff0c;咱们直接开始。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <Windows.h> enum color {Y,B,R …...

【多线程】初步认识Thread类及其应用

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 上篇文章我们简单介绍了什么是进程与线程&#xff0c;以及他们之间的区别与联系&#xff0c;实际应用中还是以多线程编程为主的&#xff0c;所以这篇文章就让我们更加深入地去剖…...

algorithm算法库学习之——划分操作和排序操作

algorithm此头文件是算法库的一部分。本篇介绍划分操作和排序操作。 划分操作 is_partitioned (C11) 判断范围是否已按给定的谓词划分 (函数模板) partition 将范围中的元素分为两组 (函数模板) partition_copy (C11) 复制一个范围&#xff0c;将各元素分为两组 (函数模板) st…...

XSS实验记录

目录 XXS地址 实验过程 Ma Spaghet Jeff Ugandan Knuckles Ricardo Milos Ah Thats Hawt Ligma Mafia Ok, Boomer XXS地址 XSS Game - Learning XSS Made Simple! | Created by PwnFunction 实验过程 Ma Spaghet 要求我们弹出一个alert(1337)sandbox.pwnfuncti…...

Cortex-A7的GIC(全局中断控制器)使用方法(7):基于stm32MP135的GIC配置中断效果测试

0 参考资料 STM32MP13xx参考手册.pdf&#xff08;RM0475&#xff09; ARM Generic Interrupt Controller Architecture version 2.0 - Architecture Specification.pdf 1 GIC配置中断效果测试 前面我们已经实现了GIC的配置&#xff0c;为了验证GIC是否配置有效&#xff0c;本例…...

c++动态数组new和delete

文章目录 动态数组的使用大全1. **基本创建和初始化**2. **动态调整大小**3. **动态数组的使用与标准库 std::vector**4. **动态数组作为函数参数**输出 5. **使用动态数组存储用户输入** 动态数组的使用大全 1. 基本创建和初始化 示例&#xff1a; #include <iostream&g…...

Redis热点知识速览(redis的数据结构、高性能、持久化、主从复制、集群、缓存淘汰策略、事务、Pub/Sub、锁机制、常见问题等)

Redis是一个开源的、使用内存作为存储的、支持数据结构丰富的NoSQL数据库。它的高性能、灵活性和简单易用使其在许多场景下成为首选的缓存解决方案。以下是Redis的常见和热点知识总结。 数据结构 Redis支持五种基本数据结构&#xff1a; String&#xff1a;字符串是Redis中最…...

【C++浅析】lambda表达式:基本结构 使用示例

基本结构 [捕获列表](参数列表) -> 返回类型 { // 函数体 } 捕获列表 ([ ]): 用于指定外部变量的捕获方式。可以&#xff1a; 通过值捕获&#xff1a;[x]通过引用捕获&#xff1a;[&x]捕获所有变量通过值&#xff1a;[]捕获所有变量通过引用&#xff1a;[&]自…...

利用Redis获取权限的多种方式

更多实战内容&#xff0c;可前往无问社区查看http://www.wwlib.cn/index.php/artread/artid/10333.html Redis是我们在实战中经常接触到的一款数据库&#xff0c;因其在前期打点中被利用后可直接影响服务器安全所以在攻防过程中也备受红队关注&#xff0c;在本文中会重点分享一…...

LeetCode - LCR 146- 螺旋遍历二维数组

LCR 146题 题目描述&#xff1a; 给定一个二维数组 array&#xff0c;请返回「螺旋遍历」该数组的结果。 螺旋遍历&#xff1a;从左上角开始&#xff0c;按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c;然后再进入内部一层重复相同的步骤&#xff0c;直到提取完…...

如何获取Bing站长工具API密钥

Bing站长工具近期悄然上线了网站URL推送功能&#xff0c;似乎有意跟随百度的步伐。这个新功能允许站长通过API向Bing提交链接数据&#xff0c;当然也可以通过Bing站长工具手动提交。 本文将详细介绍如何通过Bing站长工具生成用于网站链接推送的API密钥。 首先&#xff0c;访问…...

NC 调整数组顺序使奇数位于偶数前面(一)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 输入一个长度…...

Unity异步把图片数据从显存下载到内存(GPU->CPU)

Unity异步把图片数据从显存下载到内存&#xff08;GPU->CPU&#xff09; 1.c#核心代码 using System.Collections; using System.Collections.Generic; using Unity.Collections; using UnityEditor.PackageManager.Requests; using UnityEngine; using UnityEngine.Rende…...

【MySQL】C/C++连接MySQL客户端,MySQL函数接口认知,图形化界面进行连接

【MySQL】C/C引入MySQL客户端 安装mysqlclient库mysql接口介绍初始化mysql_init链接数据库mysql_real_connect下发mysql命令mysql_query获取出错信息mysql_error获取执行结果mysql_store_result获取结果行数mysql_num_rows获取结果列数mysql_num_fields判断结果列数mysql_field…...

Wireshark分析工具

简单用例 首先打开软件&#xff0c;左上角点文件&#xff0c;选中要分析的文件列表。 导入用tcpdump抓的包后进行分析&#xff0c;这里要输入过滤条件&#xff0c;对网络包进行一定的过滤处理。&#xff08;这里172网段是阿里云的地址&#xff0c;用自己写的python2脚本对阿里…...

linux网络配置脚本

通过脚本&#xff0c;设置静态ip以及主机名 因为企业9的网络配置文件和企业7的不一样所以&#xff0c;我们以rhel9和rhel7为例 rhel7/centos7/openeuler #!/bin/bash cat > /etc/sysconfig/network-scripts/ifcfg-$1 << EOF DEVICE$1 ONBOOTyes BOOTPROTOnone IPAD…...

IT管理:我与IT的故事4

首先&#xff0c;宣布一个“坏消息”。最近Herry童鞋的办公邮箱似乎有些“抽抽”了&#xff0c;所以邮件出现了延迟、拒收、被拒收、甚至是石沉大海的现象。为了能够更好的和大家进行沟通&#xff0c;大家如果发邮件到我办公邮箱的时候&#xff0c;若不嫌麻烦&#xff0c;可以抄…...

短链接系统设计方案

背景 需要设计一个短链接系统&#xff0c;主要功能主要有如下几点&#xff1a; ToB&#xff1a; 输入一个长链接&#xff0c;转换成短链接。这个短链接有时效性&#xff0c;可以设定指定过期时间。这个系统的每天会生成千万级别的短链接。数据具备可分析功能。 ToC&#xf…...

Cisco交换机SSH使用RSA公钥免密登录(IOS与Nexus,服务器以RHEL8为例)

目录 需求实验步骤0. 实验环境1. Linux2. CiscoIOS基础设置保存密钥登陆测试 3. CiscoNexus基础配置保存密钥登陆测试 需求 在实际工作中&#xff0c;常会遇到自动化的需求&#xff0c;那么在自动采集、配置等对网络设备的自动化需求中&#xff0c;不可避免的会遇到需要登录-&…...

QT判断操作系统类型和CPU架构

一、判断操作系统类型 1.在.pro文件中判断 macx { # mac only } unix:!macx{ # linux only } win32 { # windows only }2.在代码中判断 可以包含QGlobal头文件&#xff0c;判断预定义宏 #include <QtGlobal> ... #ifdef Q_OS_MAC // mac #endif#ifdef Q_OS_LINUX // …...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...