最新资讯

  • [C++] 小游戏 死亡禁区 1.0.0 正式版 !爷青回!zty回来了!!

[C++] 小游戏 死亡禁区 1.0.0 正式版 !爷青回!zty回来了!!

2026-01-31 10:52:49 栏目:最新资讯 4 阅读

                                       !!爷青回!!

目录

                                       !!爷青回!!

前言

演示用编译器

标准

                                                  先   赞   后   看    养   成   习   惯  

正文

适配操作系统

如果显示不全

后记


前言

哈哈哈哈哈哈哈哈哈哈!!!爷青回!!!你们的zty带着他的全新作品回来了。本次,我开发了一个完整的2D+FPS+肉鸽玩法的游戏,死亡禁区。鸣谢胎神带来的启发(膜拜)。目前游戏还处在起步阶段,大家有什么建议和投稿都可以评论的呀哈哈哈。

                                                  先   赞   后   看    养   成   习   惯 

众所不周知,zty每篇文章都有一个头图

(小声嘀咕)宝可梦!!

                                                  先   赞   后   看    养   成   习   惯  

演示用编译器

Dev C++ 6.7.5 Red panda 

[C++编译器] Dev-C++ 6.7.5 (附下载链接、安装教程)_red panda dev-c++-CSDN博客

标准

C++14

                                                  先   赞   后   看    养   成   习   惯  

正文

适配操作系统

本代码为Windows版,其他操作系统不兼容,如想兼容很简单,把文章开头的

#include 

换为自己操作系统所对应的就行了,例如换为

#include 

完整代码(Windows版)

下面是完整代码(Windows版),代码总长62829,68K。

#include
#include
#include
#include
#include
#include
#include 
#include 
#define KEY_DOWN(VK_NONAME)((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0)
using namespace std;

// 定义方向数组,简化怪物移动逻辑
const int dx4[] = {-1, 0, 1, 0}; // 上、右、下、左
const int dy4[] = {0, 1, 0, -1};
const int dx8[] = {-1, -1, 0, 1, 1, 1, 0, -1}; // 顺时针8个方向
const int dy8[] = {0, 1, 1, 1, 0, -1, -1, -1};
bool CanGo(int, int, int);
void Laser_Drawing(int, int, int, int);

int m[45][45], n[45][45];

void Map_Colors(int a) {
	if (a == 0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
	if (a == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
	if (a == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
	if (a == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
	if (a == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
	if (a == 5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
	if (a == 6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
	if (a == 7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN); //木
	if (a == 8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); //铁
	if (a == 9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
	if (a == 10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | BACKGROUND_GREEN);
	if (a == 11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE | BACKGROUND_GREEN);
	if (a == 12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | BACKGROUND_GREEN);
	if (a == 13) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | BACKGROUND_INTENSITY | BACKGROUND_BLUE);
}
void SetPos(int x, int y) {
	COORD pos;
	pos.X = y * 2, pos.Y = x + 3;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
int X, Y, gx, gy, Muzzle, Gun_type, T, G[11], F[30];
int Win, Lev, HP_Player, DE_Player, MaxHP_Player, MaxDE_Player, Unable_To_Be_Attacked, Num_Monsters, Dazzling_Entrance, Farewell_Gift, sy, shootCooldown;
int Bx, By, Boss_HP, Boss_CrossBullet_CD, Boss_CornerBullet_CD, Boss_Poison_CD, Boss_Conjure_CD, Bxz, Byz;
const int INVISIBLE_CYCLE = 30;   // 隐形周期(帧数)
const int VISIBLE_DURATION = 10;  // 显形持续时间(帧数)
int Money = 0; // 玩家当前金钱
const int MONEY_DUMB_MONSTER = 3;
const int MONEY_POISON_MONSTER = 10;
const int MONEY_SHOTGUN_MONSTER = 6;
const int MONEY_SNIPER_MONSTER = 6;
const int MONEY_LASER_MONSTER = 8;
const int MONEY_INVISIBLE_MONSTER = 20;
const int MONEY_BOSS_PER_BAR = 10;     // BOSS每血条金钱
// ==================== 优化的怪物AI函数 ====================
int InvisibleMonsterVisible[45][45]; // 记录隐形怪当前是否可见
int InvisibleMonsterTimer[45][45];   // 记录隐形怪的计时器
void ResetInvisibleMonsterState() {
	memset(InvisibleMonsterVisible, 0, sizeof(InvisibleMonsterVisible));
	memset(InvisibleMonsterTimer, 0, sizeof(InvisibleMonsterTimer));
}
// 怪物基类行为函数 - 尝试移动怪物
// 修改TryMoveMonster函数,在怪物类型判断中添加隐形怪
bool TryMoveMonster(int i, int j, int targetX, int targetY, int monsterType, bool nx[42][42]) {
	int moveDir = -1;

	// 添加隐形怪到怪物类型判断中
	if (monsterType == 55 || monsterType == 50 || monsterType == 51) {
		// 无脑怪、毒怪和隐形怪的简单AI
		if (rand() % 2 == 0) {
			// 50%概率向玩家移动
			if (abs(targetX - i) > abs(targetY - j)) {
				moveDir = (targetX > i) ? 2 : 0; // 上下
			} else {
				moveDir = (targetY > j) ? 1 : 3; // 左右
			}
		} else {
			// 50%概率随机移动
			moveDir = rand() % 4;
		}
	} else if (monsterType == 52 || monsterType == 53 || monsterType == 54) {
		// 散弹怪、狙击怪、激光怪的移动(更智能)
		if (rand() % 4 == 0) {
			// 25%概率向玩家移动
			if (abs(targetX - i) > abs(targetY - j)) {
				moveDir = (targetX > i) ? 2 : 0;
			} else {
				moveDir = (targetY > j) ? 1 : 3;
			}
		} else {
			// 75%概率随机移动
			moveDir = rand() % 4;
		}
	}

	// 移动逻辑保持不变,但添加对隐形怪的颜色处理
	if (moveDir != -1) {
		int newI = i + dx4[moveDir];
		int newJ = j + dy4[moveDir];

		if (CanGo(newI, newJ, 1)) {
			// 移动怪物
			m[i][j] = 0;
			InvisibleMonsterVisible[i][j] = 0; // 清除原位置的可见状态
			InvisibleMonsterTimer[i][j] = 0;   // 清除原位置的计时器

			m[newI][newJ] = monsterType;

			// 移动计时器状态到新位置
			InvisibleMonsterTimer[newI][newJ] = InvisibleMonsterTimer[i][j];
			InvisibleMonsterVisible[newI][newJ] = InvisibleMonsterVisible[i][j];

			SetPos(i, j);
			cout << "  ";
			SetPos(newI, newJ);

			// 根据怪物类型显示不同颜色
			if (monsterType == 50) Map_Colors(1);
			else if (monsterType == 51) Map_Colors(10);
			else if (monsterType == 52) Map_Colors(3);
			else if (monsterType == 53) Map_Colors(4);
			else if (monsterType == 54) Map_Colors(5);
			else if (monsterType == 55) {
				// 隐形怪:只有可见时才显示,否则显示为半透明
				if (InvisibleMonsterVisible[newI][newJ]) {
					Map_Colors(13); // 深灰色表示可见的隐形怪
				} else {
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
					// 完全隐藏(显示空格)
				}
			}

			cout << "●";
			Map_Colors(0);
			nx[newI][newJ] = true;
			return true;
		}
	}

	return false;
}

// 毒怪的特殊行为:释放毒气
void PoisonMonsterAttack(int i, int j) {
	if (rand() % 10 == 0) { // 约6.7%概率释放毒气
		for (int k = i - 2; k <= i + 2; k++) {
			for (int l = j - 2; l <= j + 2; l++) {
				if (k > 1 && l > 1 && k <= 28 && l <= 28 &&
				        (CanGo(k, l, 1) || m[k][l] == 1)) {
					m[k][l] = 59; // 怪物毒气
				}
			}
		}
	}
}

// 散弹怪的攻击行为
void ShotgunMonsterAttack(int i, int j) {
	if (rand() % 10 == 0) { // 10%概率发射散弹
		int shotCount = rand() % 3 + 1; // 发射1-3发子弹

		for (int shot = 0; shot < shotCount; shot++) {
			int direction = rand() % 8; // 随机8个方向
			int newI = i + dx8[direction];
			int newJ = j + dy8[direction];

			if (CanGo(newI, newJ, 6)) {
				m[newI][newJ] = 210 + (direction + 1); // 子弹编码
			}
		}
	}
}

// 狙击怪的攻击行为
void SniperMonsterAttack(int i, int j, int playerX, int playerY) {
	if (rand() % 6 == 0) { // 约16.7%概率射击
		// 计算玩家方向
		int dx = playerX - i;
		int dy = playerY - j;

		// 找到最接近玩家方向的方向
		int bestDir = 0;
		float bestScore = -9999;

		for (int dir = 0; dir < 8; dir++) {
			float score = dx8[dir] * dx + dy8[dir] * dy;
			if (score > bestScore) {
				bestScore = score;
				bestDir = dir;
			}
		}

		int newI = i + dx8[bestDir];
		int newJ = j + dy8[bestDir];

		if (CanGo(newI, newJ, 6)) {
			m[newI][newJ] = 210 + (bestDir + 1); // 子弹编码
		}
	}
}

// 激光怪的攻击行为
void LaserMonsterAttack(int i, int j) {
	if (rand() % 10 == 0) { // 10%概率发射激光
		int laserDir = rand() % 4; // 随机选择4个主要方向
		// 激光方向:1-上,3-右,5-下,7-左
		int direction = laserDir * 2 + 1;
		Laser_Drawing(i, j, 230 + direction, 2);
	}
}

// 主怪物逻辑处理函数
void ProcessMonsters(bool nx[42][42]) {
	for (int i = 2; i <= 38; i++) {
		for (int j = 2; j <= 38; j++) {
			if (nx[i][j]) continue;

			int monsterType = m[i][j];

			// 隐形怪 (55)

			// 无脑怪 (50) - 每2帧移动一次
			if (monsterType == 50 && T % 2 == 0) {
				TryMoveMonster(i, j, X, Y, 50, nx);
			}

			// 毒怪 (51)
			else if (monsterType == 51) {
				// 先释放毒气
				PoisonMonsterAttack(i, j);
				// 然后尝试移动
				if (TryMoveMonster(i, j, X, Y, 51, nx)) {
					// 移动后可能再次释放毒气
					PoisonMonsterAttack(i + dx4[0], j + dy4[0]);
				}
			}

			// 散弹怪 (52)
			else if (monsterType == 52) {
				ShotgunMonsterAttack(i, j);
				// 66%概率移动
				if (rand() % 3 != 0) {
					TryMoveMonster(i, j, X, Y, 52, nx);
				}
			}

			// 狙击怪 (53)
			else if (monsterType == 53) {
				SniperMonsterAttack(i, j, X, Y);
				// 约16.7%概率移动
				if (rand() % 6 == 0) {
					TryMoveMonster(i, j, X, Y, 53, nx);
				}
			}

			// 激光怪 (54)
			else if (monsterType == 54) {
				LaserMonsterAttack(i, j);
				// 25%概率移动
				if (rand() % 4 == 0) {
					TryMoveMonster(i, j, X, Y, 54, nx);
				}
			}	else if (monsterType == 55) {
				// 更新隐形怪的计时器
				InvisibleMonsterTimer[i][j]++;

				// 检查是否需要切换可见状态
				if (InvisibleMonsterVisible[i][j]) {
					// 当前可见,检查是否需要变为不可见
					if (InvisibleMonsterTimer[i][j] >= VISIBLE_DURATION) {
						InvisibleMonsterVisible[i][j] = 0;
						InvisibleMonsterTimer[i][j] = 0;
						// 立即刷新显示(变为不可见)
						SetPos(i, j);
						cout << "  ";
					}
				} else {
					// 当前不可见,检查是否需要变为可见
					if (InvisibleMonsterTimer[i][j] >= INVISIBLE_CYCLE) {
						InvisibleMonsterVisible[i][j] = 1;
						InvisibleMonsterTimer[i][j] = 0;
						// 立即刷新显示(变为可见)
						SetPos(i, j);
						Map_Colors(13); // 深灰色
						cout << "●";
						Map_Colors(0);
					}
					TryMoveMonster(i, j, X, Y, 55, nx);
				}
			}
		}
	}
}
void bccd() { //保存存档
	char line[256];
	std::fstream myFile;
	myFile.open("死亡禁区 26.1.29.1.0.0存档.txt", ios::out);
	if (myFile.is_open()) {
		myFile << Money << "
";
		myFile.close();
	}
}
void drcd() { //读入存档
	string line;
	std::fstream myFile;
	int s = 0;
	myFile.open("死亡禁区 26.1.29.1.0.0存档.txt", ios::in);  // read,读
	if (myFile.is_open()) {
		while (getline(myFile, line)) {
			string str(line);
			s++;
			if (s == 1)
				Money = atoi(str.c_str());
		}
		myFile.close();
	}
}
void MainMenu() {
	system("cls");
	int selected = 1; // 当前选中的菜单项
	drcd();
	while (true) {
		system("cls");
		Map_Colors(5);

		// 游戏标题
		SetPos(-1, 0);
		cout << " ███  ████     █     ███          ████   ██    █    █ ████ ";
		SetPos(0, 0);
		cout << " █   █ █          ██    █   █              █   █  █   ██  █ █       ";
		SetPos(1, 0);
		cout << " █   █ █         █  █   █   █             █   █    █  ██  █ █       ";
		SetPos(2, 0);
		cout << " █   █ ████   █  █   █   █            █    █    █  █ █ █ ████ ";
		SetPos(3, 0);
		cout << " █   █ █         ███   █   █           █     █    █  █  ██ █       ";
		SetPos(4, 0);
		cout << " █   █ █        █    █  █   █          █       █  █   █  ██ █       ";
		SetPos(5, 0);
		cout << " ███  ████ █      █ ███          ████   ██    █    █ ████ ";
		SetPos(6, 0);
		cout << "==================================================================================";
		SetPos(7, 0);
		cout << "                    《 死亡禁区 Dead Zone 》  1.0.0  正式版                       ";
		// 菜单选项
		Map_Colors(selected == 1 ? 2 : 0);
		SetPos(10, 14);
		cout << "╔═══════════╗";
		SetPos(11, 14);
		cout << "║      开始游戏        ║";
		SetPos(12, 14);
		cout << "╚═══════════╝";

		Map_Colors(selected == 2 ? 2 : 0);
		SetPos(14, 14);
		cout << "╔═══════════╗";
		SetPos(15, 14);
		cout << "║      游戏规则        ║";
		SetPos(16, 14);
		cout << "╚═══════════╝";

		Map_Colors(selected == 3 ? 2 : 0);
		SetPos(18, 14);
		cout << "╔═══════════╗";
		SetPos(19, 14);
		cout << "║      作者介绍        ║";
		SetPos(20, 14);
		cout << "╚═══════════╝";

		Map_Colors(selected == 4 ? 2 : 0);
		SetPos(22, 14);
		cout << "╔═══════════╗";
		SetPos(23, 14);
		cout << "║      退出游戏        ║";
		SetPos(24, 14);
		cout << "╚═══════════╝";

		Map_Colors(5);
		SetPos(37, 12);
		cout << "使用 ↑ ↓ 键选择,Enter键确认";

		// 操作说明
		Map_Colors(5);
		SetPos(39, 4);
		cout << "方向键移动 A/D旋转枪口  Q切枪  W开箱  S射击(可长按)空格暂停";
		SetPos(41, 0);
		cout << "  作者:CSDN zty郑桐羽呀 抖音 zty_C++  QQ 3782663736  Luogu 1626767 (皆为同一人)   ";
		SetPos(42, 0);
		cout << "               鸣谢  胎神  给予的启发,注:核心内容经过添改不构成侵权抄袭 ";
		SetPos(43, 0);
		cout << "  版权归属为 zty(上上行)一人所有,盗版侵权必究  版本号:26.1.29 : 1.0.0.Windows  ";
		// 按键检测
		if (kbhit()) {
			char ch = _getch();
			if (ch == 13) { // Enter键
				if (selected == 1) {
					system("cls");
					// 开始游戏
					return;
				} else if (selected == 2) {
					// 游戏规则
					system("cls");
					Map_Colors(5);
					SetPos(2, 5);
					cout << "╔═════════════════════╗";
					SetPos(3, 5);
					cout << "║             【游戏规则】                 ║";
					SetPos(4, 5);
					cout << "╚═════════════════════╝";

					Map_Colors(0);
					SetPos(6, 2);
					cout << "1. 使用方向键移动角色 空格键暂停游戏";
					SetPos(8, 2);
					cout << "2. 按A/D键顺/逆时针旋转枪口,按住S键连续发射子弹";
					SetPos(10, 2);
					cout << "3. 按Q键在拥有子弹的枪械之间切换";
					SetPos(12, 2);
					cout << "4. 按W键打开身边的宝箱";
					SetPos(14, 2);
					cout << "7. 清除所有怪物即可进入下一关";
					SetPos(16, 2);
					cout << "8. 每5关为BOSS关,击败BOSS可获双天赋";
					Map_Colors(0);
					SetPos(18, 3);
					cout << "枪械类型:";
					SetPos(19, 5);
					cout << "1.制式突击步枪  2.破片弹投射器  3.反掩体重型狙  4.量子穿透利刃";
					SetPos(20, 5);
					cout << "5.RPG-01火箭筒  6.便携式毒气炮  7.史莱姆发射器  8.龙血骨钢长剑";
					SetPos(22, 3);
					cout << "怪物类型:";
					SetPos(23, 5);
					cout << "●唐恩普通士兵(蓝)  ●唐恩病毒实验体(绿)  ●唐恩自行无人火炮(紫)";
					SetPos(24, 5);
					cout << "●唐恩狙击手(红)  ●唐恩自行激光干扰车(黄)  ●唐恩隐形自爆车(灰)";
					Map_Colors(3);
					SetPos(26, 7);
					cout << "按任意键返回主菜单...";
					_getch();
				} else if (selected == 3) {
					// 作者介绍
					system("cls");
					Map_Colors(5);
					SetPos(2, 4);
					cout << "╔═════════════════════╗";
					SetPos(3, 4);
					cout << "║             【作者介绍】                 ║";
					SetPos(4, 4);
					cout << "╚═════════════════════╝";

					Map_Colors(0);
					SetPos(10, 2);
					cout << "     作者:zty(注意:此为个人项目,非团队项目)";
					SetPos(12, 2);
					cout << "    QQ:3782663736(注明来意),也欢迎大家来交朋友/骚扰";
					SetPos(14, 0);
					cout << "讲一些话吧:";
					SetPos(16, 0);
					cout << "    感谢大家来玩zty的船新作品,说实话,最近zty有些迷茫,啊啊~";
					SetPos(18, 0);
					cout << "    主要是为了中考嘛,然后写代码有点影响我的学业了";
					SetPos(20, 0);
					cout << "    其实zty学习还不错,大连高中前三甲(8中、育明、24中),";
					SetPos(22, 0);
					cout << "    应该是没希望了,但是重点肯定是能上的,我也尽量趁着寒假多写一些";
					SetPos(24, 0);
					cout << "    zty 写这个不是为了盈利,只是想让大家在学习C++的过程中有些欢乐";
					SetPos(26, 0);
					cout << "    大家可以自己改改代码,如果有不懂的欢迎QQ来问我吽(读哦)~";
					SetPos(28, 2);
					cout << "                                  ——一个只知道写代码的男初zty";
					Map_Colors(6);
					SetPos(30, 5);
					cout << "按任意键返回主菜单...";
					_getch();
				} else if (selected == 4) {
					// 退出游戏
					system("cls");
					Map_Colors(5);
					SetPos(12, 15);
					cout << "感谢游玩《死亡禁区》!";
					SetPos(14, 17);
					cout << "再见!";
					Sleep(2000);
					exit(0);
				}
			} else if (ch == -32) { // 方向键
				ch = _getch();
				if (ch == 72 && selected > 1) selected--; // 上键
				if (ch == 80 && selected < 4) selected++; // 下键
			} else if (ch == 'w' || ch == 'W') {
				if (selected > 1) selected--;
			} else if (ch == 's' || ch == 'S') {
				if (selected < 4) selected++;
			} else if (ch == 27) { // ESC键
				// 退出游戏
				system("cls");
				Map_Colors(5);
				SetPos(12, 15);
				cout << "感谢游玩《死亡禁区》!";
				SetPos(14, 17);
				cout << "再见!";
				Sleep(2000);
				exit(0);
			}
		}

		Sleep(100);
	}
}
void Map(int x);
void Jian(int x) {
	if (Unable_To_Be_Attacked > 0) return;
	if (DE_Player > x) DE_Player -= x;
	else if (DE_Player <= 0) HP_Player -= x;
	else if (DE_Player > 0 && DE_Player <= x) {
		if (F[13] == 0) HP_Player -= x - DE_Player;
		if (F[13] == 1) Unable_To_Be_Attacked = 20;
		if (F[17] == 1) Farewell_Gift = 3;
		DE_Player = -1;
	}
}
bool CanGo(int x, int y, int q) {
	if (x < 1 || x > 39 || y < 1 || y > 39) {
		return 0; // 返回0,不计数
	}
	if (abs(Bx - x) <= 1 && abs(By - y) <= 1 && q == 1) return 0;
	if (m[x][y] == 2 || m[x][y] == 3) return 0;
	if ((q == 0 || q == 1) && n[x][y] == 1) return 0;
	if (m[x][y] == 0) return 1;
	if (m[x][y] >= 4 && m[x][y] <= 8) return 1;
	if (m[x][y] >= 84 && m[x][y] <= 88) return 1;
	if (m[x][y] >= 9 && m[x][y] <= 31) return 1;
	if (m[x][y] >= 59 && m[x][y] <= 81) return 1;
	if ((q == 2 || q == 3 || q == 5) && m[x][y] == 1) return 1; // 剑可以破坏木墙
	if ((q == 2 || q == 3) && m[x][y] >= 100 && m[x][y] < 250) return 1;
	if ((q == 0 || q == 3 || q == 5) && m[x][y] >= 50 && m[x][y] < 55) return 1;
	if ((q == 4 || q == 7) && m[x][y] / 100 == 1) return 1;
	if ((q == 0 || q == 3 || q == 5) && m[x][y] == 55) return true; // 玩家可以走到隐形怪上(会受伤)
	if ((q == 4 || q == 7) && m[x][y] / 100 == 1) return true; // 子弹可以击中隐形怪

	return 0;
}

void CoutMe() {
	if (gx < 0 && CanGo(X - 1, Y, 0)) X--;
	if (gx > 0 && CanGo(X + 1, Y, 0)) X++;
	if (gy < 0 && CanGo(X, Y - 1, 0)) Y--;
	if (gy > 0 && CanGo(X, Y + 1, 0)) Y++;
	int r;

	// 根据当前枪械类型设置枪口箭头颜色
	int gunColor = 0; // 默认白色
	switch (Gun_type) {
		case 1: // 普通枪 - 白色
			gunColor = 0;
			break;
		case 2: // 破片弹投射器 - 紫色
			gunColor = 3;
			break;
		case 3: // 反掩体重型狙 - 蓝色
			gunColor = 1;
			break;
		case 4: // 量子穿透利刃 - 黄色
			gunColor = 5;
			break;
		case 5: // RPG-01火箭筒 - 红色
			gunColor = 4;
			break;
		case 6: // 便携式毒气炮 - 深绿
			gunColor = 2;
			break;
		case 7: // 史莱姆发射器 - 浅绿
			gunColor = 10;
			break;
		case 8: // 龙血骨钢长剑 - 亮红色加闪烁效果
			if (T % 10 < 5) gunColor = 4; // 闪烁效果:亮红色
			else gunColor = 5; // 闪烁效果:黄色
			break;
		default:
			gunColor = 0;
			break;
	}

	// 设置枪口箭头颜色
	Map_Colors(gunColor);

	if (Unable_To_Be_Attacked > 0) {
		r = rand() % 5 + 1;
		Map_Colors(r); // 无敌状态时随机颜色
	}

	// 如果使用长剑,用特殊符号表示
	if (Gun_type == 8) {
		if (Muzzle == 1) SetPos(X - 1, Y), cout << "↑";
		else if (Muzzle == 2) SetPos(X - 1, Y + 1), cout << "↗";
		else if (Muzzle == 3) SetPos(X, Y + 1),  cout << "→";
		else if (Muzzle == 4) SetPos(X + 1, Y + 1), cout << "↘";
		else if (Muzzle == 5) SetPos(X + 1, Y), cout << "↓";
		else if (Muzzle == 6) SetPos(X + 1, Y - 1), cout << "↙";
		else if (Muzzle == 7) SetPos(X, Y - 1),  cout << "←";
		else if (Muzzle == 8) SetPos(X - 1, Y - 1), cout << "↖";

		// 玩家角色显示剑的符号
		Map_Colors(4); // 红色
		SetPos(X, Y), cout << "╬";
	} else {
		// 其他武器的显示
		if (Muzzle != 1) SetPos(X - 1, Y), cout << "︹";
		if (Muzzle != 5) SetPos(X + 1, Y), cout << "︺";
		if (Muzzle != 7) SetPos(X, Y - 1), cout << "﹝";
		if (Muzzle != 3) SetPos(X, Y + 1), cout << "﹞";
		if (Muzzle == 1) SetPos(X - 1, Y), cout << "↑";
		if (Muzzle == 2) SetPos(X - 1, Y + 1), cout << "↗";
		if (Muzzle == 3) SetPos(X, Y + 1),  cout << "→";
		if (Muzzle == 4) SetPos(X + 1, Y + 1), cout << "↘";
		if (Muzzle == 5) SetPos(X + 1, Y), cout << "↓";
		if (Muzzle == 6) SetPos(X + 1, Y - 1), cout << "↙";
		if (Muzzle == 7) SetPos(X, Y - 1),  cout << "←";
		if (Muzzle == 8) SetPos(X - 1, Y - 1), cout << "↖";

		// 玩家角色
		Map_Colors(0);
		SetPos(X, Y), cout << "●";
	}

	// 重置为默认颜色
	Map_Colors(0);

	if (Unable_To_Be_Attacked > 0) Map(4);
	if (m[X][Y] >= 50 && m[X][Y] < 55) Jian(5), system("color 4F"), Sleep(30), system("color 0F"), Map(4);
	if (m[X][Y] >= 4 && m[X][Y] <= 7 && F[12] == 0) Jian(3), system("color 4F"), Sleep(30), system("color 0F"), Map(4);
	if (m[X][Y] >= 4 && m[X][Y] <= 7 && F[12] == 1) Jian(1), system("color 4F"), Sleep(30), system("color 0F"), Map(4);
	if (m[X][Y] >= 59 && m[X][Y] <= 80 && F[4] == 0) Jian(1), system("color 4F"), Sleep(30), system("color 0F"), Map(4);
	if (m[X][Y] == 2 && F[4] == 0) Jian(3), system("color 4F"), Sleep(30), system("color 0F"), Map(4);
	if (m[X][Y] == 55) {
		Jian(5); // 和普通怪一样造成5点伤害
		system("color 4F");
		Sleep(30);
		system("color 0F");
		Map(4);
	}
	m[X][Y] = 0, gx = gy = 0;
}
int Cout(int x, int i, int j) {
	int Guai = 0;
	if (m[i][j] == 0 && x == 2) SetPos(i, j), cout << "  ";
	if (m[i][j] == 1) SetPos(i, j), Map_Colors(7), cout << "■", Map_Colors(0); //木
	if (n[i][j] == 0 && m[i][j] == 2) SetPos(i, j), Map_Colors(8), cout << "■", Map_Colors(0); //铁
	if (n[i][j] == 10 && m[i][j] == 0) SetPos(i, j), cout << "  ", Map_Colors(0);
	if (n[i][j] == 31 && m[i][j] == 0) SetPos(i, j), cout << "  ", Map_Colors(0);
	if (m[i][j] == 32) m[i][j] = 0; //怪子弹灰
	if (n[i][j] >= 20 && n[i][j] < 22 && m[i][j] == 1) SetPos(i, j), Map_Colors(7), cout << "▁", Map_Colors(0); //木
	if (n[i][j] >= 22 && n[i][j] < 24 && m[i][j] == 1) SetPos(i, j), Map_Colors(7), cout << "▂", Map_Colors(0); //木
	if (n[i][j] >= 24 && n[i][j] < 26 && m[i][j] == 1) SetPos(i, j), Map_Colors(7), cout << "▄", Map_Colors(0); //木
	if (n[i][j] >= 26 && n[i][j] < 28 && m[i][j] == 1) SetPos(i, j), Map_Colors(7), cout << "▆", Map_Colors(0); //木
	if (n[i][j] >= 28 && n[i][j] < 30 && m[i][j] == 1) SetPos(i, j), Map_Colors(7), cout << "▆", Map_Colors(0); //木
	if (n[i][j] > 45 && n[i][j] <= 50 && m[i][j] == 2) SetPos(i, j), Map_Colors(4), cout << "▲", Map_Colors(0); //刺
	if (m[i][j] == 3) SetPos(i, j), Map_Colors(5), cout << "〓", Map_Colors(0); //箱
	if (m[i][j] >= 4 && m[i][j] <= 7) SetPos(i, j), Map_Colors(5), cout << "█", Map_Colors(0), m[i][j]++; //烟
	if (m[i][j] == 8) SetPos(i, j), cout << "  ", m[i][j] = 0; //烟尘
	if (m[i][j] >= 84 && m[i][j] <= 87) SetPos(i, j), Map_Colors(5), cout << "█", Map_Colors(0), m[i][j]++; //烟
	if (m[i][j] == 88) SetPos(i, j), cout << "  ", m[i][j] = 0; //烟尘
	if (m[i][j] >= 10 && m[i][j] <= 30) SetPos(i, j), Map_Colors(10), cout << "# ", Map_Colors(0), m[i][j]++; //毒
	if (m[i][j] >= 60 && m[i][j] <= 80) SetPos(i, j), Map_Colors(11), cout << "# ", Map_Colors(0), m[i][j]++; //怪毒
	if (m[i][j] == 9 || m[i][j] == 59) SetPos(i, j), Map_Colors(12), cout << "# ", Map_Colors(0), m[i][j]++; //金毒
	if (m[i][j] == 31 || m[i][j] == 81) SetPos(i, j), cout << "  ", m[i][j] = 0; //毒尘
	if (n[i][j] == 1) SetPos(i, j), Map_Colors(13), cout << "~ ", Map_Colors(0); //水
	if (m[i][j] == 50) SetPos(i, j), Map_Colors(1), cout << "●", Map_Colors(0), Guai++; // 普通怪
	if (m[i][j] == 51) SetPos(i, j), Map_Colors(10), cout << "●", Map_Colors(0), Guai++; // 毒怪
	if (m[i][j] == 52) SetPos(i, j), Map_Colors(3), cout << "●", Map_Colors(0), Guai++;  // 散弹怪
	if (m[i][j] == 53) SetPos(i, j), Map_Colors(4), cout << "●", Map_Colors(0), Guai++;  // 狙击怪
	if (m[i][j] == 54) SetPos(i, j), Map_Colors(5), cout << "●", Map_Colors(0), Guai++;  // 激光怪

	// 隐形怪
	if (m[i][j] == 55) {
		if (InvisibleMonsterVisible[i][j]) {
			// 可见时显示为深灰色
			SetPos(i, j), Map_Colors(13), cout << "●", Map_Colors(0), Guai++;
		} else {
			// 不可见时显示为非常淡的灰色(几乎看不见)
			//  SetPos(i, j);
			// SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);
			//  cout << ". ";  // 使用小点表示隐约可见的轮廓
			// Map_Colors(0);
			Guai++; // 仍然计入怪物数量
		}
	}
	if (m[i][j] / 100 == 1) {
		if ((m[i][j] % 100) / 10 <= 1) SetPos(i, j), cout << "☉";
		if ((m[i][j] % 100) / 10 == 2) SetPos(i, j), Map_Colors(4), cout << "◎", Map_Colors(0);
		if ((m[i][j] % 100) / 10 == 3) SetPos(i, j), Map_Colors(1), cout << "◎", Map_Colors(0);
		if ((m[i][j] % 100) / 10 == 4) m[i][j] = 4;
		if ((m[i][j] % 100) / 10 == 5) SetPos(i, j), Map_Colors(3), cout << "◎", Map_Colors(0);
		if ((m[i][j] % 100) / 10 == 6) SetPos(i, j), Map_Colors(2), cout << "¤", Map_Colors(0);
		if ((m[i][j] % 100) / 10 >= 7 && (m[i][j] % 100) / 10 <= 9) SetPos(i, j), Map_Colors(2), cout << "◎", Map_Colors(0);
	}
	if (m[i][j] / 100 == 2) if ((m[i][j] % 100) / 10 == 1) SetPos(i, j), Map_Colors(3), cout << "☉", Map_Colors(0);
	return Guai;
}
void Boss() {
	SetPos(Bx - 1, By - 1), cout << "      ";
	SetPos(Bx, By - 1), cout << "      ";
	SetPos(Bx + 1, By - 1), cout << "      ";
	int mov = rand() % 30 + 1, R = rand() % 300, ms;
	if (mov == 1 && CanGo(Bx - 1, By - 2, 1) && CanGo(Bx, By - 2, 1) && CanGo(Bx + 1, By - 2, 1)) By--;
	if (mov == 2 && CanGo(Bx - 1, By + 2, 1) && CanGo(Bx, By + 2, 1) && CanGo(Bx + 1, By + 2, 1)) By++;
	if (mov == 3 && CanGo(Bx - 2, By - 1, 1) && CanGo(Bx - 2, By, 1) && CanGo(Bx - 2, By + 1, 1)) Bx--;
	if (mov == 4 && CanGo(Bx + 2, By - 1, 1) && CanGo(Bx + 2, By, 1) && CanGo(Bx + 2, By + 1, 1)) Bx++;
	if (mov == 5 && Boss_CrossBullet_CD == 0) Boss_CrossBullet_CD += rand() % 3 + 1;
	if (mov == 6 && Boss_CornerBullet_CD == 0) Boss_CornerBullet_CD += rand() % 3 + 1;
	if (mov == 7 && Boss_Poison_CD == 0) Boss_Poison_CD += 5;
	if (mov == 8 && Bxz == 0) Bxz += rand() % 20 - 10;
	if (mov == 9 && Byz == 0) Byz += rand() % 20 - 10;
	if (Byz < 0) {
		Byz++;
		if (By - 2 > 1) By--;
	}
	if (Byz > 0) {
		Byz--;
		if (By + 2 < 28) By++;
	}
	if (Bxz < 0) {
		Bxz++;
		if (Bx - 2 > 1) Bx--;
	}
	if (Bxz > 0) {
		Bxz--;
		if (Bx + 2 < 28) Bx++;
	}
	if (R < 15 & Num_Monsters <= 5) Boss_Conjure_CD++;
	else if (R < 5 && Num_Monsters <= 10) Boss_Conjure_CD++;
	else if (R == 0) Boss_Conjure_CD++;
	SetPos(Bx - 1, By - 1), Map_Colors(0), cout << " ●● ";
	SetPos(Bx, By - 1), Map_Colors(4),     cout << ">####<";
	SetPos(Bx + 1, By - 1), Map_Colors(4), cout << " ^^^^ ";
	Map_Colors(0);
	if (abs(Bx - X) <= 1 && abs(By - Y) <= 1) Jian(50);
	int I, J;
	if (Boss_CrossBullet_CD > 0) {
		Boss_CrossBullet_CD--;
		I = Bx - 2, J = By + rand() % 3 - 1;
		if (CanGo(I, J, 7)) m[I][J] = 211;
		I = Bx + rand() % 3 - 1, J = By + 2;
		if (CanGo(I, J, 7)) m[I][J] = 213;
		I = Bx + 2, J = By + rand() % 3 - 1;
		if (CanGo(I, J, 7)) m[I][J] = 215;
		I = Bx + rand() % 3 - 1, J = By - 2;
		if (CanGo(I, J, 7)) m[I][J] = 217;
	}
	if (Boss_CornerBullet_CD > 0) {
		Boss_CornerBullet_CD--;
		I = Bx - 2, J = By + 2;
		if (CanGo(I, J, 7)) m[I][J] = 212;
		I = Bx + 2, J = By + 2;
		if (CanGo(I, J, 7)) m[I][J] = 214;
		I = Bx + 2, J = By - 2;
		if (CanGo(I, J, 7)) m[I][J] = 216;
		I = Bx - 2, J = By - 2;
		if (CanGo(I, J, 7)) m[I][J] = 218;
	}
	if (Boss_Poison_CD > 0) {
		if (Boss_Poison_CD > 0) Boss_Poison_CD--;
		for (int i = Bx - 4; i <= Bx + 4; i++) for (int j = By - 4; j <= By + 4; j++) if (CanGo(i, j, 2) && abs(Bx - X) > 1 && abs(By - Y) > 1 && i > 0 && j > 0) m[i][j] = 59;
	}
	if (Boss_Conjure_CD > 0) {
		Boss_Conjure_CD--;
		I = Bx + rand() % 5 - 2, J = By + rand() % 5 - 2;
		int rr = rand() % 6 - 1;
		if (rr == -1) rr = 0;
		if (((rr < 3 && Lev < 5) || (Lev > 5)) && (CanGo(I, J, 7))) m[I][J] = 50 + rr;
	}
	if (Lev == 4) ms = 3;
	if (Lev == 9) ms = 5;
	if (Lev == 14) ms = 10;
	if (Lev == 19) ms = 15;
	if (Lev == 24) ms = 20;
	if (T % 50 == 0 && Boss_HP < ms * 12) Boss_HP++, Map(3);

	// 处理BOSS被子弹击中的金钱奖励
	for (int i = Bx - 1; i <= Bx + 1; i++) {
		for (int j = By - 1; j <= By + 1; j++) {
			int du = 0;
			if (m[i][j] / 100 == 1) {
				int oldBossHP = Boss_HP;
				Boss_HP -= 1, Boss_CrossBullet_CD += rand() % 3 + 1, Map(3);

				// 如果BOSS死亡,给予金钱奖励
				if (Boss_HP <= 0 && oldBossHP > 0) {
					Money += ms * MONEY_BOSS_PER_BAR;
				}
			}
			if (m[i][j] / 10 == 15) {
				int oldBossHP = Boss_HP;
				Boss_HP -= 2, Map(3);

				// 如果BOSS死亡,给予金钱奖励
				if (Boss_HP <= 0 && oldBossHP > 0) {
					Money += ms * MONEY_BOSS_PER_BAR;
				}
			}
			if (m[i][j] < 50 || m[i][j] > 55) m[i][j] = 0;
			if (m[i][j] >= 84 && m[i][j] <= 87) {
				int oldBossHP = Boss_HP;
				Boss_HP -= 1, Boss_CrossBullet_CD += rand() % 3 + 1, Map(3);

				// 如果BOSS死亡,给予金钱奖励
				if (Boss_HP <= 0 && oldBossHP > 0) {
					Money += ms * MONEY_BOSS_PER_BAR;
				}
			}
			if (du == 0 && m[i][j] >= 9 && m[i][j] <= 30) {
				int oldBossHP = Boss_HP;
				Boss_HP -= 1, du++, Boss_Poison_CD++, Map(3);

				// 如果BOSS死亡,给予金钱奖励
				if (Boss_HP <= 0 && oldBossHP > 0) {
					Money += ms * MONEY_BOSS_PER_BAR;
				}
			}
			if (Boss_HP <= 0) {
				Boss_HP = 0;
				SetPos(Bx - 1, By - 1), cout << "      ";
				SetPos(Bx, By - 1), cout << "      ";
				SetPos(Bx + 1, By - 1), cout << "      ";
			}
		}
	}
}
void Map(int x) {
	if (x != 4) CoutMe();
	int f1, f2, f3, f4, Guai = 0;
	if (x == 0) f1 = f3 = 2, f2 = f4 = 38;
	if (x == 1 ) f1 = f3 = 1, f2 = f4 = 39;
	if (x == 2) f1 = X - 1, f2 = X + 1, f3 = Y - 1, f4 = Y + 1;
	if (f1 < 1) f1 = 1;
	if (f2 > 39) f2 = 39;
	if (f3 < 1) f3 = 1;
	if (f4 > 39) f4 = 39;
	if ((x == 4 || x == 3 || x == 1) && Win >= 0) {
		// 修改Map()函数中的武器显示部分
		SetPos(44, 2), cout << "  武器: ";
		if (Gun_type == 1) cout << "制式突击步枪";
		if (Gun_type == 2) cout << "破片弹投射器";
		if (Gun_type == 3) cout << "反掩体重型狙";
		if (Gun_type == 4) cout << "量子穿透利刃";
		if (Gun_type == 5) cout << "RPG-01火箭筒";
		if (Gun_type == 6) cout << "便携式毒气炮";
		if (Gun_type == 7) cout << "史莱姆发射器";
		if (Gun_type == 8) cout << "龙血骨钢长剑"; // 改为龙血骨钢长剑
		cout << "     弹药:";
		if (Gun_type == 1) cout << "∞";
		else if (Gun_type == 8) cout << "∞"; // 剑也是无限的
		else cout << G[Gun_type] << " ";
		// 添加金钱显示
		SetPos(45, 2);
		Map_Colors(5); // 金色
		cout << "    金钱: " << Money << "$  (可能没法及时显示,但关卡结束会一并返还)";
		Map_Colors(0);

		SetPos(41, 2), cout << "  HP:";
		Map_Colors(4);
		int r;
		if (Unable_To_Be_Attacked > 0) r = rand() % 5 + 1, Map_Colors(r);
		for (int i = 1; i <= HP_Player; i++) cout << "█";
		Map_Colors(0);
		for (int i = HP_Player; i < MaxHP_Player; i++) cout << "█";
		Map_Colors(0);
		SetPos(42, 2), cout << "  DE:";
		Map_Colors(9);
		if (DE_Player != 0) for (int i = 1; i <= DE_Player; i++) cout << "█";
		Map_Colors(0);
		for (int i = max(1, DE_Player); i < MaxDE_Player; i++) cout << "█";
		// 显示关卡信息
		SetPos(-2, 5), cout << "    关卡: " << Lev / 5 + 1 << " - " << Lev % 5 + 1;
		int count = 0;
		for (int i = 2; i <= 38; i++) {
			for (int j = 2; j <= 38; j++) {
				if (m[i][j] >= 50 && m[i][j] <= 54) {
					count++;
				}
			}
		}
		// 如果是BOSS关,加上BOSS
		if (Boss_HP > 0) {
			count++;
		}
		Num_Monsters = count;
		SetPos(-1, 5), cout << "    剩余怪物:" << Num_Monsters;

		if (Boss_HP > 0) {
			int ms;
			if (Lev == 4) ms = 3;
			if (Lev == 9) ms = 5;
			if (Lev == 14) ms = 10;
			if (Lev == 19) ms = 15;
			if (Lev == 24) ms = 20;

			// BOSS血量显示在右侧
			SetPos(-3, 15), cout << "BOSS血条:";
			Map_Colors(4);
			SetPos(-3, 15), cout << "   ";
			Map_Colors(4);
			for (int i = 1; i <= 12; i++) {

				if ((i <= Boss_HP % 12) || (Boss_HP / 12 != 0 && Boss_HP % 12 == 0) ) {
					Map_Colors(4);
					cout << "█";
				} else {
					Map_Colors(0);
					cout << "█";
				}
			}
			Map_Colors(4);
			SetPos(-2, 20), cout << "    血条数:  " << (Boss_HP - 1) / 12 + 1 << " / " << ms;
			Map_Colors(0);

		}
	}
	if (x != 3 && x != 4) {
		for (int i = f1; i <= f2; i++)
			for (int j = f3; j <= f4; j++) Guai += Cout(x, i, j);
		if (x != 2) {
			int Rr = rand() % 3;
			if (Guai < Num_Monsters && Guai != 0 && F[15] == 1 && Rr == 0 && Lev % 5 == 4)
				DE_Player = min(MaxDE_Player, DE_Player + 1), Map(3);
			Num_Monsters = Guai;
		}
		if (Guai == 0 && x == 0 && Win == 0 && Boss_HP <= 0) {
			bccd();
			if (Lev != 24) {
				system("color 6E"), Map_Colors(5);
				SetPos(2, 2), cout << "You! Win!!!";
				Sleep(500);
				SetPos(3, 2), cout << "Please point 'y' to Play AGain.", Sleep(1000);
				system("color 0F");
				Map(1);
			}
			Win++, Lev++;
		}
	}
}
void Slime_Bounce(int i, int j, int M) {
	if (M % 10 == 1 || M % 10 == 3) m[i][j] = M + 4;
	if (M % 10 == 5 || M % 10 == 7) m[i][j] = M - 4;
	if (M % 10 == 2) {
		if (m[i][j + 1] != 0 || m[i - 2][j + 1] != 0) m[i][j] = M + 6;
		else if (m[i - 1][j] != 0 || m[i - 1][j + 2] != 0) m[i][j] = M + 2;
		else m[i][j] = M + 4;
	}
	if (M % 10 == 4) {
		if (m[i + 1][j] != 0 || m[i + 1][j + 2] != 0) m[i][j] = M - 2;
		else if (m[i][j + 1] != 0 || m[i + 2][j + 1] != 0) m[i][j] = M + 2;
		else m[i][j] = M + 4;
	}
	if (M % 10 == 6) {
		if (m[i][j - 1] != 0 || m[i + 2][j - 1] != 0) m[i][j] = M - 2;
		else if (m[i + 1][j] != 0 || m[i + 1][j - 2] != 0) m[i][j] = M + 2;
		else m[i][j] = M - 4;
	}
	if (M % 10 == 8) {
		if (m[i][j - 1] != 0 || m[i - 2][j - 1] != 0) m[i][j] = M - 6;
		else if (m[i - 1][j] != 0 || m[i - 1][j - 2] != 0) m[i][j] = M - 2;
		else m[i][j] = M - 4;
	}
}
void Laser_Drawing(int i, int j, int M, int x) {
	if (M % 10 == 1) for (int k = 1; CanGo(i - k, j, x); k++)  {
			if (x == 3) m[i - k][j] = 84;
			else m[i - k][j] = 4;
		}
	if (M % 10 == 2) for (int k = 1; CanGo(i - k, j + k, x); k++) {
			if (x == 3) m[i - k][j + k] = 84;
			else m[i - k][j + k] = 4;
		}
	if (M % 10 == 3) for (int k = 1; CanGo(i, j + k, x); k++)  {
			if (x == 3) m[i][j + k] = 84;
			else m[i][j + k] = 4;
		}
	if (M % 10 == 4) for (int k = 1; CanGo(i + k, j + k, x); k++) {
			if (x == 3) m[i + k][j + k] = 84;
			else m[i + k][j + k] = 4;
		}
	if (M % 10 == 5) for (int k = 1; CanGo(i + k, j, x); k++)  {
			if (x == 3) m[i + k][j] = 84;
			else m[i + k][j] = 4;
		}
	if (M % 10 == 6) for (int k = 1; CanGo(i + k, j - k, x); k++) {
			if (x == 3) m[i + k][j - k] = 84;
			else m[i + k][j - k] = 4;
		}
	if (M % 10 == 7) for (int k = 1; CanGo(i, j - k, x); k++)  {
			if (x == 3) m[i][j - k] = 84;
			else m[i][j - k] = 4;
		}
	if (M % 10 == 8) for (int k = 1; CanGo(i - k, j - k, x); k++) {
			if (x == 3) m[i - k][j - k] = 84;
			else m[i - k][j - k] = 4;
		}
}
void Move() {
	bool nx[42][42];
	memset(nx, 0, sizeof(nx));
	ProcessMonsters(nx);
	// 原有的子弹处理逻辑保持不变
	for (int i = 2; i <= 38; i++) {
		for (int j = 2; j <= 38; j++) {
			if (m[i][j] / 100 == 2 && F[3] == 1 && T % 2 == 0) nx[i][j] = 1;
			if ((m[i][j] / 100 == 1 || m[i][j] / 100 == 2) && nx[i][j] == 0) { //子弹
				int M = m[i][j], I, J;
				m[i][j] = 0;
				SetPos(i, j), cout << "  ";
				if (M % 10 == 1) I = i - 1, J = j;
				if (M % 10 == 2) I = i - 1, J = j + 1;
				if (M % 10 == 3) I = i, J = j + 1;
				if (M % 10 == 4) I = i + 1, J = j + 1;
				if (M % 10 == 5) I = i + 1, J = j;
				if (M % 10 == 6) I = i + 1, J = j - 1;
				if (M % 10 == 7) I = i, J = j - 1;
				if (M % 10 == 8) I = i - 1, J = j - 1;

				if (I == X && J == Y && M / 100 == 2) {
					Jian(2), system("color 4F"), Sleep(30);
					system("color 0F"), m[i][j] = 0;
					Map(4);
				} else if (I == X && J == Y && M / 100 == 1) m[I][J] = 0;
				else if (M / 100 == 2 && m[I][J] / 100 == 1) m[i][j] = 32;
				else if (M / 100 == 2 && m[I][J] < 55 && m[I][J] >= 50) m[i][j] = 0;
				else if (m[I][J] == 2 || m[I][J] == 3) { //石
					if ((M % 100) / 10 == 0) {
						int rr = rand() % 3;
						if (rr == 0) Slime_Bounce(i, j, M), m[i][j] += 10;
						else m[i][j] = 84;
					}
					if ((M % 100) / 10 == 1) {
						m[i][j] = 84;
						int rr = rand() % 5;
						if (rr == 0 && F[14] == 1 && M / 100 == 1) {
							for (int ii = i - 1; ii <= i + 1; ii++)
								for (int jj = j - 1; jj <= j + 1; jj++)
									if (m[ii][jj] != 2 && m[ii][jj] != 3 && ii <= 28 && jj <= 28) m[ii][jj] = 84;
						}
					}
					if ((M % 100) / 10 == 2) {
						m[i][j] = 84;
						if (m[i - 1][j] != 2 && m[i - 1][j] != 3)     m[i - 1][j] = 111;
						if (m[i - 1][j + 1] != 2 && m[i - 1][j + 1] != 3) m[i - 1][j + 1] = 112;
						if (m[i][j + 1] != 2 && m[i][j + 1] != 3)     m[i][j + 1] = 113;
						if (m[i + 1][j + 1] != 2 && m[i + 1][j + 1] != 3) m[i + 1][j + 1] = 114;
						if (m[i + 1][j] != 2 && m[i + 1][j] != 3)     m[i + 1][j] = 115;
						if (m[i + 1][j - 1] != 2 && m[i + 1][j - 1] != 3) m[i + 1][j - 1] = 116;
						if (m[i][j - 1] != 2 && m[i][j - 1] != 3)     m[i][j - 1] = 117;
						if (m[i - 1][j - 1] != 2 && m[i - 1][j - 1] != 3) m[i - 1][j - 1] = 118;
					}
					if ((M % 100) / 10 == 3) {
						if (m[I][J] == 2 && (I != 1 && J != 1 && I != 29 && J != 29)) m[I][J] = 84;
						else m[i][j] = 84;
					}
					if ((M % 100) / 10 == 4) m[i][j] = 84;
					if ((M % 100) / 10 == 5) {
						for (int ii = i - 2; ii <= i + 2; ii++)
							for (int jj = j - 2; jj <= j + 2; jj++)
								if (m[ii][jj] != 2 && m[ii][jj] != 3 && ii <= 28 && jj <= 28) m[ii][jj] = 84;
					}
					if ((M % 100) / 10 == 6) {
						for (int ii = i - 1; ii <= i + 1; ii++)
							for (int jj = j - 1; jj <= j + 1; jj++)
								if (m[ii][jj] != 2 && m[ii][jj] != 3 && ii <= 28 && jj <= 28) m[ii][jj] = 9;
					}
					if ((M % 100) / 10 >= 7 && (M % 100) / 10 < 9) Slime_Bounce(i, j, M), m[i][j] += (rand() % 2) * 10;
					if ((M % 100) / 10 == 9) m[i][j] = 84;
				} else if (!CanGo(I, J, 6)) {
					// 这里是子弹击中怪物或障碍物的处理
					// 首先检查是否击中了怪物
					if (m[I][J] >= 50 && m[I][J] <= 55) {
						// 击中怪物,给予金钱奖励
						switch (m[I][J]) {
							case 50: // 无脑怪
								Money += MONEY_DUMB_MONSTER;
								break;
							case 51: // 毒怪
								Money += MONEY_POISON_MONSTER;
								break;
							case 52: // 散射怪
								Money += MONEY_SHOTGUN_MONSTER;
								break;
							case 53: // 狙击怪
								Money += MONEY_SNIPER_MONSTER;
								break;
							case 54: // 激光怪
								Money += MONEY_LASER_MONSTER;
								break;
							case 55: // 隐形怪
								Money += MONEY_INVISIBLE_MONSTER;
								break;
						}
					}

					// 然后根据子弹类型处理击中效果
					if ((M % 100) / 10 == 0) {
						m[I][J] = 84, Slime_Bounce(i, j, M), m[i][j] += 10;
					}
					if ((M % 100) / 10 == 1) {
						if (M / 100 == 2 && m[I][J] == 50) m[i][j] = 0;
						else m[I][J] = 84;
						if (F[14] == 1 && M / 100 == 1) {
							for (int ii = I - 1; ii <= I + 1; ii++)
								for (int jj = J - 1; jj <= J + 1; jj++)
									if (m[ii][jj] != 2 && m[ii][jj] != 3 && ii <= 28 && jj <= 28) m[ii][jj] = 84;
						}
					}
					if ((M % 100) / 10 == 2) {
						m[I][J] = 84;
						if (m[I - 1][J] != 2 && m[I - 1][J] != 3)     m[I - 1][J] = 111;
						if (m[I - 1][J + 1] != 2 && m[I - 1][J + 1] != 3) m[I - 1][J + 1] = 112;
						if (m[I][J + 1] != 2 && m[I][J + 1] != 3)     m[I][J + 1] = 113;
						if (m[I + 1][J + 1] != 2 && m[I + 1][J + 1] != 3) m[I + 1][J + 1] = 114;
						if (m[I + 1][J] != 2 && m[I + 1][J] != 3)     m[I + 1][J] = 115;
						if (m[I + 1][J - 1] != 2 && m[I + 1][J - 1] != 3) m[I + 1][J - 1] = 116;
						if (m[I][J - 1] != 2 && m[I][J - 1] != 3)     m[I][J - 1] = 117;
						if (m[I - 1][J - 1] != 2 && m[I - 1][J - 1] != 3) m[I - 1][J - 1] = 118;
					}
					if ((M % 100) / 10 == 3) m[I][J] = M, nx[I][J] = 1;
					if ((M % 100) / 10 == 4) Laser_Drawing(i, j, M, 3);
					if ((M % 100) / 10 == 5) {
						for (int ii = I - 2; ii <= I + 2; ii++)
							for (int jj = J - 2; jj <= J + 2; jj++)
								if (m[ii][jj] != 2 && m[ii][jj] != 3 && ii <= 28 && jj <= 28) m[ii][jj] = 84;
					}
					if ((M % 100) / 10 == 6) {
						for (int ii = I - 1; ii <= I + 1; ii++)
							for (int jj = J - 1; jj <= J + 1; jj++)
								if (m[ii][jj] != 2 && m[ii][jj] != 3 && ii <= 28 && jj <= 28) m[ii][jj] = 9;
					}
					if ((M % 100) / 10 >= 7 && (M % 100) / 10 < 9) m[I][J] = 84, Slime_Bounce(i, j, M);
					if ((M % 100) / 10 == 9) m[I][J] = 84;
				} else { //空地
					if ((M % 100) / 10 == 6) {
						m[i][j] = 9;
						if (CanGo(i, j - 1, 5)) m[i][j - 1] = 9;
						if (CanGo(i, j + 1, 5)) m[i][j + 1] = 9;
						if (CanGo(i - 1, j, 5)) m[i - 1][j] = 9;
						if (CanGo(i - 1, j, 5)) m[i + 1][j] = 9;
						m[I][J] = M, nx[I][J] = 1;
					}
					if ((M % 100) / 10 == 4) m[i][j] = 84, m[I][J] = M, i = 2, j = 2;
					else m[I][J] = M, nx[I][J] = 1;
				}
			}
		}
	}
	if (Boss_HP > 0) Boss();
}
void Bullet() {
	int I = 0, J = 0, R = rand() % 10, Rr = rand() % 3, Rrr, K = 0, tg = Muzzle;

	// 如果是龙血骨钢长剑,执行近战攻击
	if (Gun_type == 8) {
		// 计算攻击范围(面前5x3区域)
		int killCount = 0;
		int bossDamage = 0; // 用于计算对BOSS的伤害

		// 根据枪口方向确定攻击范围和方向
		int startX, startY, endX, endY;

		switch (Muzzle) {
			case 1: // 上
				startX = X - 5;
				endX = X - 1;
				startY = Y - 1;
				endY = Y + 1;
				break;
			case 2: // 右上
				startX = X - 5;
				endX = X - 1;
				startY = Y + 1;
				endY = Y + 5;
				break;
			case 3: // 右
				startX = X - 1;
				endX = X + 1;
				startY = Y + 1;
				endY = Y + 5;
				break;
			case 4: // 右下
				startX = X + 1;
				endX = X + 5;
				startY = Y + 1;
				endY = Y + 5;
				break;
			case 5: // 下
				startX = X + 1;
				endX = X + 5;
				startY = Y - 1;
				endY = Y + 1;
				break;
			case 6: // 左下
				startX = X + 1;
				endX = X + 5;
				startY = Y - 5;
				endY = Y - 1;
				break;
			case 7: // 左
				startX = X - 1;
				endX = X + 1;
				startY = Y - 5;
				endY = Y - 1;
				break;
			case 8: // 左上
				startX = X - 5;
				endX = X - 1;
				startY = Y - 5;
				endY = Y - 1;
				break;
		}

		// 确保坐标在合理范围内
		startX = max(2, startX);
		endX = min(38, endX);
		startY = max(2, startY);
		endY = min(38, endY);

		// 确保startX <= endX, startY <= endY
		if (startX > endX) {
			int temp = startX;
			startX = endX;
			endX = temp;
		}
		if (startY > endY) {
			int temp = startY;
			startY = endY;
			endY = temp;
		}

		// 显示剑击效果 - 先显示剑锋轨迹
		for (int step = 1; step <= 5; step++) {
			int centerX, centerY;
			switch (Muzzle) {
				case 1:
					centerX = X - step;
					centerY = Y;
					break; // 上
				case 2:
					centerX = X - step;
					centerY = Y + step;
					break; // 右上
				case 3:
					centerX = X;
					centerY = Y + step;
					break; // 右
				case 4:
					centerX = X + step;
					centerY = Y + step;
					break; // 右下
				case 5:
					centerX = X + step;
					centerY = Y;
					break; // 下
				case 6:
					centerX = X + step;
					centerY = Y - step;
					break; // 左下
				case 7:
					centerX = X;
					centerY = Y - step;
					break; // 左
				case 8:
					centerX = X - step;
					centerY = Y - step;
					break; // 左上
			}
		}
		Sleep(30); // 短暂显示剑轨迹

		// 显示完整的5x3区域攻击效果
		for (int i = startX; i <= endX; i++) {
			for (int j = startY; j <= endY; j++) {
				SetPos(i, j);
				Map_Colors(4); // 红色表示剑击
				cout << "╳";
			}
		}

		for (int i = startX; i <= endX; i++) {
			for (int j = startY; j <= endY; j++) {
				if (i >= 2 && i <= 38 && j >= 2 && j <= 38) {
					// 判断是否可破坏
					if (m[i][j] >= 50 && m[i][j] <= 55) {
						// 杀死怪物并给予金钱(长剑攻击杀死怪物)
						switch (m[i][j]) {
							case 50: // 无脑怪
								Money += MONEY_DUMB_MONSTER;
								break;
							case 51: // 毒怪
								Money += MONEY_POISON_MONSTER;
								break;
							case 52: // 散射怪
								Money += MONEY_SHOTGUN_MONSTER;
								break;
							case 53: // 狙击怪
								Money += MONEY_SNIPER_MONSTER;
								break;
							case 54: // 激光怪
								Money += MONEY_LASER_MONSTER;
								break;
							case 55: // 隐形怪(如果被长剑击杀)
								Money += MONEY_INVISIBLE_MONSTER;
								break;
						}
						m[i][j] = 84; // 烟尘效果
						killCount++;
					} else if (m[i][j] == 1) { // 木墙
						// 破坏木墙
						m[i][j] = 84; // 烟尘效果
					} else if (m[i][j] >= 4 && m[i][j] <= 7) { // 烟雾
						m[i][j] = 84; // 清烟
					}
				}
			}
		}

		// BOSS被长剑击中的处理
		if (Boss_HP > 0) {
			// 检查剑的攻击范围是否与BOSS的3x3区域重叠
			int bossLeft = Bx - 1;
			int bossRight = Bx + 1;
			int bossTop = By - 1;
			int bossBottom = By + 1;

			// 检查是否有重叠
			bool hitBoss = false;
			if (startX <= bossRight && endX >= bossLeft &&
			        startY <= bossBottom && endY >= bossTop) {
				hitBoss = true;
			}

			// 如果攻击到BOSS,造成伤害
			if (hitBoss) {
				bossDamage = 1; // 每次攻击造成1点伤害
				int oldBossHP = Boss_HP;
				Boss_HP = max(0, Boss_HP - bossDamage);

				// 如果BOSS死亡,给予金钱奖励
				if (Boss_HP <= 0 && oldBossHP > 0) {
					int ms;
					if (Lev == 4) ms = 3;
					else if (Lev == 9) ms = 5;
					else if (Lev == 14) ms = 10;
					else if (Lev == 19) ms = 15;
					else if (Lev == 24) ms = 20;
					else ms = Lev / 5 + 1;

					Money += ms * MONEY_BOSS_PER_BAR;
				}
				for (int i = bossLeft; i <= bossRight; i++) {
					for (int j = bossTop; j <= bossBottom; j++) {
						if (i >= startX && i <= endX && j >= startY && j <= endY) {
						}
					}
				}
				// 更新BOSS显示
				Map(3);
			}
		}
		// 短暂延迟后清除剑击效果
		Sleep(50);
		for (int i = startX; i <= endX; i++) {
			for (int j = startY; j <= endY; j++) {
				if (i >= 2 && i <= 38 && j >= 2 && j <= 38) {
					SetPos(i, j);
					// 恢复原来的显示
					if (m[i][j] == 0) {
						cout << "  ";
					}
				}
			}
		}
		Map_Colors(0);
		if (killCount > 0) {
			DE_Player = min(MaxDE_Player, DE_Player + killCount);
			Map(3); // 更新显示
		}
		Map(3);
		return;
	}
Hh:
	Rrr = rand() % 20;
	if (Muzzle == 1 && m[X - 1][Y] != 2 && m[X - 1][Y] != 3) I = X - 1, J = Y;
	if (Muzzle == 2 && m[X - 1][Y + 1] != 2 && m[X - 1][Y + 1] != 3) I = X - 1, J = Y + 1;
	if (Muzzle == 3 && m[X][Y + 1] != 2 && m[X][Y + 1] != 3) I = X, J = Y + 1;
	if (Muzzle == 4 && m[X + 1][Y + 1] != 2 && m[X + 1][Y + 1] != 3) I = X + 1, J = Y + 1;
	if (Muzzle == 5 && m[X + 1][Y] != 2 && m[X + 1][Y] != 3) I = X + 1, J = Y;
	if (Muzzle == 6 && m[X + 1][Y - 1] != 2 && m[X + 1][Y - 1] != 3) I = X + 1, J = Y - 1;
	if (Muzzle == 7 && m[X][Y - 1] != 2 && m[X][Y - 1] != 3) I = X, J = Y - 1;
	if (Muzzle == 8 && m[X - 1][Y - 1] != 2 && m[X - 1][Y - 1] != 3) I = X - 1, J = Y - 1;
	if (I != 0 && J != 0) m[I][J] = 100 + 10 * Gun_type + Muzzle;
	if (K == 1) m[I][J] = 110 + Muzzle;
	if (F[2] == 1 && Gun_type == 1) m[I][J] = 100 + Muzzle;
	if (F[8] == 1 && R == 0 && K == 0) {
		Muzzle = rand() % 8 + 1;
		K = 1;
		goto Hh;
	}
	if (F[8] == 1 && K != 0 && K < Rr) {
		Muzzle = rand() % 8 + 1;
		K++;
		goto Hh;
	}
	if (K >= Rr) Muzzle = tg;
	if (Rrr == 0 && F[11] == 1 && K == 0) {
		m[I][J] = 100 + 10 * (rand() % 7 + 1) + Muzzle;
	}
	if (Gun_type != 1 && Gun_type != 8) {
		G[Gun_type]--;
		if (G[Gun_type] <= 0) G[Gun_type] = 0, Gun_type = 1;
		Map(3);
	}
}
void SwitchGun() {
	int startGun = Gun_type;
	int nextGun = Gun_type;
	do {
		nextGun++;
		if (nextGun > 8) nextGun = 1;

		if (nextGun == 1 || nextGun == 8) {
			Gun_type = nextGun;
			Map(3);
			return;
		}
		if (G[nextGun] > 0) {
			Gun_type = nextGun;
			Map(3);
			return;
		}

	} while (nextGun != startGun);
	Gun_type = 1;
	Map(3);
}
void OpenBox(int a) {
	for (int i = X - 1; i <= X + 1; i++)
		for (int j = Y - 1; j <= Y + 1; j++)
			if (m[i][j] == 3) {
				int r = rand() % 8 + 2;
				if (a == 1) r = rand() % 6 + 2;
				if (F[9] == 1) r = rand() % 12 + 2;
				SetPos(i, j);
				Map_Colors(5);
				if (r == 2) cout << "破片弹投射器!";
				if (r == 3) cout << "反掩体重型狙!";
				if (r == 4) cout << "量子穿透利刃!";
				if (r == 5) cout << "RPG-01火箭筒!";
				if (r == 6) cout << "便携式毒气炮!";
				if (r == 7) cout << "史莱姆发射器!";
				if (r == 8) cout << "肾上腺素!",  HP_Player += 5, MaxHP_Player += 2, Map(3);
				if (r == 9) cout << "高级护甲!", DE_Player += 5, MaxDE_Player += 2, Map(3);
				if (F[9] == 1 && r >= 8 && r <= 13) cout << "肾上腺素!", HP_Player += 5, MaxHP_Player += 2, Map(3);
				Sleep(1000);
				m[i][j] = 84;
				if (r <= 7 && F[6] == 0)  G[r] += 10;
				if (r <= 7 && F[6] == 1)  G[r] += 20;
				SetPos(i, j);
				cout << "         ";
				Map(0);
			}
}

void Sheng() {
	memset(m, 0, sizeof(m));
	memset(n, 0, sizeof(n));
	int q = 0, T = 0, II = 0, JJ = 0;
Re:
	q++;
	int r = rand() % 20 + 1;  // 增加更多地图类型
	if (F[19] == 1) r = rand() % 25 + 1;  // 增加更多地图类型
	if (r == 1) {
		for (int i = 8; i <= 10; i++)for (int j = 8; j <= 10; j++) m[i][j] = 2;
		for (int i = 30; i <= 32; i++)for (int j = 8; j <= 10; j++) m[i][j] = 2;
		for (int i = 8; i <= 10; i++)for (int j = 30; j <= 32; j++) m[i][j] = 2;
		for (int i = 30; i <= 32; i++)for (int j = 30; j <= 32; j++) m[i][j] = 2;
	}
	if (r == 2) {
		for (int i = 18; i <= 22; i++) for (int j = 18; j <= 22; j++) m[i][j] = 1;
	}
	if (r == 3) {
		for (int i = 2; i <= 38; i++) m[i][10] = m[i][30] = m[10][i] = m[30][i] = 1;  // 调整位置
	}
	if (r == 4) {
		for (int i = 2; i <= 38; i++) m[i][20] = m[20][i] = 1;  // 调整位置
	}
	if (r == 5) {
		for (int i = 2; i <= 38; i++) if (abs(i - 20) >= 5) m[i][20] = m[20][i] = 2;  // 调整位置
	}
	if (r == 6) {
		for (int i = 2; i <= 38; i++) for (int j = 2; j <= 38; j++) if (i == j || i + j == 40) m[i][j] = 1;  // 调整对角线
	}
	if (r == 7) {
		for (int i = 2; i <= 38; i++) for (int j = 2; j <= 38; j++) if (abs(i - 20) + abs(j - 20) == 15) m[i][j] = 1;  // 调整菱形
	}
	if (r == 8) {
		for (int i = 8; i <= 32; i++) if (abs(i - 20) >= 3) m[i][13] = m[i][27] = m[13][i] = m[27][i] = 2;  // 调整位置
	}
	if (r == 9) {
		for (int i = 2; i <= 38; i++) for (int j = 2; j <= 38; j++) {
				int rr = rand() % 25;  // 调整密度
				if (rr == 0 && m[i][j] == 0) m[i][j] = 1;
			}
	}
	if (r >= 10 && II == 0) {
		T--;
		int ii = rand() % 35 + 3;  // 调整范围
		int jj = rand() % 35 + 3;  // 调整范围
		for (int i = ii - 1; i <= ii + 1; i++) for (int j = jj - 1; j <= jj + 1; j++) if (m[i][j] == 0) m[i][j] = 1;
		II = ii, JJ = jj;
	}
	if (r >= 10 && II != 0) goto Re;
	T++;
	if (T == 1) goto Re;
	if (II != 0) m[II][JJ] = 3;
	r = rand() % 20 + 1;
	if (r == 1) {
		for (int i = 5; i <= 35; i++) n[i][8] = n[i][15] = n[i][22] = n[i][29] = n[i][36] = 31;  // 调整位置
	}
	if (r == 2) {
		for (int i = 10; i <= 30; i++) n[i][10] = n[i][30] = n[10][i] = n[30][i] = 31;  // 调整位置
	}
	if (r == 3) {
		for (int i = 1; i <= 7; i++) {  // 增加数量
			int ii = rand() % 33 + 4, jj = rand() % 33 + 4;  // 调整范围
			for (int ki = ii - 3; ki <= ii + 3; ki++)for (int kj = jj - 3; kj <= jj + 3; kj++) if (abs(ki - X) > 3 || abs(kj - Y) > 3) n[ki][kj] = 1;  // 调整范围
		}
	}
	if (r == 4) {
		for (int i = 1; i <= 7; i++) {
			int ii = rand() % 33 + 4, jj = rand() % 33 + 4;
			for (int ki = ii - 1; ki <= ii + 1; ki++)
				for (int kj = jj - 1; kj <= jj + 1; kj++)
					n[ki][kj] = 11;
		}
	}
	if (r == 5) {
		for (int i = 1; i <= 30; i++) {
			int ii = rand() % 33 + 4, jj = rand() % 20 + 1; // 调整随机范围
			jj *= 2;
			// 确保不超过边界
			if (jj + 1 <= 38) {
				for (int ki = max(2, ii - 1); ki <= min(38, ii + 1); ki++)
					n[jj + 1][ki] = 31;
			}
		}
	}
	if (r == 6) {
		for (int i = 2; i <= 38; i++)
			n[i][12] = n[i][13] = n[i][20] = n[i][21] = n[i][28] = n[i][29] = 11;
	}
	if (r == 7) {
		for (int i = 5; i <= 35; i++)
			n[8][i] = n[15][i] = n[22][i] = n[29][i] = n[36][i] = 31;
	}
	if (r == 8) {
		for (int i = 10; i <= 30; i++)
			for (int j = 10; j <= 30; j++)
				if (i == j || i + j == 40) n[i][j] = 31;
	}
	if (r == 9) {
		for (int i = 2; i <= 38; i++) {
			if (i != 8 && i != 32 && !(i == Y && (19 <= X && 21 >= X))) {
				n[19][i] = n[20][i] = n[21][i] = 1;
				m[19][i] = m[20][i] = m[21][i] = 0;
			}
		}
	}
	if (r == 10) {
		for (int i = 10; i <= 30; i++)
			if (abs(i - 20) > 1)
				n[i][10] = n[i][30] = n[10][i] = n[30][i] = 1;
	}

guai:
	int k = 0, K[45][45];
	memset(K, 0, sizeof(K));
	if (Lev % 5 != 4) {
		for (int i = 2; i <= 38; i++) {
			for (int j = 2; j <= 38; j++) {
				if (Lev <= 1) {
					int r = rand() % 250;
					if (r == 0) K[i][j] = 50, k++; // 普通怪
				} else if (Lev <= 3) {
					int r = rand() % 300;
					if (r == 0) K[i][j] = 50;
					if (r == 1) K[i][j] = 51;
					if (r <= 1) k++;
				} else if (Lev <= 5) {
					int r = rand() % 320;
					if (r == 0) K[i][j] = 50;
					if (r == 1) K[i][j] = 51;
					if (r == 2) K[i][j] = 52;
					if (r == 3) K[i][j] = 55;
					if (r <= 3) k++;
				} else if (Lev <= 8) {
					int r = rand() % 420;
					if (r == 0) K[i][j] = 50;
					if (r == 1) K[i][j] = 51;
					if (r == 2) K[i][j] = 52;
					if (r == 3) K[i][j] = 53;
					if (r == 4) K[i][j] = 55;
					if (r <= 4) k++;
				} else if (Lev <= 12) {
					int r = rand() % 490;
					if (r == 0) K[i][j] = 50;
					if (r == 1) K[i][j] = 51;
					if (r == 2) K[i][j] = 52;
					if (r == 3) K[i][j] = 53;
					if (r == 4) K[i][j] = 54;
					if (r == 5) K[i][j] = 55;
					if (r <= 5) k++;
				} else {
					int r;
					if (Lev <= 15) r = rand() % 450;
					if (Lev <= 20) r = rand() % 420;
					if (Lev <= 25) r = rand() % 380;
					if (r == 0) K[i][j] = 50;
					if (r == 1) K[i][j] = 51;
					if (r == 2) K[i][j] = 52;
					if (r == 3) K[i][j] = 53;
					if (r == 4) K[i][j] = 54;
					if (r == 5) K[i][j] = 55;
					if (r <= 5) k++;
				}
			}
		}
		// 怪物数量阈值
		if (k < 5) goto guai;
		if (k > 5 && Lev <= 3) goto guai;
		if (k < 8 && Lev >= 10) goto guai;
		if (k > 10 && Lev <= 10) goto guai;
		if (k > 15 && Lev <= 15) goto guai;
		if (k < 20 && Lev >= 20) goto guai;
		if (k > 25 && Lev <= 20) goto guai;
	}

	for (int i = 2; i <= 38; i++) for (int j = 2; j <= 38; j++) {
			if (n[i][j] != 0) m[i][j] = 0;
			if (K[i][j] != 0 && (m[i - 1][j] != 2 || m[i + 1][j] != 2 || m[i][j - 1] != 2 || m[i][j + 1] != 2)) m[i][j] = K[i][j];
		}

	if (Lev % 5 == 4) {
		int ms;
		if (Lev == 4) ms = 3;
		if (Lev == 9) ms = 5;
		if (Lev == 14) ms = 10;
		if (Lev == 19) ms = 15;
		if (Lev == 24) ms = 20;
		Bx = rand() % 30 + 6;
		By = rand() % 30 + 6;

		Boss_HP = ms * 12;
		Boss_CrossBullet_CD = Boss_CornerBullet_CD = Boss_Poison_CD = Boss_Conjure_CD = 0;
		Bxz = Byz = 0;
		while ((abs(Bx - X) < 8 && abs(By - Y) < 8)) {
			Bx = rand() % 30 + 6;
			By = rand() % 30 + 6;
		}

		for (int i = max(2, Bx - 2); i <= min(38, Bx + 2); i++) {
			for (int j = max(2, By - 2); j <= min(38, By + 2); j++) {
				m[i][j] = 0;
				n[i][j] = 0;
			}
		}
	}
	for (int i = X - 1; i <= X + 1; i++) for (int j = Y - 1; j <= Y + 1; j++) if (i != 1 && i != 39 && j != 1 && j != 39) m[i][j] = 0;
	for (int i = 1; i <= 39; i++) m[1][i] = 2, m[39][i] = 2;
	for (int i = 1; i <= 39; i++) m[i][1] = 2, m[i][39] = 2;
}
void Talent() {
	int A[5], ss = 0;
	system("cls");
	if (Lev % 5 == 4) {
		SetPos(5, 5), cout << "击败BOSS!可以选择两个天赋!(数字键选择)";
	} else {
		SetPos(5, 5), cout << "选择一个天赋!(数字键选择)";
	}
Tf:
	int R = rand() % 20 + 1;
	for (int i = 1; i <= 4; i++) if (R == A[i]) goto Tf;
	if (F[R] == 1) goto Tf;
	ss++, A[ss] = R;
	SetPos(4 * ss + 5, 8), cout << ss << "、";
	if (R == 1) SetPos(4 * ss + 5, 10), cout << "护甲自动修复装置升级";
	if (R == 2) SetPos(4 * ss + 5, 10), cout << "为制式突击步枪安装史莱姆弹夹";
	if (R == 3) SetPos(4 * ss + 5, 10), cout << "时间流速减半(自己除外)";
	if (R == 4) SetPos(4 * ss + 5, 10), cout << "获得战术靴子和毒气面罩";
	if (R == 5) SetPos(4 * ss + 5, 10), cout << "开局金身时间升级";
	if (R == 6) SetPos(4 * ss + 5, 10), cout << "更持久的空投武器";
	if (R == 7) SetPos(4 * ss + 5, 10), cout << "特种护甲";
	if (R == 8) SetPos(4 * ss + 5, 10), cout << "为制式突击步枪安装霰弹";
	if (R == 9) SetPos(4 * ss + 5, 10), cout << "空投中的肾上腺素显著提升";
	if (R == 10) SetPos(4 * ss + 5, 10), cout << "每次开局有概率增加HP";
	if (R == 11) SetPos(4 * ss + 5, 10), cout << "为制式突击步枪安装魔法弹夹";
	if (R == 12) SetPos(4 * ss + 5, 10), cout << "反光镜(饰品,似乎对某些光有用)";
	if (R == 13) SetPos(4 * ss + 5, 10), cout << "护甲的临别赠礼(金身)";
	if (R == 14) SetPos(4 * ss + 5, 10), cout << "为制式突击步枪安装高爆子弹";
	if (R == 15) SetPos(4 * ss + 5, 10), cout << "概率缴获敌人护甲(BOSS关除外)";
	if (R == 16) SetPos(4 * ss + 5, 10), cout << "天空一声巨响,主角闪亮登场";
	if (R == 17) SetPos(4 * ss + 5, 10), cout << "护甲的临别赠礼(范围伤害)";
	if (R == 18) SetPos(4 * ss + 5, 10), cout << "巴豆(吃完后有概率放屁)";
	if (R == 19) SetPos(4 * ss + 5, 10), cout << "信号枪(更多的空投)";
	if (R == 20) SetPos(4 * ss + 5, 10), cout << "如意(似乎可以变出点什么东西)";
	if (ss < 4) goto Tf;
tF:
	char c = _getch();
	if (c >= '1' && c <= '4') F[A[c - '0']] = 1;
	else goto tF;
	if (A[c - '0'] == 7) MaxDE_Player += 3;

}

void Shock_Wave(int B) {
	for (int i = X - B; i <= X + B; i++) if (CanGo(i, Y - B, 3) && i > 0 && Y - B > 0) m[i][Y - B] = 86, m[i][Y - B + 1] = 8;
	for (int i = X - B; i <= X + B; i++) if (CanGo(i, Y + B, 3) && i > 0 && Y + B > 0) m[i][Y + B] = 86, m[i][Y + B - 1] = 8;
	for (int j = Y - B; j <= Y + B; j++) if (CanGo(X + B, j, 3) && j > 0 && X + B > 0) m[X + B][j] = 86, m[X + B - 1][Y] = 8;
	for (int j = Y - B; j <= Y + B; j++) if (CanGo(X - B, j, 3) && j > 0 && X - B > 0) m[X - B][j] = 86, m[X - B + 1][Y] = 8;
}
void Ci() {
	for (int i = 1; i <= 29; i++)
		for (int j = 1; j <= 29; j++) {
			if (n[i][j] >= 10 && n[i][j] < 50 && n[i][j] != 30) n[i][j]++;
			if (n[i][j] == 50) {
				n[i][j] = 31;
				if (m[i][j] == 2) m[i][j] = 0;
			}
			if (n[i][j] == 45 && !(m[i][j] >= 50 && m[i][j] < 55) && !(abs(Bx - i) <= 1 && abs(By - i) <= 1)) m[i][j] = 2;
			if (n[i][j] > 20 && n[i][j] <= 30 && m[i][j] == 0) n[i][j] = 10;
			if (n[i][j] == 20 && m[i][j] == 0 && !(abs(Bx - i) <= 1 && abs(By - i) <= 1)) m[i][j] = 1;
		}
}
int main() {
	system("mode con cols=82 lines=49");
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
	srand((unsigned)time(NULL));
// 显示主菜单
	MainMenu();
	X = 4, Y = 8, gx = gy = 0, Muzzle = 1, Gun_type = 1, Lev = 0, T;
	HP_Player = 10, DE_Player = 10, MaxHP_Player = 10, MaxDE_Player = 10;
	memset(G, 0, sizeof(G));
	memset(F, 0, sizeof(F));
St:
	Win = 0;
	Dazzling_Entrance = Farewell_Gift = 0;
	memset(m, 0, sizeof(m));
	memset(n, 0, sizeof(n));
	ResetInvisibleMonsterState(); // 初始化隐形怪状态
	G[8] = -1;
	// 添加关卡开始的调试信息
	if (Lev % 5 == 0 && Lev != 0) {
		Talent();
		Talent();
		system("cls");
	}

	T = 0;
	Sheng();
	Map(1);
	int rr = rand() % 3;
	if (F[5] == 1) Unable_To_Be_Attacked = 60;
	else Unable_To_Be_Attacked = 30;
	if (rr == 0 && F[10] == 1) HP_Player = min(HP_Player + 1, MaxHP_Player);
	if (F[16] == 1) Dazzling_Entrance = 4;
	if (F[20] == 1) {
		int Q = rand() % 7 + 2;
		Gun_type = Q, G[Q] = 5;
	}
	X = max(2, min(38, X));
	Y = max(2, min(38, Y));
	while (Win <= 0 && HP_Player > 0 && Lev < 25) {
		T++;
		if (shootCooldown > 0) shootCooldown--;
		if (Unable_To_Be_Attacked > 0) Unable_To_Be_Attacked--;
		if (Unable_To_Be_Attacked == 1) Unable_To_Be_Attacked--, Map(4);
		if (Dazzling_Entrance > 0) Shock_Wave(5 - Dazzling_Entrance), Dazzling_Entrance--;
		if (Farewell_Gift > 0) Shock_Wave(4 - Farewell_Gift), Farewell_Gift--;
		if (F[18] == 1) {
			int Rrr = rand() % 30;
			if (Rrr == 0)
				for (int i = X - 2; i <= X + 2; i++)
					for (int j = Y - 2; j <= Y + 2; j++) if (CanGo(i, j, 5) && i > 0 && j > 0) m[i][j] = 9;
		}
		if (DE_Player < MaxDE_Player) {
			if (F[1] == 1 && T % 30 == 0) DE_Player++, Map(3);
			if (F[1] == 0 && T % 70 == 0) DE_Player++, Map(3);
		}
		if (GetAsyncKeyState(VK_UP) & 0x8000) Map(2), gx--;
		else if (GetAsyncKeyState(VK_DOWN) & 0x8000) Map(2), gx++;
		else if (GetAsyncKeyState(VK_LEFT) & 0x8000) Map(2), gy--;
		else if (GetAsyncKeyState(VK_RIGHT) & 0x8000) Map(2), gy++;
		if (kbhit()) {
			char g = _getch();
			if (g == 'a') {
				Map(2);
				if (Muzzle != 1) Muzzle--;
				else Muzzle = 8;
			}
			if (g == 'd') {
				Map(2);
				if (Muzzle != 8) Muzzle++;
				else Muzzle = 1;
			}
			if (g == 'q') SwitchGun();
			if (g == 'w') OpenBox(0);
			if (g == 's' && shootCooldown <= 2) Bullet(), shootCooldown += 2;
			if (GetAsyncKeyState(VK_DELETE) & 0x8000) {
				// 清除当前关卡的所有怪物
				for (int i = 2; i <= 28; i++) {
					for (int j = 2; j <= 28; j++) {
						if (m[i][j] >= 50 && m[i][j] <= 54) {
							m[i][j] = 0;
						}
					}
				}
				if (Boss_HP > 0) {
					Boss_HP = 0;
					SetPos(Bx - 1, By - 1), cout << "      ";
					SetPos(Bx, By - 1), cout << "      ";
					SetPos(Bx + 1, By - 1), cout << "      ";
				}
				system("cls");
				system("color 6F");
				SetPos(2, 10), Map_Colors(5), cout << "跳过当前关卡!";
				bccd();
				Sleep(500);
				system("color 0F");
				Map(1);
				system("cls");
				Win = 1;
				Lev++;
				break;
			}
			if (g == ' ') Sleep(100), SetPos(-1, 18), sy++, system("pause");
		}
		if (sy == 1) SetPos(-1, 18), cout << "                           ", sy--;
		if (T % 2 == 0) Ci();
		Move();
		Map(0);
		Sleep(50);
		if (X < 1) X = 1;
		if (X > 39) X = 39;
		if (Y < 1) Y = 1;
		if (Y > 39) Y = 39;
	}
	system("cls");
	if (Win == 0 && HP_Player <= 0 && Lev < 25) {
		system("color 7F"), Map_Colors(4);
		Lev = 0;
		HP_Player = DE_Player = MaxHP_Player = MaxDE_Player = 10;
		Boss_HP = Boss_CrossBullet_CD = Boss_CornerBullet_CD = Boss_Poison_CD = Boss_Conjure_CD = 0;
		memset(G, 0, sizeof(G));
		memset(F, 0, sizeof(F));
		SetPos(2, 2);
		bccd();
		cout << "游戏结束!", Sleep(1000);
		SetPos(3, 2);
		cout << "按任意键返回主菜单...";
		_getch();
		main();
	}
	if (Lev < 25) goto St;
	if (Lev == 25) {
		system("color 6E"), Map_Colors(5);
		SetPos(2, 2), cout << "恭喜通关《死亡禁区》!";
		SetPos(4, 2), cout << "你已经击败了所有BOSS!";
		Sleep(3000);
		system("color 0F");
		system("cls");
		main();
		bccd();
	}
	return 0;
}
如果显示不全

如果你的游戏显示不全,请看这里(用Windows 7 演示,不过应该都差不多)

运行后正常是这样

如果你显示不全,右击顶部,选择属性,打开

将窗口大小调整为和zty一样,宽82,高49,其他不用管

字体大小选择8×16,字体选择点阵字体,就完成了

后记

作者:zty郑桐羽呀

联系方式:(不挂了,有事私信)

兄弟们给个赞呗

                                                  先   赞   后   看    养   成   习   惯  

本文地址:https://www.yitenyun.com/4006.html

搜索文章

Tags

#ios面试 #ios弱网 #断点续传 #ios开发 #objective-c #ios #ios缓存 #服务器 #python #pip #conda #远程工作 #kubernetes #笔记 #平面 #容器 #linux #学习方法 #Trae #IDE #AI 原生集成开发环境 #Trae AI 香港站群服务器 多IP服务器 香港站群 站群服务器 #运维 #分阶段策略 #模型协议 #人工智能 #科技 #深度学习 #自然语言处理 #神经网络 #github #git #学习 #docker #华为云 #部署上线 #动静分离 #Nginx #新人首发 #Conda # 私有索引 # 包管理 #微信 #物联网 #websocket #进程控制 #低代码 #爬虫 #音视频 #数信院生信服务器 #Rstudio #生信入门 #生信云服务器 #开源 #开发语言 #云原生 #iventoy #VmWare #OpenEuler #kylin #内网穿透 #网络 #cpolar #vscode #mobaxterm #计算机视觉 #harmonyos #鸿蒙PC #后端 #数据库 #分布式 #华为 #银河麒麟高级服务器操作系统安装 #银河麒麟高级服务器V11配置 #设置基础软件仓库时出错 #银河麒高级服务器系统的实操教程 #生产级部署银河麒麟服务系统教程 #Linux系统的快速上手教程 #fastapi #html #css #缓存 #ubuntu #node.js #FTP服务器 #MobaXterm #tcp/ip #qt #C++ #Dell #PowerEdge620 #内存 #硬盘 #RAID5 #RTP over RTSP #RTP over TCP #RTSP服务器 #RTP #TCP发送RTP #pytorch #sql #AIGC #langchain #agi #hadoop #hbase #hive #zookeeper #spark #kafka #flink #算法 #大数据 #unity #c# #游戏引擎 #mcu #flask #android #腾讯云 #gemini #gemini国内访问 #gemini api #gemini中转搭建 #Cloudflare #内存治理 #django #golang #java #redis #多个客户端访问 #IO多路复用 #回显服务器 #TCP相关API #web安全 #安全 #ssh #uni-app #小程序 #notepad++ #Ubuntu服务器 #硬盘扩容 #命令行操作 #VMware #儿童书籍 #儿童诗歌 #童话故事 #经典好书 #儿童文学 #好书推荐 #经典文学作品 #nginx #企业开发 #ERP #项目实践 #.NET开发 #C#编程 #编程与数学 #Harbor #ARM服务器 # GLM-4.6V # 多模态推理 #我的世界 #vllm #大模型 #Streamlit #Qwen #本地部署 #AI聊天机器人 #c++ #Android #Bluedroid #prometheus #jvm #everything #jar #需求分析 #数据结构 #udp #mysql #架构 #ModelEngine #vue.js #DisM++ # 系统维护 #Ascend #MindIE #性能优化 #spring boot #centos #ide #c语言 #stm32 #云计算 #智能手机 #journalctl #计算机网络 #iphone #LobeChat #vLLM #GPU加速 #diskinfo # TensorFlow # 磁盘健康 #n8n #http #网络协议 #课程设计 #SSH反向隧道 # Miniconda # Jupyter远程访问 #游戏 #MC #Ansible # 自动化部署 # VibeThinker #链表 #链表的销毁 #链表的排序 #链表倒置 #判断链表是否有环 #凤希AI伴侣 #web #webdav #epoll #高级IO #面试 #AI #大模型学习 #LoRA # RTX 3090 # lora-scripts #json #经验分享 #fiddler #网络安全 #ddos #电脑 #自动化 #windows #数据仓库 #阿里云 #spring #jmeter #功能测试 #软件测试 #自动化测试 #职场和发展 #php #VS Code调试配置 #AI论文写作工具 #学术论文创作 #论文效率提升 #MBA论文写作 #gpu算力 #grafana #jenkins #银河麒麟 #系统升级 #信创 #国产化 #asp.net大文件上传 #asp.net大文件上传下载 #asp.net大文件上传源码 #ASP.NET断点续传 #asp.net上传文件夹 #AI编程 #mvp #个人开发 #设计模式 #信息可视化 #claude code #codex #code cli #ccusage #编辑器 #ping通服务器 #读不了内网数据库 #bug菌问答团队 #金融 #mcp #金融投资Agent #Agent #京东云 #研发管理 #禅道 #禅道云端部署 #MCP #MCP服务器 #中间件 #svn #asp.net #安卓 #RAID #RAID技术 #磁盘 #存储 #1024程序员节 #前端 #项目 #高并发 #unity3d #服务器框架 #Fantasy #elasticsearch #远程桌面 #远程控制 #sizeof和strlen区别 #sizeof #strlen #计算数据类型字节数 #计算字符串长度 #pycharm #毕业设计 #车辆排放 #生信 #Spring AI #STDIO协议 #Streamable-HTTP #McpTool注解 #服务器能力 #bash #javascript #react.js #程序人生 #蓝桥杯 #java大文件上传 #java大文件秒传 #java大文件上传下载 #java文件传输解决方案 #ssl #lua #语音识别 #测试工具 #压力测试 #pencil #pencil.dev #设计 #sqlite #RAG #全链路优化 #实战教程 #openresty #wordpress #雨云 #模版 #函数 #类 #笔试 #版本控制 #Git入门 #开发工具 #代码托管 #WEB #ansible #个人博客 #制造 #守护进程 #复用 #screen #laravel #openlayers #bmap #tile #server #vue #流量监控 #SSH Agent Forwarding # PyTorch # 容器化 #shell #CPU利用率 #嵌入式编译 #ccache #distcc #openEuler #Hadoop #chatgpt #流媒体 #NAS #飞牛NAS #监控 #NVR #EasyNVR #nacos #银河麒麟aarch64 #TensorRT # Triton # 推理优化 #zabbix #信令服务器 #Janus #MediaSoup #单片机 #智能路由器 #机器学习 #YOLO #建筑缺陷 #红外 #数据集 #树莓派4b安装系统 #oracle #SA-PEKS # 关键词猜测攻击 # 盲签名 # 限速机制 #时序数据库 #我的世界服务器搭建 #minecraft #sqlserver #密码学 #鸭科夫 #逃离鸭科夫 #鸭科夫联机 #鸭科夫异地联机 #开服 #散列表 #哈希算法 #leetcode #apache #risc-v #嵌入式硬件 #ms-swift # 一锤定音 # 大模型微调 #deepseek #Playbook #AI服务器 #SSH公钥认证 # 安全加固 #cpp #microsoft #LLM #java-ee #dify #opencv #数据挖掘 #vuejs #eBPF #screen 命令 #macos #推荐算法 #tensorflow #arm #todesk #iBMC #UltraISO #gitlab #log #azure #目标检测 #flutter #数码相机 #SSH #X11转发 #Miniconda #ida #debian #改行学it #创业创新 #程序员创富 #深度优先 #DFS #mmap #nio #ONLYOFFICE #MCP 服务器 #arm开发 #嵌入式 #毕设 #STUN # TURN # NAT穿透 #tdengine #涛思数据 #claude #里氏替换原则 #进程 #操作系统 #进程创建与终止 #ollama #ai #llm #nas #企业微信 #embedding #es安装 #RustDesk #IndexTTS 2.0 #本地化部署 #mariadb #PyTorch #模型训练 #星图GPU #游戏机 #JumpServer #堡垒机 #银河麒麟操作系统 #openssh #华为交换机 #信创终端 #处理器 #ui #C# # REST API # GLM-4.6V-Flash-WEB #振镜 #振镜焊接 #teamviewer #transformer #LangGraph #CLI #Python #JavaScript #langgraph.json #微信小程序 #视频去字幕 #Linux #TCP #Socket网络编程 #raid #raid阵列 # 目标检测 #aws #PyCharm # 远程调试 # YOLOFuse #intellij-idea #database #idea #SRS #直播 #esp32教程 #milvus #springboot #知识库 #Triton # CUDA #web server #请求处理流程 #OPCUA #开源软件 #电气工程 #PLC #selenium #chrome #rdp #rust #海外服务器安装宝塔面板 #翻译 #开源工具 #ComfyUI # 推理服务器 #青少年编程 #rocketmq #单元测试 #测试用例 #libosinfo #系统架构 #算力一体机 #ai算力服务器 #政务 #maven #科研 #博士 #powerbi #Clawdbot #个人助理 #数字员工 #客户端 #DIY机器人工房 #性能 #优化 #DDR #RAM #windows11 #系统修复 #.net #大模型入门 #AI大模型 #homelab #Lattepanda #Jellyfin #Plex #Emby #Kodi #umeditor粘贴word #ueditor粘贴word #ueditor复制word #ueditor上传word图片 #其他 #IPv6 #DNS #前端框架 #reactjs #web3 #几何学 #拓扑学 #tomcat #源码 #闲置物品交易系统 #Jetty # CosyVoice3 # 嵌入式服务器 #万悟 #联通元景 #智能体 #镜像 #scala #prompt #webrtc #YOLOv8 # Docker镜像 #idm #1panel #vmware #jetty #计算机 #健身房预约系统 #健身房管理系统 #健身管理系统 #mamba #搜索引擎 #Reactor #CMake #Make #C/C++ #智慧校园解决方案 #智慧校园一体化平台 #智慧校园选型 #智慧校园采购 #智慧校园软件 #智慧校园专项资金 #智慧校园定制开发 #模型上下文协议 #MultiServerMCPC #load_mcp_tools #load_mcp_prompt #clickhouse #北京百思可瑞教育 #百思可瑞教育 #北京百思教育 #硬件工程 #ci/cd # 高并发部署 #agent #ai大模型 #vps #eclipse #spring cloud #servlet #UOS #海光K100 #统信 #wpf #MS #Materials #adb #webpack #学术写作辅助 #论文创作效率提升 #AI写论文实测 #Fun-ASR # 语音识别 # WebUI #CUDA #部署 #语言模型 #DeepSeek #昇腾300I DUO #AB包 #PowerBI #企业 #Coze工作流 #AI Agent指挥官 #多智能体系统 #负载均衡 #风控模型 #决策盲区 #扩展屏应用开发 #android runtime #Qwen3-14B # 大模型部署 # 私有化AI #c++20 #数学建模 #2026年美赛C题代码 #2026年美赛 #文心一言 #AI智能体 #vp9 #程序员 #serverless #集成测试 #微服务 #运维开发 #opc ua #opc #fpga开发 #LVDS #高速ADC #东方仙盟 # GLM-TTS # 数据安全 #API限流 # 频率限制 # 令牌桶算法 #select #黑群晖 #虚拟机 #无U盘 #纯小白 #支付 #说话人验证 #声纹识别 #CAM++ #指针 #PTP_1588 #gPTP #蓝湖 #Axure原型发布 #机器人 #ambari #gitea #wsl #浏览器自动化 #python #p2p #Windows #llama #ceph #muduo库 #结构体 #uv #uvx #uv pip #npx #Ruff #pytest #数据恢复 #视频恢复 #视频修复 #RAID5恢复 #流媒体服务器恢复 #SSH免密登录 #网站 #截图工具 #批量处理图片 #图片格式转换 #图片裁剪 #上下文工程 #langgraph #意图识别 #SMTP # 内容安全 # Qwen3Guard #蓝耘智算 #910B #昇腾 #Android16 #音频性能实战 #音频进阶 #RSO #机器人操作系统 #glibc #Anaconda配置云虚拟环境 #SSE # AI翻译机 # 实时翻译 #MQTT协议 #RK3576 #瑞芯微 #硬件设计 #C语言 #集成学习 #https #无人机 #Deepoc #具身模型 #开发板 #未来 #可信计算技术 #winscp #openHiTLS #TLCP #DTLCP #商用密码算法 #jupyter #r-tree #聊天小程序 #NFC #智能公交 #服务器计费 #FP-增长 # 双因素认证 #服务器繁忙 #cursor #UDP套接字编程 #UDP协议 #网络测试 #Proxmox VE #虚拟化 #rustdesk #postgresql #连接数据库报错 #交互 #Docker #YOLOFuse # Base64编码 # 多模态检测 #GPU服务器 #8U #硬件架构 #NPU #CANN #Host #渗透测试 #SSRF #cosmic #C #SPA #单页应用 #web3.py #swagger #IndexTTS2 # 阿里云安骑士 # 木马查杀 #visual studio code #分类 #H5 #跨域 #发布上线后跨域报错 #请求接口跨域问题解决 #跨域请求代理配置 #request浏览器跨域 #麒麟OS # 大模型 # 模型训练 #UDP的API使用 #LabVIEW知识 #LabVIEW程序 #LabVIEW功能 #labview #Java #ranger #MySQL8.0 #企业级存储 #网络设备 # Connection refused #Smokeping #智能体来了 #智能体对传统行业冲击 #行业转型 #AI赋能 #策略模式 # keep-alive #pve #word #paddleocr #zotero #WebDAV #同步失败 #代理模式 #Anything-LLM #IDC服务器 #私有化部署 #工具集 #elk #大模型应用 #API调用 #PyInstaller打包运行 #服务端部署 #数据分析 #设备驱动 #芯片资料 #网卡 #chat #大语言模型 #restful #ajax #欧拉 #YOLO26 #muduo #TcpServer #accept #高并发服务器 #ecmascript #elementui #远程开发 #VoxCPM-1.5-TTS # 云端GPU # PyCharm宕机 #pandas #matplotlib #儿童AI #图像生成 #麒麟 #postman # 水冷服务器 # 风冷服务器 # IndexTTS 2.0 # 自动化运维 #excel #copilot #全能视频处理软件 #视频裁剪工具 #视频合并工具 #视频压缩工具 #视频字幕提取 #视频处理工具 #SSH保活 #微PE #硬盘克隆 #DiskGenius #媒体 #能源 #交通物流 #OSS #手机h5网页浏览器 #安卓app #苹果ios APP #手机电脑开启摄像头并排查 #大模型部署 #mindie #大模型推理 #业界资讯 #IO #n8n解惑 #AI写作 #大模型开发 #rabbitmq #cesium #可视化 #ArkUI #ArkTS #鸿蒙开发 #esp32 arduino #HistoryServer #Spark #YARN #jobhistory #Nacos #go #模拟退火算法 #简单数论 #埃氏筛法 #puppeteer #mongodb #ARM架构 #x86_64 #数字人系统 #JAVA #yum #KMS #slmgr #uvicorn #uvloop #asgi #event #宝塔面板部署RustDesk #RustDesk远程控制手机 #手机远程控制 #yolov12 #研究生life #文件传输 #电脑文件传输 #电脑传输文件 #电脑怎么传输文件到另一台电脑 #电脑传输文件到另一台电脑 #eureka #POC #问答 #交付 #rtsp #转发 #xlwings #Excel #Aluminium #Google #三维 #3D #三维重建 #CVE-2025-61686 #漏洞 #路径遍历高危漏洞 #AI技术 #Shiro #反序列化漏洞 #CVE-2016-4437 #IntelliJ IDEA #Spring Boot #neo4j #NoSQL #SQL #Llama-Factory # 大模型推理 #nfs #iscsi #log4j #HeyGem # 服务器IP # 端口7860 # 代理转发 # 跳板机 #echarts #文件管理 #文件服务器 #VibeVoice # 语音合成 # 云服务器 #scanf #printf #getchar #putchar #cin #cout #web服务器 # 公钥认证 #5G #汇编 # GPU租赁 # 自建服务器 #代理 #mybatis #typescript #npm #gateway #Comate #遛狗 #xss #MinIO服务器启动与配置详解 #多模态 #微调 #超参 #LLamafactory #VMware Workstation16 #服务器操作系统 #arm64 #SSH复用 # 远程开发 #排序算法 #jdk #排序 #DHCP #scrapy #ShaderGraph #图形 #nvidia #aiohttp #asyncio #异步 # 远程访问 # 服务器IP配置 #软件 #本地生活 #电商系统 #商城 #串口服务器 #Modbus #MOXA #GATT服务器 #蓝牙低功耗 #阻塞队列 #生产者消费者模型 #服务器崩坏原因 # 模型微调 # ControlMaster #markdown #建站 #结构与算法 #硬件 #流程图 #论文阅读 #论文笔记 #游戏美术 #技术美术 #游戏策划 #游戏程序 #用户体验 #firefox #safari #.netcore #信号处理 #ue5 #memory mcp #Cursor #TLS协议 #HTTPS #漏洞修复 #运维安全 #matlab #googlecloud #Go并发 #高并发架构 #Goroutine #系统设计 #Dify #鲲鹏 #Tracker 服务器 #响应最快 #torrent 下载 #2026年 #Aria2 可用 #迅雷可用 #BT工具通用 #net core #kestrel #web-server #asp.net-core #vnstat #Zabbix #CosyVoice3 #语音合成 # 远程连接 #AutoDL #攻防演练 #Java web #红队 #联机教程 #局域网联机 #局域网联机教程 #局域网游戏 #EMC存储 #存储维护 #NetApp存储 #GB28181 #SIP信令 #SpringBoot #视频监控 #WT-2026-0001 #QVD-2026-4572 #smartermail #驱动开发 #TTS私有化 # IndexTTS # 音色克隆 #飞牛nas #fnos #screen命令 #WinDbg #Windows调试 #内存转储分析 #Gunicorn #WSGI #Flask #并发模型 #容器化 #性能调优 #系统管理 #服务 #Termux #Samba #系统安全 #Modbus-TCP #重构 #源代码管理 #管道Pipe #system V #ai编程 # GLM # 服务连通性 #信创国产化 #达梦数据库 #进程等待 #wait #waitpid #SAP #ebs #metaerp #oracle ebs #pdf #大模型教程 #Xshell #Finalshell #生物信息学 #组学 # 高并发 #GPU ##租显卡 #智能一卡通 #门禁一卡通 #梯控一卡通 #电梯一卡通 #消费一卡通 #一卡通 #考勤一卡通 #国产化OS #统信UOS #win10 #qemu #SSH跳转 #计算几何 #斜率 #方向归一化 #叉积 #平板 #零售 #智能硬件 #samba # 批量管理 #H5网页 #网页白屏 #H5页面空白 #资源加载问题 #打包部署后网页打不开 #HBuilderX #CTF #视觉检测 #visual studio #vim #gcc #ESP32 #传感器 #MicroPython #VMWare Tool #vivado license #CVE-2025-68143 #CVE-2025-68144 #CVE-2025-68145 #html5 #iot #智能家居 #fabric #插件 #gRPC #注册中心 #心理健康服务平台 #心理健康系统 #心理服务平台 #心理健康小程序 #win11 #c #智慧城市 #CPU #测评 #CCE #Dify-LLM #Flexus #实时音视频 #勒索病毒 #勒索软件 #加密算法 #.bixi勒索病毒 #数据加密 #spine #intellij idea #ipmitool #BMC #bootstrap #移动端h5网页 #调用浏览器摄像头并拍照 #开启摄像头权限 #拍照后查看与上传服务器端 #摄像头黑屏打不开问题 #hibernate #memcache #信息与通信 #tcpdump #大剑师 #nodejs面试题 #C2000 #TI #实时控制MCU #AI服务器电源 #kmeans #聚类 # 树莓派 # ARM架构 #文件IO #输入输出流 #远程软件 #Spring AOP #Ubuntu #ESP32编译服务器 #Ping #DNS域名解析 # OTA升级 # 黄山派 #ansys #ansys问题解决办法 # 网络延迟 #人大金仓 #Kingbase #软件工程 #租显卡 #训练推理 #代理服务器 #面向对象 #基础语法 #标识符 #常量与变量 #数据类型 #运算符与表达式 #多进程 #python技巧 #Linly-Talker # 数字人 # 服务器稳定性 #sql注入 #主板 #总体设计 #电源树 #框图 #雨云服务器 #Minecraft服务器 #教程 #MCSM面板 #numpy #鸿蒙 # 服务器配置 # GPU #Langchain-Chatchat # 国产化服务器 # 信创 #数模美赛 #UDP #pjsip #LangFlow # 轻量化镜像 # 边缘计算 #Syslog #系统日志 #日志分析 #日志监控 #AI-native #Autodl私有云 #深度服务器配置 #duckdb # 批量部署 # TTS服务器 # 键鼠锁定 #远程连接 #人脸识别sdk #视频编解码 #人脸识别 #双指针 #AI生成 # outputs目录 # 自动化 #工程设计 #预混 #扩散 #燃烧知识 #层流 #湍流 #ipv6 #量子计算 #WinSCP 下载安装教程 #SFTP #FTP工具 #服务器文件传输 #ZooKeeper #ZooKeeper面试题 #面试宝典 #深入解析 #语音生成 #TTS #服务器线程 # SSL通信 # 动态结构体 #node #报表制作 #职场 #数据可视化 #用数据讲故事 #参数估计 #矩估计 #概率论 #lvs #coffeescript #SMP(软件制作平台) #EOM(企业经营模型) #应用系统 #内存接口 # 澜起科技 # 服务器主板 #蓝牙 #LE Audio #BAP # 显卡驱动备份 #composer #symfony #java-zookeeper #Node.js # child_process #广播 #组播 #并发服务器 #麦克风权限 #访问麦克风并录制音频 #麦克风录制音频后在线播放 #用户拒绝访问麦克风权限怎么办 #uniapp 安卓 苹果ios #将音频保存本地或上传服务器 #gpu #nvcc #cuda #仙盟创梦IDE #GLM-4.6V-Flash-WEB # AI视觉 # 本地部署 #动态规划 #dlms #dlms协议 #逻辑设备 #逻辑设置间权限 #企业存储 #RustFS #对象存储 #高可用 #scikit-learn #随机森林 #安全威胁分析 #Minecraft #PaperMC #我的世界服务器 #RXT4090显卡 #RTX4090 #深度学习服务器 #硬件选型 #前端开发 #SQL注入主机 #自由表达演说平台 #演说 #3d #模块 #kong #Kong Audio #Kong Audio3 #KongAudio3 #空音3 #空音 #中国民乐 #SMARC #ARM #国产开源制品管理工具 #Hadess #一文上手 #小艺 #搜索 #空间计算 #原型模式 #devops #戴尔服务器 #戴尔730 #装系统 #酒店客房管理系统 #论文 #junit #高仿永硕E盘的个人网盘系统源码 #ThingsBoard MCP # 智能运维 # 性能瓶颈分析 #数据访问 # 服务器IP访问 # 端口映射 #产品经理 #就业 #VPS #云服务器 #搭建 #递归 #线性dp #bug #支持向量机 #音诺ai翻译机 #AI翻译机 # Ampere Altra Max #国产操作系统 #V11 #kylinos #sklearn #KMS激活 #自动化运维 #wps #C++ UA Server #SDK #跨平台开发 #ssm #Java程序员 #Java面试 #后端开发 #Spring源码 #Spring #机器视觉 #6D位姿 #CSDN #dba #mssql #数据安全 #注入漏洞 #L2C #勒让德到切比雪夫 #b树 #le audio #低功耗音频 #通信 #连接 #数字化转型 #实体经济 #商业模式 #软件开发 #数智红包 #商业变革 #创业干货 #门禁 #梯控 #智能梯控 #电梯 #电梯运力 #电梯门禁 #blender #warp #windbg分析蓝屏教程 #Buck #NVIDIA #算力 #交错并联 #DGX #bond #服务器链路聚合 #网卡绑定 # 远程运维 #Prometheus #FASTMCP #程序开发 #程序设计 #计算机毕业设计 #大作业 #高斯溅射 #vue上传解决方案 #vue断点续传 #vue分片上传下载 #vue分块上传下载 #产品运营 #TFTP #Puppet # IndexTTS2 # TTS #安全架构 #性能测试 #LoadRunner #交换机 #三层交换机 #智能制造 #供应链管理 #工业工程 #库存管理 #anaconda #虚拟环境 #SSH跳板机 # Python3.11 #AI智能棋盘 #Rock Pi S #边缘计算 #MC群组服务器 #RK3588 #RK3588J #评估板 #核心板 #嵌入式开发 #数字孪生 #三维可视化 #云开发 #个人电脑 #牛客周赛 #unix #编程 #c++高并发 #百万并发 #SSH别名 #视频 #CS2 #debian13 #BoringSSL #ip # ARM服务器 #asp.net上传大文件 #AI视频创作系统 #AI视频创作 #AI创作系统 #AI视频生成 #AI工具 #文生视频 #AI创作工具 # 鲲鹏 #超时设置 #客户端/服务器 #网络编程 #挖矿 #Linux病毒 #uip #turn #黑客技术 #网安应急响应 #k8s #计组 #数电 # 权限修复 #树莓派 #温湿度监控 #WhatsApp通知 #IoT #MySQL #TCP服务器 #开发实战 #全文检索 #矩阵 #线性代数 #AI运算 #向量 #Gateway #认证服务器集成详解 #uniapp #合法域名校验出错 #服务器域名配置不生效 #request域名配置 #已经配置好了但还是报错 #uniapp微信小程序 #框架搭建 #状态模式 #Tokio #汽车 #华为od #华为机试 #文件上传漏洞 #react native #Kylin-Server #服务器安装 #nosql # GPU集群 #数据采集 #浏览器指纹 #vncdotool #链接VNC服务器 #如何隐藏光标 #ASR #SenseVoice #A2A #GenAI #mtgsig #美团医药 #美团医药mtgsig #美团医药mtgsig1.2 #WRF #WRFDA #weston #x11 #x11显示服务器 #edge #迭代器模式 #观察者模式 #机器人学习 # IP配置 # 0.0.0.0 #证书 #求职招聘 #后端框架 #FHSS #视觉理解 #Moondream2 #多模态AI #outlook #错误代码2603 #无网络连接 #2603 #算力建设 # 数字人系统 # 远程部署 #MCP服务器注解 #异步支持 #方法筛选 #声明式编程 #自动筛选机制 #路由器 #服务器解析漏洞 #nodejs #JNI #跳槽 #galeweather.cn #高精度天气预报数据 #光伏功率预测 #风电功率预测 #高精度气象 #SSH密钥 #练习 #基础练习 #数组 #循环 #九九乘法表 #计算机实现 #sentinel #dynadot #域名 #ETL管道 #向量存储 #数据预处理 #DocumentReader #esb接口 #走处理类报异常 #超算服务器 #高性能计算 #仿真分析工作站 #CA证书 #ffmpeg #运维工具 #区块链 #生活 #网路编程 #网络攻击模型 #pyqt #知识 #smtp #smtp服务器 #PHP #银河麒麟部署 #银河麒麟部署文档 #银河麒麟linux #银河麒麟linux部署教程 #声源定位 #MUSIC #r语言 #论文复现 #服务器IO模型 #非阻塞轮询模型 #多任务并发模型 #异步信号模型 #多路复用模型 # 黑屏模式 #protobuf #领域驱动 #STDIO传输 #SSE传输 #WebMVC #WebFlux #Keycloak #Quarkus #AI编程需求分析 #音乐分类 #音频分析 #ViT模型 #Gradio应用 #npu #工业级串口服务器 #串口转以太网 #串口设备联网通讯模块 #串口服务器选型 #AITechLab #cpp-python #CUDA版本 #ServBay #入侵 #日志排查 #AI 推理 #NV #目标跟踪 #ARM64 # DDColor # ComfyUI #节日 #内网 #单例模式 #小智 #游戏服务器断线 #期刊 #SCI #rsync # 数据同步 #地理 #遥感 #Fluentd #Sonic #日志采集 #设计师 #图像处理 #taro #分布式数据库 #集中式数据库 #业务需求 #选型误 #多线程 #轻量化 #低配服务器 #Claude #claudeCode #content7 #工作 #odoo #HarmonyOS #bigtop #hdp #hue #kerberos #Apple AI #Apple 人工智能 #FoundationModel #Summarize #SwiftUI #传统行业 #docker安装seata # 串口服务器 # NPort5630 #appche #ftp #sftp #YOLO识别 #YOLO环境搭建Windows #YOLO环境搭建Ubuntu #gnu #OpenHarmony #Python办公自动化 #Python办公 #电子电气架构 #系统工程与系统架构的内涵 #自动驾驶 #Routine #生产服务器问题查询 #日志过滤 #强化学习 #策略梯度 #REINFORCE #蒙特卡洛 #百度 #ueditor导入word #opc模拟服务器 #cpu #stl #IIS Crypto #阿里云RDS #编程助手 #AI部署 # ms-swift #PN 结 #决策树 #RWK35xx #语音流 #实时传输 # 硬件配置 #超算中心 #PBS #lsf #反向代理 #sglang #Rust #adobe #数据迁移 #寄存器 #程序定制 #毕设代做 #课设 #express #cherry studio #gmssh #宝塔 #项目申报系统 #项目申报管理 #项目申报 #企业项目申报 #漏洞挖掘 #Exchange #wireshark # 服务器迁移 # 回滚方案 #系统安装 #铁路桥梁 #DIC技术 #箱梁试验 #裂纹监测 #四点弯曲 #可再生能源 #绿色算力 #风电 #H3C #dubbo #开关电源 #热敏电阻 #PTC热敏电阻 #gpt #AI应用编程 #若依 #群晖 #音乐 #EN4FE #Coturn #TURN #tcp/ip #网络 #AI Agent #开发者工具 #okhttp #范式 #计算机外设 #vue3 #人脸核身 #活体检测 #身份认证与人脸对比 #微信公众号 #Karalon #AI Test #图论 #UDP服务器 #recvfrom函数 #健康医疗 #ET模式 #非阻塞 #remote-ssh #工程实践 #AI应用 #图像识别 #I/O模型 #并发 #水平触发、边缘触发 #多路复用 #webgl #高考 #考研 #WAN2.2 #API #磁盘配额 #存储管理 #形考作业 #国家开放大学 #系统运维 #Linux多线程 #VSCode # SSH #日志模块 #Beidou #北斗 #SSR #国产PLM #瑞华丽PLM #瑞华丽 #PLM #simulink #dash #正则表达式 #信息安全 #信息收集 #poll #lucene #xml #统信操作系统 #密码 #人形机器人 #人机交互 #DDD #tdd # AI部署 #大学生 #材料工程 #智能电视 #nmodbus4类库使用教程 #docker-compose #VMware创建虚拟机 #远程更新 #缓存更新 #多指令适配 #物料关联计划 #挖漏洞 #攻击溯源 #防毒面罩 #防尘面罩 #idc #题解 #图 #dijkstra #迪杰斯特拉 #m3u8 #HLS #移动端H5网页 #APP安卓苹果ios #监控画面 直播视频流 #IFix #数据报系统 # GPU服务器 # tmux #DooTask #autosar # 环境迁移 # ProxyJump #UEFI #BIOS #Legacy BIOS #NSP #下一状态预测 #aigc #Socket #gerrit #KMS 激活 #旅游 #xshell #host key #海外短剧 #海外短剧app开发 #海外短剧系统开发 #短剧APP #短剧APP开发 #短剧系统开发 #海外短剧项目 # Qwen3Guard-Gen-8B #身体实验室 #健康认知重构 #系统思维 #微行动 #NEAT效应 #亚健康自救 #ICT人 #晶振 #cnn #经济学 #云计算运维 #http头信息 #华为od机试 #华为od机考 #华为od最新上机考试题库 #华为OD题库 #华为OD机试双机位C卷 #od机考题库 #AI+ #coze #AI入门 #PyTorch 特性 #动态计算图 #张量(Tensor) #自动求导Autograd #GPU 加速 #生态系统与社区支持 #与其他框架的对比 #运维 #ICE #cascadeur # HiChatBox # 离线AI #隐私合规 #网络安全保险 #法律风险 #风险管理 #银河麒麟服务器系统 #服务器开启 TLS v1.2 #IISCrypto 使用教程 #TLS 协议配置 #IIS 安全设置 #服务器运维工具 #clawdbot #可撤销IBE #服务器辅助 #私钥更新 #安全性证明 #双线性Diffie-Hellman #短剧 #短剧小程序 #短剧系统 #微剧 #Matrox MIL #二次开发 #vertx #vert.x #vertx4 #runOnContext #CMC #套接字 #I/O多路复用 #字节序 #CNAS #CMA #程序文件 #网络配置实战 #Web/FTP 服务访问 #计算机网络实验 #外网访问内网服务器 #Cisco 路由器配置 #静态端口映射 #网络运维 #网络安全大赛 #懒汉式 #恶汉式 #实时检测 #卷积神经网络 #DAG #云服务器选购 #Saas #线程 #pxe #CS336 #Assignment #Experiments #TinyStories #Ablation #具身智能 #free #vmstat #sar #HarmonyOS APP #MinIO #TRO #TRO侵权 #TRO和解 #spring ai #oauth2 #rtmp #Discord机器人 #云部署 #程序那些事 #星际航行 #AI电商客服 #ROS # 局域网访问 # 批量处理 #ossinsight # 高温监控 #鼠大侠网络验证系统源码 #fs7TF #canvas层级太高 #canvas遮挡问题 #盖住其他元素 #苹果ios手机 #安卓手机 #调整画布层级 #测速 #iperf #iperf3 #YOLO11 #fork函数 #进程创建 #进程终止 #分子动力学 #化工仿真 #session #clamav #外卖配送 #JADX-AI 插件 #Archcraft #命令模式 #语义检索 #向量嵌入 #boltbot #starrocks #人脸活体检测 #live-pusher #动作引导 #张嘴眨眼摇头 #苹果ios安卓完美兼容 #环境搭建 #L6 #L10 #L9 #软件需求 #tornado #个性化推荐 #BERT模型 #静脉曲张 #腿部健康 #运动 #tekton #因果学习 #Qwen3-VL # 服务状态监控 # 视觉语言模型 #新浪微博 #传媒 #隐函数 #常微分方程 #偏微分方程 #线性微分方程 #线性方程组 #非线性方程组 #复变函数 #DuckDB #协议 #边缘AI # Kontron # SMARC-sAMX8 #React安全 #漏洞分析 #Next.js #思爱普 #SAP S/4HANA #ABAP #NetWeaver #土地承包延包 #领码SPARK #aPaaS+iPaaS #智能审核 #档案数字化 #农产品物流管理 #物流管理系统 #农产品物流系统 #农产品物流 #OpenAI #故障 #Ward #文本生成 #CPU推理 #4U8卡 AI 服务器 ##AI 服务器选型指南 #GPU 互联 #GPU算力 #Arduino BLDC #核辐射区域探测机器人 #esp32 #mosquito #二值化 #Canny边缘检测 #轮廓检测 #透视变换 #效率神器 #办公技巧 #自动化工具 #Windows技巧 #打工人必备 #dreamweaver #resnet50 #分类识别训练 #Python3.11 #Spire.Office #AI工具集成 #容器化部署 #分布式架构 #2025年 #FRP #AI教程 #自动化巡检 #0day漏洞 #DDoS攻击 #漏洞排查 #异步编程 #系统编程 #Pin #http服务器 #线性回归 #基金 #股票 #ARMv8 #内存模型 #内存屏障 #娱乐 #敏捷流程 #AE #rag #AI赋能盾构隧道巡检 #开启基建安全新篇章 #以注意力为核心 #YOLOv12 #AI隧道盾构场景 #盾构管壁缺陷病害异常检测预警 #隧道病害缺陷检测 #cocos2d #图形渲染 #jquery #学术生涯规划 #CCF目录 #基金申请 #职称评定 #论文发表 #科研评价 #顶会顶刊 #FL Studio #FLStudio #FL Studio2025 #FL Studio2026 #FL Studio25 #FL Studio26 #水果软件 # DIY主机 # 交叉编译 #istio #服务发现