#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; //剩余防御力
};
struct fumo {
string name;
bool hanbing;//是否冻结
int level_huo;
int level_bin;
int level_du;
int level_baohu;
int level_baoji;
int huo[10];
int du[10];
int bin[10];
int baohu[10];
int huo_exp[10];
int du_exp[10];
int bin_exp[10];
int baohu_exp[10];
int baoji_exp[10];
};
int flag, cnt;
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;
fumo fire, ice, poi, ptc, cs;
string dengji[10] = {"", "I", "II", "III", "IV", "V"};
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("# 迷宫探险 v2.0 #\n");
printf("# 开发者:jinyanshao(洛谷名) #\n");
printf("# 特别鸣谢:MWL_wma(洛谷名) #\n");
printf("# yuyanrong(附魔设计) #\n");
printf("#############################\n");
printf("# 使用 wasd 进行控制 #\n");
printf("# 画有\"&\"的地点 #\n");
printf("# 代表一个man #\n");
printf("# 画有\"#\"的地点 #\n");
printf("# 你无法进入 #\n");
printf("# 画有\"*\"的地点 #\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;
fire.name = "火焰附加(^^^)", fire.huo[1] = 3, fire.huo[2] = 6, fire.huo[3] = 9, fire.huo_exp[1] = 5, fire.huo_exp[2] = 10, fire.huo_exp[3] = 15;
ice.name = "冰封裂变(|&|)", ice.bin[1] = 10, ice.bin[2] = 8, ice.bin[3] = 5, ice.bin_exp[1] = 5, ice.bin_exp[2] = 10, ice.bin_exp[3] = 15;
poi.name = "毒影缠绕(~&~)", poi.du[1] = 1, poi.du[2] = 3, poi.du[3] = 5, poi.du_exp[1] = 5, poi.du_exp[2] = 10, poi.du_exp[3] = 15;
ptc.name = "保护(|@|)", ptc.baohu[1] = 5, ptc.baohu[2] = 8, ptc.baohu[3] = 10, ptc.baohu[4] = 15, ptc.baohu[5] = 20, ptc.baohu_exp[1] = 5, ptc.baohu_exp[2] = 10, ptc.baohu_exp[3] = 15, ptc.baohu_exp[4] = 20, ptc.baohu_exp[5] = 25;
cs.name = "阳寿暴击(^@^)", cs.baoji_exp[1] = 10, cs.baoji_exp[2] = 15, cs.baoji_exp[3] = 20, cs.baoji_exp[4] = 25, cs.baoji_exp[5] = 30;
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() % max(1, plr.wea.more_atk_rand - cs.level_baoji) == 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);
real_atk += fire.huo[fire.level_huo];
real_atk += poi.du[poi.level_du];
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.real_hp = ai.real_hp - (real_atk - (ai.arm.defense + ai.real_es));
ai.arm.defense = 0;
ai.real_es = 0;
}
}
cout << "铛! " << plr.name << " 造成了 " << real_atk << " 滴血 的伤害!" << endl;
if (fire.level_huo > 0 || poi.level_du > 0)cout << "( ";
if (fire.level_huo > 0)cout << "灼烧 + " << fire.huo[fire.level_huo] << " ";
if (poi.level_du > 0)cout << "腐蚀 + " << poi.du[poi.level_du] << " ";
if (fire.level_huo > 0 || poi.level_du > 0)cout << ")";
}
void Attack2(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);
real_atk -= ptc.baohu[ptc.level_baohu];
real_atk = max(real_atk, 0);
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.real_hp = ai.real_hp - (real_atk - (ai.arm.defense + ai.real_es));
ai.arm.defense = 0;
ai.real_es = 0;
}
}
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);
cnt += 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 (ice.level_bin > 0 && rand() % ice.bin[ice.level_bin] == 0) cout << endl << ai.name << "被冰冻了" << endl;
else {
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;
if (poi.level_du > 0) {
cout << "中毒 -" << poi.du[poi.level_du] << " 滴血" << endl;
ai.real_hp = max(0, ai.real_hp - poi.du[poi.level_du]);
}
} else {
cout << ai.name << " 攻击了你 !" << endl;
Attack2(ai, plr);
cout << endl;
if (poi.level_du > 0) {
cout << "中毒 -" << poi.du[poi.level_du] << " 滴血" << endl;
ai.real_hp = max(0, ai.real_hp - poi.du[poi.level_du]);
}
}
}
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) {
if (flag == 1)cout << "换不换?(换的话附魔会掉哦,嘻嘻)" << endl;
else cout << "换不换?" << endl;
cout << _P_.wea.name << endl << pick_it.name << endl;
cout << "(yes / no)" << endl;
string ins;
cin >> ins;
if (ins == "yes") {
_P_.wea = pick_it;
if (flag == 1) {
fire.level_huo = 0;
ice.level_bin = 0;
poi.level_du = 0;
}
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 ) {
if (flag == 1)cout << "换不换?(换的话附魔会掉哦,嘻嘻)" << endl;
else cout << "换不换?" << endl;
cout << _P_.arm.name << endl << pick_it_2.name << endl;
cout << "(yes / no)" << endl;
string ins_2;
cin >> ins_2;
if (ins_2 == "yes") {
_P_.arm = pick_it_2;
if (flag == 1)ptc.level_baohu = 0;
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);
}
void fu_mo() {
again:
bool f;
system("cls");
cout << "附魔台" << endl << endl;
cout << "金币数:" << cnt << endl << endl;
cout << "你的附魔: " << endl;
if (fire.level_huo > 0)cout << " " << fire.name << dengji[fire.level_huo] << endl;
if (ice.level_bin > 0)cout << " " << ice.name << dengji[ice.level_bin] << endl;
if (poi.level_du > 0)cout << " " << poi.name << dengji[poi.level_du] << endl;
if (ptc.level_baohu > 0)cout << " " << ptc.name << dengji[ptc.level_baohu] << endl;
if (cs.level_baoji > 0)cout << " " << cs.name << dengji[cs.level_baoji] << endl;
cout << endl;
cout << "购买:" << endl;
if (fire.level_huo + 1 <= 3)cout << "1. 火焰附加 " << fire.huo_exp[fire.level_huo + 1] << endl;
if (ice.level_bin + 1 <= 3)cout << "2. 冰封裂变 " << ice.bin_exp[ice.level_bin + 1] << endl;
if (poi.level_du + 1 <= 3)cout << "3. 毒影缠绕 " << poi.du_exp[poi.level_du + 1] << endl;
if (ptc.level_baohu + 1 <= 3)cout << "4. 保护 " << ptc.baohu_exp[ptc.level_baohu + 1] << endl;
if (cs.level_baoji + 1 <= 3)cout << "5. 阳寿暴击 " << cs.baoji_exp[cs.level_baoji + 1] << endl;
cout << endl << "输出 8 退出" << endl;;
char ch;
int x;
cinn:
ch = getch();
x = ch - '0';
if (x == 8)return;
while (x != 1 && x != 2 && x != 3 && x != 4 && x != 5) {
cout << "输入不合法!!!" << endl;
ch = getch();
x = ch - '0';
if (x == 8)return;
}
if (x == 1) {
if (cnt < fire.huo_exp[fire.level_huo + 1] || fire.level_huo + 1 > 3) {
cout << "输入不合法!!!" << endl;
goto cinn;
}
cnt -= fire.huo_exp[fire.level_huo + 1];
fire.level_huo ++;
cout << "购买成功!!!";
PAUSE(1);
goto again;
}
if (x == 2) {
if (cnt < ice.bin_exp[ice.level_bin + 1] || ice.level_bin + 1 > 3) {
cout << "输入不合法!!!" << endl;
goto cinn;
}
cnt -= ice.bin_exp[ice.level_bin + 1];
ice.level_bin ++;
cout << "购买成功!!!";
PAUSE(1);
goto again;
}
if (x == 3) {
if (cnt < poi.du_exp[poi.level_du + 1] || poi.level_du + 1 > 3) {
cout << "输入不合法!!!" << endl;
goto cinn;
}
cnt -= poi.du_exp[poi.level_du + 1];
poi.level_du ++;
cout << "购买成功!!!";
PAUSE(1);
goto again;
}
if (x == 4) {
if (cnt < ptc.baohu_exp[ptc.level_baohu + 1] || ptc.level_baohu + 1 > 5) {
cout << "输入不合法!!!" << endl;
goto cinn;
}
cnt -= ptc.baohu_exp[ptc.level_baohu + 1] ;
ptc.level_baohu ++;
cout << "购买成功!!!";
PAUSE(1);
goto again;
}
if (x == 5) {
if (cnt < cs.baoji_exp[cs.level_baoji + 1] || cs.level_baoji + 1 > 5) {
cout << "输入不合法!!!" << endl;
goto cinn;
}
cnt -= cs.baoji_exp[cs.level_baoji + 1];
cs.level_baoji ++;
cout << "购买成功!!!";
PAUSE(1);
goto again;
}
}
//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 ? '&' : ' '));
}
}
}
int x, y;
x = rand() % 17 + 1;
y = rand() % 31 + 1;
while ((x == 17 && y == 31) || (x == 1 && y == 1) || (maze[x + 1][y] == '#' && maze[x][y + 1] == '#' && maze[x - 1][y] == '#' && maze[x][y - 1] == '#')) {
x = rand() % 17;
y = rand() % 31;
}
maze[x][y] = '$';
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 << endl;
cout << "等级 :" << _P_.lv << "(" << _P_.exp << "/" << int(pow(1.5, _P_.lv + 1)) << ") " << _P_.name << endl;
cout << "金币 :" << cnt << endl;
cout << "武器 : " << _P_.wea.name << " ";
if (fire.level_huo > 0)cout << fire.name << dengji[fire.level_huo] << " ";
if (ice.level_bin > 0)cout << ice.name << dengji[ice.level_bin] << " ";
if (poi.level_du > 0)cout << poi.name << dengji[poi.level_du] << " ";
if (cs.level_baoji > 0)cout << cs.name << dengji[cs.level_baoji] << " ";
cout << endl;
cout << "盔甲 : " << _P_.arm.name << " ";
if (ptc.level_baohu > 0)cout << ptc.name << " " << dengji[ptc.level_baohu] << " ";
cout << endl;
cout << "血量 : " << _P_.real_hp << "/" << _P_.max_hp << endl;
cout << "盔甲血量 : " << _P_.real_es << "/" << _P_.max_es + _P_.arm.defense << endl;
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] == '$') {
fu_mo();
}
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("# yuyanrong(附魔设计) #\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() {
MessageBox(NULL, "抵制不良游戏,拒绝盗版游戏 注意自我保护,谨防受骗上当 适度游戏益脑,过度游戏伤身 合理安排时间,享受健康生活", "温馨提示", MB_OKCANCEL);
int x;
// fire.level_huo = 3;
// ice.level_bin = 3;
// ptc.level_baohu = 5;
// poi.level_du = 3;
// cs.level_baoji = 3;
cnt = 10;
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;
}
cout << "请选择难度\n";
cout << "1. 简单(帮你撑过一级)\n";
cout << "2. 困难\n";
cout << "3. 地狱模式\n";
cin >> x;
if (x == 1) {
_P_.base_atk = 5;
_P_.max_hp = 66;
_P_.real_hp = 55;
}
if (x == 3)flag = 1;
Sleep(500);
system("cls");
seed = time(NULL);
srand(seed);
FightItemINIT();
Game(Sx, Sy);
return 0;
}
此次改动增加了附魔功能,特别鸣谢 yuyanrong 给出的思路!!!