惊,风靡全网战斗迷宫居然曾是一道题

[宝藏迷宫 这样哪错了 题目ID 9862 最近探险家们在X国发现了一处遗迹,里面的地形复杂好比一个迷宫,但是里面有非常多的宝藏。 探险家们提前用“鹰眼”探查到了这个迷宫的地图结构,可以用一个二维图来表示。’#’代表无法跨越的陷阱,’*’代表可以去的位置,某些位置上存在宝藏,用一个数字表示这个宝藏的价值。遗迹特别神奇,某个位置一旦经过就会消失,不可再次到达。在迷宫中移动有上下左右四种方式。 探险家们想要知道从左上角的入口到达右下角的出口,最多可以获得多少宝藏?]

输入格式

第一行包含两个整数n,m,表示迷宫的大小。接下来的n行,每行包含m个字符,代表迷宫(保证入口没有陷阱)。

输出格式

一个整数。代表总共可获得的宝藏价值和,无法到达出口则输出-1

样例

Input 1

5 6 1****# ###2# 4#### ###1# 1

Output 1

6

样例解释

这个测试样例中,一种可行的路径是:从(1,1)位置开始,向下,向下,向下,向下,向下,右移,右移,右移,右移,右移,到达(5,6)位置。在这个路径中,可以获得的宝藏价值是1+4+1=6。

数据范围

1 <= N,M<= 7,0<=宝藏价值<=9

在2023年4月和2024年7月曾在论坛上发出!!!!!!!!!!!
:astonished: :astonished: :astonished:
8月13日,有人做出了很相似的游戏———战斗迷宫。
字符完全一样!!!!
搜索:“宝藏迷宫”即可查阅题目:宝藏迷宫。

6 个赞

啊?

2 个赞

这道题我们考试时做到了

3 个赞

可以搜索一下,是真的

2 个赞

看到了

2 个赞

我就说是对的吧

2 个赞

点个赞呗 :stuck_out_tongue_winking_eye:

2 个赞

点了

2 个赞

thank you :grin:

3 个赞
#include <iostream>
#include <bits/stdc++.h>
#ifdef _WIN32
#define WINDOWS
#include <windows.h>
#include <conio.h>
#define in(c) c = getch()
#endif
#ifdef __linux__
#define LINUX
#include <unistd.h>
#include <signal.h>
#endif
using namespace std;
bool HackerMode = 0;//黑客模式
bool Exit;
int logD(int n) {
	if (!n) {
		return 0;
	}
	return logD(n / 10) + 1;
}

const int MAX_DRUG_NUM = 3;
void PAUSE(int s) {
	Sleep(s * 1000);
}
struct WEAPON {		//武器
	string name;	//名字
	int atk;		//攻击
	int more_atk;
	int more_atk_rand;
};
struct ARMOR {		//盔甲
	string name;	//名字
	int dr;			//
	int defense;
	double percent_dr;
	int sb_rand;
};
struct DRUG {		//药物
	string name;
	int hp_add;
};
struct PLAYER {
	string name;
	WEAPON wea;
	ARMOR arm;

	DRUG bag[10];
	int drug_num;

	int exp;		//经验
	int lv;			//等级

	int max_hp;		//血量上限
	int real_hp;	//真正血量

	int base_atk;	//基础攻击力

	int max_es;		//自身防御力上限
	int real_es;	//剩余防御力
};

PLAYER _P_, Summ;

WEAPON mood_sword, stone_sword, gold_sword, iron_sword, diamond_sword, end_sword, strange_sword;

ARMOR leather_armor, chain_armor, iron_armor, gold_armor, diamond_armor, happy_armor;

DRUG little_heart, broken_heart;

PLAYER SummonAIBOSS() {
	int ai_lv = rand() % 3 + 10;	//boss 等级
	PLAYER ret_ai;
	ret_ai.name = "美国总统";
	ret_ai.lv = ai_lv;
	ret_ai.exp = 0;
	ret_ai.max_hp = int((rand() % 3 + 10) * pow(1.25, ai_lv));
	ret_ai.max_es = ret_ai.max_hp / (rand() % 2 + 2);
	ret_ai.base_atk = int(pow((rand() % 5 + 115.0) / 100.0, ai_lv));
	ret_ai.real_hp = ret_ai.max_hp;

	ret_ai.wea = end_sword;

	ret_ai.arm = gold_armor;

	ret_ai.drug_num = 3;
	for (int i = 1; i <= ret_ai.drug_num; i++)ret_ai.bag[i] = little_heart;

	return ret_ai;
}
PLAYER SummonAI(int ai_lv) {
	PLAYER ret_ai;

	if (rand() % 5 == 0)ret_ai.name = "美国大兵";
	else if (rand() % 5 <= 1)ret_ai.name = "美国恶霸";
	else if (rand() % 5 <= 2)ret_ai.name = "美国主任";
	else if (rand() % 5 <= 3)ret_ai.name = "美国牢大";
	else if (rand() % 5 <= 4)ret_ai.name = "美国炮灰";

	ret_ai.lv = ai_lv;
	ret_ai.exp = 0;
	ret_ai.max_hp = int((rand() % 3 + 10) * pow(1.25, ai_lv));
	ret_ai.max_es = ret_ai.max_hp / (rand() % 2 + 2);
	ret_ai.base_atk = int(pow((rand() % 5 + 115.0) / 100.0, ai_lv));
	ret_ai.real_hp = ret_ai.max_hp;

	if (rand() % 10 == 0)ret_ai.wea = mood_sword;
	else if (rand() % 10 <= 2)ret_ai.wea = stone_sword;
	else if (rand() % 10 <= 5)ret_ai.wea = iron_sword;
	else if (rand() % 10 <= 7)ret_ai.wea = gold_sword;
	else if (rand() % 10 <= 9)ret_ai.wea = diamond_sword;


	if (rand() % 10 == 0)ret_ai.arm = leather_armor;
	else if (rand() % 10 <= 2)ret_ai.arm = chain_armor;
	else if (rand() % 10 <= 5)ret_ai.arm = iron_armor;
	else if (rand() % 10 <= 7)ret_ai.arm = gold_armor;
	else if (rand() % 10 <= 9)ret_ai.arm = diamond_armor;


	ret_ai.drug_num = rand() % 3;
	for (int i = 1; i <= ret_ai.drug_num; i++) {
		if (rand() % 2 == 0)
			ret_ai.bag[i] = little_heart;
		else
			ret_ai.bag[i] = broken_heart;
	}

	return ret_ai;
}
void PrintInfo() {//初始画面
	printf("#############################\n");
	printf("#       迷宫探险 v1.1       #\n");
	printf("# 开发者:jinyanshao(洛谷名) #\n");
	printf("#  特别鸣谢:MWL_wma(洛谷名) #\n");
	printf("#############################\n");
	printf("#     使用 wasd 进行控制    #\n");
	printf("#       画有\"&\"的地点       #\n");
	printf("#        代表一个man        #\n");
	printf("#       画有\"#\"的地点       #\n");
	printf("#         你无法进入        #\n");
	printf("#       画有\"*\"的地点       #\n");
	printf("#        代表一个惊喜       #\n");
	printf("#       画有\"!\"的地点       #\n");
	printf("#      代表最终的 Boss      #\n");
	printf("#  你的目标是达到右下角的点 #\n");
	printf("#      并且击败 Boss!      #\n");
	printf("#       起航吧探险者!      #\n");
	printf("#############################\n");
	system("pause");
}
void FightItemINIT() {
	mood_sword.name = "木剑 -|-- ", mood_sword.atk = 1, mood_sword.more_atk = 3, mood_sword.more_atk_rand = 2;
	stone_sword.name = "石剑 -|--> ", stone_sword.atk = 2, stone_sword.more_atk = 5, stone_sword.more_atk_rand = 3;
	iron_sword.name = "铁剑 =|==> ", iron_sword.atk = 3, iron_sword.more_atk = 7, iron_sword.more_atk_rand = 4;
	gold_sword.name = "金剑 =|===> ", gold_sword.atk = 4, gold_sword.more_atk = 9, gold_sword.more_atk_rand = 3;
	diamond_sword.name = "钻石剑 ==|====> ", diamond_sword.atk = 5, diamond_sword.more_atk = 10, diamond_sword.more_atk_rand = 3;
	end_sword.name = "下界合金剑 -+====> ", end_sword.atk = 7, end_sword.more_atk = 18, end_sword.more_atk_rand = 3;
	strange_sword.name = "阳寿剑  =:)==>", strange_sword.atk = 1, strange_sword.more_atk = 114514, strange_sword.more_atk_rand = 8;

	leather_armor.name = "皮革甲 (_)", leather_armor.dr = 3, leather_armor.percent_dr = 2.0, leather_armor.sb_rand = 1000, leather_armor.defense = 0;
	chain_armor.name = "锁链甲 (_)", chain_armor.dr = 3, chain_armor.percent_dr = 1.5, chain_armor.sb_rand = 1000, chain_armor.defense = 0;
	iron_armor.name = "铁甲 (_)", iron_armor.dr = 2.5, iron_armor.percent_dr = 1.0, iron_armor.sb_rand = 1000, iron_armor.defense = 0;
	gold_armor.name = "金甲 |_|", gold_armor.dr = 2, gold_armor.percent_dr = 0.9, gold_armor.sb_rand = 1000, gold_armor.defense = 10;
	diamond_armor.name = "钻石甲 |_|", diamond_armor.dr = 1.5, diamond_armor.percent_dr = 0.85, diamond_armor.sb_rand = 1000, diamond_armor.defense = 15;
	happy_armor.name = "下界合金甲 (::)", happy_armor.dr = 1.0, happy_armor.percent_dr = 0.75, happy_armor.sb_rand = 2, happy_armor.defense = 8;
	little_heart.name = "小血瓶 (o)", little_heart.hp_add = 10;
	broken_heart.name = "大血瓶 (0)", broken_heart.hp_add = 20;

	Summ.name = "Summ";
	Summ.drug_num = 0;
	Summ.base_atk = 10000;
	Summ.max_hp = 20;
	Summ.real_hp = 20;
	Summ.max_es = 100000;
	Summ.real_es = 100000;
	Summ.exp = 2;
	Summ.lv = 30;
	Summ.arm = diamond_armor;
	Summ.wea = end_sword;
}
void FightUI(PLAYER plr, PLAYER ai) {
	system("cls");
	// 等级(经验 / 多少经验升级)名字
	cout << "等级:" << plr.lv << "(" << plr.exp << "/" << int(pow(1.5, plr.lv + 1)) << ")   " << plr.name << endl;
	//武器名
	cout << "武器 : " << plr.wea.name << endl;
	//盔甲名
	cout << "盔甲 : " << plr.arm.name << endl;
	//真实血量/最大血量
	cout << "血量 : " << plr.real_hp << "/" << plr.max_hp << endl;
	//剩余防御/ 自身最大防御 + 盔甲防御值
	cout << "防御 : " << plr.real_es << "/" << plr.max_es + plr.arm.defense << endl;

	cout << endl << endl;

	cout << "等级:" << ai.lv << "(" << ai.exp << "/" << int(pow(1.5, ai.lv + 1)) << ")   " << ai.name << endl;
	cout << "武器 : " << ai.wea.name << endl;
	cout << "盔甲 : " << ai.arm.name << endl;
	cout << "血量 : " << ai.real_hp << "/" << ai.max_hp << endl;
	cout << "盔甲血量 : " << ai.real_es << "/" << ai.max_es + ai.arm.defense << endl;

	cout << endl << endl;

	cout << "按 k/K 键攻击,输入 1/2/3 来使用血瓶." << endl;
	cout << "背包" << endl;
	for (int i = 1; i <= plr.drug_num; i++)
		cout << i << "." << plr.bag[i].name << endl;

	cout << endl << endl;
}
void LevelUP(PLAYER &plr) {	//升级
	if (plr.exp < int(pow(1.5, plr.lv + 1)))
		return;
	else {
		system("cls");
		cout << "你升到了 " << plr.lv + 1 << " 级!" << endl;
		plr.exp -= int(pow(1.5, plr.lv + 1));
		plr.lv++;
		plr.max_hp = int((rand() % 3 + 10) * pow(1.25, plr.lv));
		plr.max_es = plr.max_hp / (rand() % 2 + 2);
		plr.base_atk = int(pow((rand() % 5 + 115.0) / 100.0, plr.lv));
		plr.real_hp = plr.max_hp;
	}
	if (HackerMode) {
		plr.base_atk = 10000;
		plr.max_hp = 1919810;
		plr.real_hp = 114514;
	}
}
void FightINIT(PLAYER &plr) {	//战斗前的初始化
	plr.real_es = plr.max_es;	//防御力初始化
}
void Attack(PLAYER &plr, PLAYER &ai) {
	int real_atk = plr.base_atk;
	if (plr.wea.more_atk_rand != 0 && rand() % plr.wea.more_atk_rand == 0) {
		cout << "暴击了!!!" << endl;
		real_atk += plr.wea.more_atk;
	} else
		real_atk += plr.wea.atk;
	if (ai.arm.percent_dr != 0)
		real_atk = real_atk * ai.arm.percent_dr;
#ifdef DEBUG
	cout << "DEBUG : now " << ai.name << " arm's precent_dr is " << ai.arm.percent_dr << endl;
	cout << "DEBUG : now " << plr.name << " real_atk is " << real_atk << endl;
#endif
	real_atk -= ai.arm.dr;
	real_atk = max(real_atk, 1);
	if (ai.arm.sb_rand != 0  &&  rand() % ai.arm.sb_rand == 0)
		cout << "闪避!" << endl;
	else {
		if (ai.arm.defense >= real_atk)
			ai.arm.defense -= real_atk;
		else if (ai.arm.defense + ai.real_es >= real_atk) {
			ai.arm.defense = 0;
			ai.real_es -= real_atk;
		} else {
			ai.arm.defense = 0;
			ai.real_es = 0;
			ai.real_hp = ai.real_hp - (real_atk - (ai.arm.defense + ai.real_es));
		}
	}
	cout << "铛! " << plr.name << " 造成了 " << real_atk << " 滴血 的伤害!" << endl;
}
bool Fight(PLAYER &plr, PLAYER ai) {
	FightINIT(plr);
	FightINIT(ai);
	while (1) {
		FightUI(plr, ai);
		if (plr.real_hp <= 0 && ai.real_hp <= 0) {
			cout << "你和敌人同归于尽了!\n";
			cout << "你将额外获得 1 滴血!\n";
			PAUSE(1.5);
			plr.real_hp = 1;
			return true;
		}
		if (plr.real_hp <= 0) {
			cout << "你输了!" << endl;
			Sleep(1000);
			cout << "你的荣耀将由下一个人传承" << endl;
			Sleep(1000);
			PAUSE(1.5);
			return false;
		}
		if (ai.real_hp <= 0) {
			cout << "恭喜你,在怪物的攻击下活下来了!" << endl;
			plr.exp += max(1, (rand() % 3 + 10) * ai.lv / 10);
			LevelUP(plr);
			PAUSE(1.5);
			return true;
		}

		cout << plr.name << " , 轮到你了!" << endl;
atk_again:
		char op;
#ifdef WINDOWS
		in(op);
#endif
		if ('0' <= op && op <= '9') {
			int arr = op - '0';
			if (arr > plr.drug_num)
				cout << "你没有足够的药物了 :(" << endl;
			else {
				cout << plr.bag[arr].name << endl;
				for (int i = 1; i <= 4; i++) {
					cout << "gulu ";
					Sleep(300);
				}
				cout << endl;
				cout << "哎嘛,香!" << endl;
				Sleep(500);
				cout << "哎嘛,真香!" << endl;
				Sleep(500);
				cout << "哎嘛,太香了!" << endl;
				Sleep(500);
				for (int i = arr; i <= plr.drug_num - 1; i++)plr.bag[i] = plr.bag[i + 1];
				plr.drug_num--;
				plr.real_hp = min(plr.max_hp, plr.real_hp + plr.bag[arr].hp_add);
				cout << "铛! 你还有 " << plr.real_hp << "滴血 !" << endl;
			}
		} else if (op == 'K' || op == 'k')Attack(plr, ai);
		else {
			cout << "请按 k/K/1~9 操作" << endl;
			Sleep(500);

			goto atk_again;
		}
		PAUSE(2);
		FightUI(ai, plr);


		cout << ai.name << " , 轮到你了!" << endl;
		if (ai.real_hp * 2 < ai.max_hp && ai.drug_num != 0) {
			for (int i = 1; i <= 4; i++) {
				cout << "gulu ";
				Sleep(300);
			}
			int drug_maxx = -1, maxi;
			for (int i = 1; i <= ai.drug_num; i++) {
				if (ai.bag[i].hp_add > drug_maxx) {
					drug_maxx = ai.bag[i].hp_add;
					maxi = i;
				}
			}
			for (int i = maxi; i <= ai.drug_num - 1; i++)
				ai.bag[i] = ai.bag[i + 1];
			ai.drug_num--;
			ai.real_hp = min(ai.max_hp, ai.real_hp + drug_maxx);
			cout << ai.name << "现在血量有 " << ai.real_hp << "了!" << endl;
		} else {
			cout << ai.name << " 攻击了你 !" << endl;
			Attack(ai, plr);
		}
		PAUSE(2);
	}
}
void Pick() {
	int t = rand() % 3;
#ifdef DEBUG
	cout << "DEBUG:t is " << t << endl;
#endif
	if (t == 0) {
		WEAPON pick_it;
		int tt = rand() % 17;
		if (tt <= 3)pick_it = mood_sword;
		else if (tt <= 7)pick_it = stone_sword;
		else if (tt <= 10)pick_it = iron_sword;
		else if (tt <= 12)pick_it = gold_sword;
		else if (tt <= 14)pick_it = diamond_sword;
		else if (tt <= 15)pick_it = end_sword;
		else if (tt <= 16)pick_it = strange_sword;

		if (_P_.wea.atk) {
			cout << "换不换 ?" << endl;
			cout << _P_.wea.name << endl << pick_it.name << endl;
			cout << "(h / bh)" << endl;
			string ins;
			cin >> ins;
			if (ins == "h") {
				_P_.wea = pick_it;
				cout << "你得到了 " << pick_it.name << " !" << endl;
			}
		} else {
			_P_.wea = pick_it;
			cout << "你得到了 " << pick_it.name << " !" << endl;
		}
	} else if (t == 1) {
		ARMOR pick_it_2;
		int tt2 = rand() % 16;
		if (tt2 <= 3)pick_it_2 = leather_armor;
		else if (tt2 <= 7)pick_it_2 = chain_armor;
		else if (tt2 <= 10)pick_it_2 = iron_armor;
		else if (tt2 <= 12)pick_it_2 = gold_armor;
		else if (tt2 <= 14)pick_it_2 = diamond_armor;
		else if (tt2 <= 15)pick_it_2 = happy_armor;

		if (_P_.arm.dr ) {
			cout << "换不换 ?" << endl;
			cout << _P_.arm.name << endl << pick_it_2.name << endl;
			cout << "(h / bh)" << endl;
			string ins_2;
			cin >> ins_2;
			if (ins_2 == "h") {
				_P_.arm = pick_it_2;
				cout << "你得到了 " << pick_it_2.name << " !" << endl;
			}
		} else {
			_P_.arm = pick_it_2;
			cout << "你得到了 " << pick_it_2.name << " !" << endl;
		}
	} else {
		if (_P_.drug_num > MAX_DRUG_NUM) {
			cout << "你没有足够的空间了 :(" << endl;
			PAUSE(1);
			return;
		}
		int tt3 = rand() % 3;
#ifdef DEBUG
		cout << "DEBUG : _P_.drug_num is " << _P_.drug_num << endl;
#endif
		if (tt3 <= 1) {
			_P_.bag[++_P_.drug_num] = little_heart;
			cout << "你得到了 " << little_heart.name << " !" << endl;
		} else {
			_P_.bag[++_P_.drug_num] = broken_heart;
			cout << "你得到了 " << broken_heart.name << " !" << endl;
		}
	}
	PAUSE(1);
}
//begin makemap
int Sx = 2, Sy = 2;
struct side {
	int from, to;
} edges[14405];
const int I = 17, J = 31;
int indplan = 0, p[125];
char maze[20][40];
vector<int> g[125];
long long seed = time(0);
void print(int x, int y);

int find(int x) {
	if (p[x] != x) {
		p[x] = find(p[x]);
	}
	return p[x];
}
void init() {
	memset(&edges, 0, sizeof(struct side));
	for (int i = 1; i <= 120; i++) {
		g[i].clear();
	}
	for (int i = 1; i <= 120; i++) {
		if (i + 15 >= 1 && i + 15 <= 120) {
			edges[++indplan].from = i;
			edges[indplan].to = i + 15;
		}
		if (i + 1 >= 1 && i + 1 <= 120 && i % 15 != 0) {
			edges[++indplan].from = i;
			edges[indplan].to = i + 1;
		}
	}
}

void kruskal() {
	memset(maze, '#', sizeof(maze));
	init();
	for (int i = 1; i <= 120; i++) {
		p[i] = i;
	}
	for (int j = 1; j <= indplan; j++) {
		int beyond = rand() % indplan + 1;
		swap(edges[j], edges[beyond]);
	}
	int endcnt = 0;
	for (int i = 1; i <= indplan; i++) {
		if (endcnt == 119) {
			break;
		}
		if (i + 1 == indplan && endcnt < 119) {
			i = 1;
		}
		if (rand() % 2) {
			if (find(edges[i].from) != find(edges[i].to)) {
				endcnt++;
				// cout << edges[i].from << ' ' << edges[i].to << endl;
				p[find(p[edges[i].from])] = find(edges[i].to);
				g[edges[i].from].push_back(edges[i].to - edges[i].from);
			}
		}
	}
	int id = 1;
	for (int i = 2; i <= I; i += 2) {
		for (int j = 2; j <= J; j += 2) {
			maze[i][j] = ' ';
			for (int k = 0; k < g[id].size(); k++) {
				if (g[id][k] == 1) {
					//->
					maze[i][j + 1] = ' ';
				}
				if (g[id][k] == 15) {
					//down
					maze[i + 1][j] = ' ';
				}
			}
#ifdef dev
			print(seed);
			clear();
#endif
			id++;
		}
	}
	for (int i = 1; i <= I; i++) {
		for (int j = 1; j <= J; j++) {
			if (maze[i][j] != '#') {
				int x = rand();
				maze[i][j] = (x % 8 == 0 ? '*' : (x % 8 == 1 ? '&' : ' '));
			}
		}
	}
	maze[I - 1][J - 1] = '!';
}

void print(int x, int y) {
	for (int i = 1; i <= I; i++) {
		for (int j = 1; j <= J; j++) {
			if (i == x && j == y) cout << "@";
			else cout << maze[i][j];
		}
		cout << endl;
	}
	cout << "# 等级:" << _P_.lv << "(" << _P_.exp << "/" << int(pow(1.5, _P_.lv + 1)) << ")   " << _P_.name;
	for (int i = 1; i <= 16 - logD(_P_.lv) - logD(_P_.exp) - logD(int(pow(1.5, _P_.lv + 1))) - _P_.name.length(); i++) {
		printf(" ");
	}
	printf("#\n");
	cout << "# 武器 : " << _P_.wea.name;
	for (int i = 1; i <= 21 - _P_.wea.name.length(); i++) {
		printf(" ");
	}
	printf("#\n");
	cout << "# 盔甲 : " << _P_.arm.name;
	for (int i = 1; i <= 21 - _P_.arm.name.length(); i++) {
		printf(" ");
	}
	printf("#\n");
	cout << "# 血量 : " << _P_.real_hp << "/" << _P_.max_hp;
	for (int i = 1; i <= 20 - logD(_P_.real_hp) - logD(_P_.max_hp); i++) {
		printf(" ");
	}
	printf("#\n");
	cout << "# 盔甲血量 : " << _P_.real_es << "/" << _P_.max_es + _P_.arm.defense;
	for (int i = 1; i <= 15 - logD(_P_.real_es) - logD(_P_.max_es + _P_.arm.defense); i++) {
		printf(" ");
	}
	printf("#\n");

	cout << "###############################\n";

	cout << "输入 1/2/3 来使用血瓶." << endl;
	cout << "背包" << endl;
	for (int i = 1; i <= _P_.drug_num; i++)
		cout << i << "." << _P_.bag[i].name << endl;

	cout << endl << endl;
}
//end makemap
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
void Operation(char ch, int &x, int &y, bool &dead) {
	if (!dead)return;
	int op;
	if (ch == 'w')op = 3;
	else if (ch == 'a')op = 1;
	else if (ch == 's')op = 2;
	else op = 0;
	if (ch >= '1' && ch <= '9') {
		int arr = ch - '0';
		if (arr > _P_.drug_num)
			cout << "你没有足够的药物了 :(" << endl;
		else {
			cout << _P_.bag[arr].name << endl;
			for (int i = 1; i <= 4; i++) {
				cout << "gulu ";
				Sleep(300);
			}
			cout << endl;
			cout << "哎嘛,香!" << endl;
			Sleep(500);
			cout << "哎嘛,真香!" << endl;
			Sleep(500);
			cout << "哎嘛,太香了!" << endl;
			Sleep(500);
			for (int i = arr; i <= _P_.drug_num - 1; i++)_P_.bag[i] = _P_.bag[i + 1];
			_P_.drug_num--;
			_P_.real_hp = min(_P_.max_hp, _P_.real_hp + _P_.bag[arr].hp_add);
		}
	}
	int nx = x + dx[op], ny = y + dy[op];
	if (nx < 1 || nx > I || ny < 1 || ny > J)return;
	if (maze[nx][ny] == '#')return;
	if (maze[nx][ny] == '*') {
		Pick();
		maze[nx][ny] = ' ';
	}
	if (maze[nx][ny] == '&') {
		dead = Fight(_P_, SummonAI(max(1, min(9, _P_.lv + rand() % 4 - 2))));
		if (dead)
			maze[nx][ny] = ' ';
	}
	if (maze[nx][ny] == '!') {
		if (!HackerMode)
			dead = Fight(_P_, SummonAIBOSS());
		else {
			cout << endl << "不 " << _P_.name << "!!! 这是BOSS !!!" << endl;
			PAUSE(1);
			dead = Fight(_P_, Summ);
		}
		if (dead) {
			maze[nx][ny] = ' ';
			cout << " 你通关了!!! 你可以 退出 或者 继续探索 !!!\n";
			PAUSE(2);
			system("cls");
			printf("#############################\n");
			printf("#       迷宫探险 v1.1       #\n");
			printf("# 开发者:jinyanshao(洛谷名) #\n");
			printf("#  特别鸣谢:MWL_wma(洛谷名) #\n");
			printf("#############################\n");
			printf("#                           #\n");
			printf("#                           #\n");
			printf("#     You win the game!     #\n");
			printf("#                           #\n");
			printf("#                           #\n");
			printf("#                           #\n");
			printf("#      按 y 以继续探索      #\n");
			printf("#                           #\n");
			printf("#                           #\n");
			printf("#        按 n 以退出        #\n");
			printf("#                           #\n");
			printf("#                           #\n");
			printf("#############################\n");
			char ch;
			ch = getch();
			if (ch == 'n') {
				Exit = 1;
			}
		}
	}
	x = nx, y = ny;
}
void Game(int x, int y) {
back_and_agian:
	kruskal();
	cout << "注意看!@是你" << endl;
	print(x, y);
	cout << endl << "请使用 wasd 控制 @ 行走" << endl << endl;
	cout << "如果这个地图错误了,你可以按下 Esc 重开.";
	cout << endl;
	char ch;
	ch = getch();
	if (ch == 27) {
		system("cls");
		goto back_and_agian;
	}
	while (1) {
		ch = getch();
		bool dead = true;
		Operation(ch, x, y, dead);
		if (!dead || Exit)return;
		system("cls");
		print(x, y);
	}
}
int main() {
	PrintInfo();
	system("cls");
	_P_ = SummonAI(1);
	cout << "请输入名字:";
	cin >> _P_.name;
	if (_P_.name == "经验")
		_P_.exp += 10000;
	if (_P_.name == "创造") {
		_P_.base_atk = 10000;
		_P_.max_hp = 1919810;
		_P_.real_hp = 114514;
		HackerMode = true;
	}
	seed = time(NULL);
	srand(seed);
	FightItemINIT();
	Game(Sx, Sy);
	return 0;
}




#include<bits/stdc++.h>
using namespace std;
int n,a1,a2,b1,b2,m,ans=0x3f3f3f3f,sum,vis[101][101];
char a[101][101];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void f(int x,int y,int cnt)
{
if(x>n||y>m)
return ;
if(a[y]>=‘0’&&a[y]<=‘9’)
cnt+=(a[y]-‘0’);
sum=cnt;
vis[y]=1;
for(int i=0;i<4;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(xx>0&&yy>0&&xx<=n&&yy<=m&&vis[xx][yy]==0)
{
vis[xx][yy]=1;
f(xx,yy,cnt);
vis[xx][yy]=0;
}
}
vis[y]=0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
f(1,1,0);
cout<<sum;
return 0;
}





上是战斗迷宫,下是宝藏迷宫,功能不一样,代码基本不同
3 个赞