最新资讯

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

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

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

                                       !!爷青回!!

目录

                                       !!爷青回!!

前言

演示用编译器

标准

                                                  先   赞   后   看    养   成   习   惯  

正文

适配操作系统

如果显示不全

后记


前言

哈哈哈哈哈哈哈哈哈哈!!!爷青回!!!你们的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

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