#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int hard;//游戏难度
int progress,hidscore,ep;//主线进程 隐藏分 经验值
string place="达米尔星";//位置
bool tflag,sflag,eflag,cflag,rflag,dflag,yflag;//每一个神殿是否解锁
bool tfin,sfin,efin,cfin,rfin,dfin,yfin;//每一个神殿是否完成
//神殿
struct sanc{
string name;//名称
string smap;//地图压缩
int fx,fy,sx,sy,room;
char note;/*
fx 终点x坐标
fy 终点y坐标
sx 起点x坐标
sy 起点y坐标
room 房间数量
note 辨识号码(在代码中容易区分)
*/
//地图压缩:每行之间以"*"间隔
};
queue<sanc> sancs;//神殿队列
map<char,vector<vector<char> > > mp;//神殿地图
void say(string s,int speed){
for(int i=0;i<(int)s.size();i++){
putchar(s[i]);
Sleep(1000/speed);
}
puts("");
}
void sanc_reset(){//神殿初始化
sanc timesa;//时间神殿
timesa.name="time sanctuary Level ";
timesa.note='t';
if(hard==1)timesa.name+="1";
if(hard==2)timesa.name+="2";
if(hard==3)timesa.name+="3";
timesa.smap="##.##*#..##*#.###*#...#*###.#*#...#";
timesa.fx=1,timesa.fy=3;
timesa.sx=6,timesa.sy=2;
timesa.room=11;
sancs.push(timesa);
sanc spacesa;//空间神殿
spacesa.name="space sanctuary Level ";
spacesa.note='s';
if(hard==1)spacesa.name+="1";
if(hard==2)spacesa.name+="2";
if(hard==3)spacesa.name+="3";
spacesa.smap="###.#*#...#*#.###*#.###*#..##*##.##";
spacesa.fx=1,spacesa.fy=4;
spacesa.sx=6,spacesa.sy=3;
spacesa.room=9;
sancs.push(spacesa);
sanc elemsa;//元间神殿
elemsa.name="element sanctuary Level ";
elemsa.note='e';
if(hard==1)elemsa.name+="1";
if(hard==2)elemsa.name+="2";
if(hard==3)elemsa.name+="3";
elemsa.smap="##.##*##..#*###.#*###.#*##..#*##.##";
elemsa.fx=1,elemsa.fy=3;
elemsa.sx=6,elemsa.sy=3;
elemsa.room=8;
sancs.push(elemsa);
sanc ctrlsa;//控世神殿
ctrlsa.name="control sanctuary Level ";
ctrlsa.note='c';
if(hard==1)ctrlsa.name+="1";
if(hard==2)ctrlsa.name+="2";
if(hard==3)ctrlsa.name+="3";
ctrlsa.smap="##.##*#..##*#.###*#..##*##..#*###.#";
ctrlsa.fx=1,ctrlsa.fy=3;
ctrlsa.fx=6,ctrlsa.sy=4;
ctrlsa.room=9;
sancs.push(ctrlsa);
sanc crtesa;//创世神殿
crtesa.name="create sanctuary Level ";
crtesa.note='r';
if(hard==1)crtesa.name+="1";
if(hard==2)crtesa.name+="2";
if(hard==3)crtesa.name+="3";
crtesa.smap="###.#*#...#*#.###*#.###*#.###*#..##";
crtesa.fx=1,crtesa.fy=4;
crtesa.sx=6,crtesa.sy=3;
crtesa.room=9;
sancs.push(crtesa);
sanc dstrsa;//灭世神殿
dstrsa.name="destroy sanctuary Level ";
dstrsa.note='d';
if(hard==1)dstrsa.name+="1";
if(hard==2)dstrsa.name+="2";
if(hard==3)dstrsa.name+="3";
dstrsa.smap="#.###*#..##*##.##*##.##*##..#*###.#";
dstrsa.fx=1,dstrsa.fy=2;
dstrsa.sx=6,dstrsa.sy=4;
dstrsa.room=8;
sancs.push(dstrsa);
sanc lastsa;//终末圣殿
lastsa.name="END SANCTUARY LEVEL ";
lastsa.note='Y';
if(hard==1)lastsa.name+="1";
if(hard==2)lastsa.name+="2";
if(hard==3)lastsa.name+="3";
lastsa.smap="##.####*##b.w##*####.b#*#####.#*###w.b#*##.w###*###.g.#";
lastsa.fx=1,lastsa.fy=3;
lastsa.sx=7,lastsa.sy=6;
lastsa.room=15;
sancs.push(lastsa);
}
vector<vector<char> > sanc_translate(sanc w){//翻译地图
vector<vector<char> > m;
for(int i=0;i<(int)w.smap.size();i++){
int j=1;
if(w.smap[i]=='*'){
j++;
m[j].push_back(' ');
continue;
}
m[j].push_back(w.smap[i]);
}
mp[w.note]=m;
return m;
}
void sanc_map_reset(){//神殿地图初始化
sanc f=sancs.front();
while(true){
sanc now=sancs.front();
if(now.note==f.note)break;
sancs.pop();
mp[now.note]=sanc_translate(now);
sancs.push(now);
}
}
//任务
struct task{
string name;//任务名字
bool unlocked;//是否被解锁
bool finished;//是否已完成
char type;/*任务类型
m:主线任务
n:迷你任务
*/
void unlock(){
system("cls");
if(unlocked){puts("任务已解锁!");system("cls");return;}
switch(type){
case 'm':
cout<<"主线任务:";
break;
case 'n':
cout<<"迷你任务:";
break;
}
cout<<name<<endl;
Sleep(500);
unlocked=true;
system("cls");
}
void finish(){
system("cls");
if(finished){puts("任务已完成!");system("cls");return;}
switch(type){
case 'm':
cout<<"主线任务:";
break;
case 'n':
cout<<"迷你任务:";
break;
}
cout<<name<<"已完成!"<<endl;
Sleep(500);
finished=true;
system("cls");
}
};
queue<task> maintasks;//主线任务
vector<task> minitasks;//迷你任务
void task_reset(){//任务初始化
//主线任务:
task prepretime;
prepretime.unlocked=prepretime.finished=false;
prepretime.name="寻找神殿线索!";
prepretime.type='m';
maintasks.push(prepretime);
task pretime;
pretime.unlocked=pretime.finished=false;
pretime.name="进入时间神殿!";
pretime.type='m';
maintasks.push(pretime);
task intime;
intime.unlocked=intime.finished=false;
intime.name="探索时间神殿!";
pretime.type='m';
maintasks.push(intime);
}
void print_task(){//输出任务
puts("请选择任务分类:");
puts("1.主线任务 2.迷你任务 3.未完成任务 4.已完成任务");//分类
int c;
cin>>c;
switch(c){
case 1:{
task f=maintasks.front();
maintasks.pop();
if(f.unlocked){
cout<<".主线任务:"<<f.name<<endl;
cout<<"状态:";
if(f.finished)cout<<"已完成";
else cout<<"未完成";
puts("");
maintasks.push(f);
}
for(;;){
task n=maintasks.front();
if(n.name==f.name)break;
maintasks.pop();
if(!n.unlocked)continue;
cout<<"主线任务:"<<n.name<<endl;
cout<<"状态:";
if(n.finished)cout<<"已完成";
else cout<<"未完成";
puts("");
maintasks.push(n);
}
system("pause");
system("cls");
break;
}
case 2:{
for(auto n: minitasks){
if(!n.unlocked)continue;
cout<<"迷你任务:"<<n.name<<endl;
cout<<"状态:";
if(n.finished)cout<<"已完成";
else cout<<"未完成";
puts("");
}
system("pause");
system("cls");
break;
}
case 3:{
task f=maintasks.front();
maintasks.pop();
if(f.unlocked&&(!f.finished)){
cout<<"主线任务:"<<f.name<<endl;
cout<<"状态:未完成"<<endl;
maintasks.push(f);
}
for(;;){
task n=maintasks.front();
if(n.name==f.name)break;
maintasks.pop();
if((!n.unlocked)||n.finished)continue;
cout<<"主线任务:"<<n.name<<endl;
cout<<"状态:未完成"<<endl;
maintasks.push(n);
}
for(auto n:minitasks){
if((!n.unlocked)||n.finished)continue;
cout<<"迷你任务:"<<n.name<<endl;
cout<<"状态:未完成"<<endl;
}
system("pause");
system("cls");
break;
}
case 4:{
if(!maintasks.empty()){
task f=maintasks.front();
maintasks.pop();
if(f.unlocked&&f.finished){
cout<<"主线任务:"<<f.name<<endl;
cout<<"状态:未完成"<<endl;
maintasks.push(f);
}
for(;;){
task n=maintasks.front();
if(n.name==f.name)break;
maintasks.pop();
if((!n.unlocked)||(!n.finished))continue;
cout<<"主线任务:"<<n.name<<endl;
cout<<"状态:已完成"<<endl;
maintasks.push(n);
}
}
if(!minitasks.empty()){
for(auto n:minitasks){
if((!n.unlocked)||(!n.finished))continue;
cout<<"迷你任务:"<<n.name<<endl;
cout<<"状态:已完成"<<endl;
}
}
system("pause");
system("cls");
break;
}
}
}
struct mob{//怪物
string name;
int attack,defence,blood;
int k;
/*
name:名字
attack:攻击伤害
defence:防御
blood: 血量
k:增幅指数(随着等级分的增加,怪物的数值也会随之增加)
*/
};
mob death,rememberor,shooter,walker,flier,mainbug,skeleton,cloud;
/*death:死灵 rememberor:回忆者 shooter:守卫者射手 walker:徘徊者 flier:飞行者 mainbug:世界病毒 skeleton:骷髅 cloud:云端圣手*/
void mob_reset(){
}
struct skill{//技能
string name;
int colddown,timesset;
int level;
int levelup[8][4][3];
string effect;
/*
name:名字
colddown:冷却时间
timesset:限制次数
level:等级
levelup[i][j][1]:升到i级需要的物品编号
levelup[i][j][2]:升到i级需要的物品数量
effect:描述效果
*/
};
map<string,skill> skillist;
void skill_reset(){
}
struct Lamen{//法阵
string name;
vector<skill> skills;
bool can;
/*
name 名字
skills 一堆技能
can 能否使用
*/
};
void Lamen_reset(){
}
void game_reset(){//初始化
sanc_reset();
sanc_map_reset();
task_reset();
}
void opening(){//开场白
say("此游戏归Ay(BC20270055)所有",100);Sleep(500);
say("游戏前作:《天灵传说1:翼龙降世》",30);
say("当初那个游戏十分的烂,不过建议玩玩了解剧情",40);
say("可能这个游戏也没好多少......",20);Sleep(500);
system("cls");
say("作者是个蒟蒻,请多多关照",100);Sleep(500);
say("那么,开始你的游戏吧!",100);Sleep(500);
say("请选择难度:",1000);
while(1){
puts("1.简单 2.中等 3.困难");
int h;cin>>h;
if(h==1||h==2||h==3){
hard=h;
break;
}else{
cout<<"额,请重新输入"<<endl;
while(1)malloc(114514);
}
}
system("cls");
}
void story(int now){//剧情概览
printf("是否跳过剧情?\n输入0跳过 输入其余任意键观看剧情\n");
char c;cin>>c;
system("cls");
if(c=='0')return;
switch(now){
case 0:
say("达米尔星,是一个充满神话的行星",50);Sleep(500);
say("这上面,发生过许许多多的故事",50);Sleep(600);
say("和事故......",50);Sleep(500);
say("每一个太平盛世,所有人都对神话深信不疑",50);Sleep(600);
say("每一次灾难到来,神话便立刻遭到唾弃",50);Sleep(550);
say("然而,每一次灾难,所有的决定都会掌握在一个特定的人身上",50);Sleep(650);
say("这样的人被称作天灵",50);Sleep(550);
say("一般来说,每一个时代都只有一位天灵,他或她会独自对抗危机,并将达米尔星拯救于水深火热之中",50);Sleep(700);
say("然而,这段时间的危机似乎超乎想象",50);Sleep(500);
say("上天安排了数位天灵......",50);Sleep(500);
say("此即所谓“天灵传说”",30);Sleep(1000);
system("cls");
say("这个危机的开端,得从翼龙复活开始说起......",50);Sleep(600);
say("那之前1000年,翼龙被打败了",50);Sleep(500);
say("但是,这是一个充满神话的时代......",50);Sleep(500);
say("有许多翼龙的信徒出现了",50);Sleep(400);
say("总共7个",100);Sleep(200);
say("而当时出现了一位天灵......",50);Sleep(400);
say("他叫做普·利姆......",50);Sleep(400);
say("他研究出了多元宇宙的关系",50);Sleep(400);
say("将时间线裂成9份",50);Sleep(300);
say("利用混沌系统将自己变成一个不确定的量子态",50);Sleep(600);
say("在每一个时间线中,他有着不同的身份和攻击形态",50);Sleep(600);
say("他的想法是,在9个宇宙当中,总有一个能够成功",50);Sleep(500);
say("然而讽刺的是,他在9个宇宙中都成功了,但也同时将达米尔星拉入了毁灭的深渊......",50);Sleep(650);
say("(以上参见《天灵传说1:翼龙降世》)",100);Sleep(1000);
say("巨龙复活了......",50);Sleep(1000);
system("cls");
say("你,是被选中的第二位天灵",50);Sleep(500);
say("你的任务十分明显,那就是阻止翼龙毁灭达米尔星",50);Sleep(500);
say("当然,这是有头绪的,不然这游戏也没得玩了",50);Sleep(500);
say("翼龙诞生后,龙之祭坛升起了一座神殿,将巨龙封印在了神殿中......",50);Sleep(500);
say("这说明,的确有一些古老的机关用于防范巨龙......",50);Sleep(500);
say("与此同时,达米尔星一些特定的地方升起了神殿......",50);Sleep(500);
say("总共6座",50);Sleep(200);
say("这想必是古老的神为如今的形势作出的准备",50);Sleep(300);
say("所以,你需要去探索一个个神殿,为屠龙做出准备......",50);Sleep(1000);
system("cls");
break;
case 1:
say("第一个神殿,位于赤道之上......",50);Sleep(500);
say("这个神殿完全是黑色,还泛着轻微的绿光......",50);Sleep(500);
say("但是,神殿似乎不开放,你目前根本进不去......",50);Sleep(500);
say("你现在唯一的办法,就是去到神殿旁边的村子求助",50);Sleep(1000);
system("cls");
say("这个位于赤道炎热气候的村子叫做塔礼村",50);Sleep(500);
say("同世界上所有的村子一样,他们的信仰神话和先进城市的大不相同",50);Sleep(500);
say("在这里,你也许可以找出一些线索......",50);Sleep(500);
say("探索一下吧!",50);Sleep(500);
maintasks.front().unlock();
break;
}
}
void journey(){
cout<<"你要去哪里?\n1.达米尔星 2.塔李村"<<endl;
if(tflag)cout<<"3.时间神殿 "<<endl;
int ans;
cin>>ans;
switch(ans){
case 1:
place="达米尔星";
break;
case 2:
place="塔李村";
break;
case 3:
if(!tflag){
break;
}
place="时间神殿";
break;
}
}
void explore(){
if(place=="达米尔星"){
say("你的面前坐着整个行星的神父......",40);Sleep(500);
say("虽然我们有行星的首相,但他实际上没什么权力,而在这个神话为主的世界里,神父则拥有绝对的权力",20);Sleep(400);
say("但是如今,危机来临,你作为选定的天灵获得了至高无上的权力......",30);Sleep(400);
say("神父已没有了以往威严神圣的神情,取而代之的,是一种深深的恐惧......",40);Sleep(1400);
system("cls");
return;
}else if(place=="塔李村"){
if(!tflag){
cout<<"是否跳过剧情?\n1.是 2.否"<<endl;
bool t;cin>>t;
if(t)return;
say("你拜访了塔李村......",30);Sleep(500);
say("你拜见了一个居民,从他们那里,你得知了另一个神话......",40);Sleep(500);
say("很久以前,这里曾经有一场巨大的风波",40);Sleep(500);
say("当时,一个女人曾经造访这里,自称是死灵法师,在天空中打开了一个巨大的眼睛",40);Sleep(500);
say("大量的死灵出现,掠夺了村庄",50);Sleep(500);
say("当时,村庄危在旦夕,许多人都死了,剩下的都流离失所",40);Sleep(500);
say("这个时候,天上突然闪过一道绿光",40);Sleep(500);
say("据居民所说,有一个人以常人难以想象的速度把一个长枪刺向了那个死灵法师",40);Sleep(500);
say("之后,那个人来到了村庄中,自称是时间之神",50);Sleep(500);
say("他拯救了村庄,并创造了一个神殿将死灵法师封印在这里",50);Sleep(500);
say("但是不久之前,那个死灵法师曾经在巨龙的帮助下破开了封印飞了出去",50);Sleep(500);
say("但是那个时间之神如今却不知去向",50);Sleep(500);
say("人们搭建了一座神庙来祈祷,希望时间之神能够在巨龙的危机中出手相助......",50);Sleep(500);
say("你听到之后,意识到机会就在眼前",50);Sleep(500);
say("你来到了神庙,并且对着时间之神巨大的雕像开始祈祷",50);Sleep(500);
say("“愿时间之神持守相助,助达米尔星脱离巨龙之灾!”",50);Sleep(500);
say("突然,一道绿光出现了......",50);Sleep(500);
say("一道声音传来,穿过重重时空来到了你耳边",50);Sleep(500);
say("“井下......”",15);Sleep(500);
say("你吓了一跳,同时也明白了自己该去的地方",30);Sleep(500);
say("你来到了村庄里的井,义无反顾跳了下去",50);Sleep(500);
say("井下,有一个奇怪的物品,像是一个绿色的宝石",50);Sleep(500);
say("你拿了起来,突然旁边闪过一道光,一把弓箭出现了",50);Sleep(500);
say("突然,又是一道绿光闪过,时间之神的声音再度传来......",50);Sleep(500);
say("“把那块宝石......通过弓箭......射到神殿门口......”",50);Sleep(500);
say("这是一个相当不错的答案,所以,你立刻离开了村子,坐船来到了神殿门口......",50);Sleep(500);
}
}
}
void story_telling(){
for(int i=1;i<=progress;i++){
story(i);
}
}
void main_line(){
switch(progress){
case 1:
story(progress);
break;
}
}
int main(){
opening();
game_reset();
story(progress);progress++;
while(1){
system("cls");
cout<<"你现在位于"<<place<<endl;
puts("你现在要干什么?");
printf("1.探问神殿 2.回顾剧情 3.出发 4.探索 5.查看任务");
int ans;
cin>>ans;
system("cls");
switch(ans){
case 1:
main_line();
break;
case 2:
story_telling();
break;
case 3:
journey();
break;
case 4:
explore();
break;
case 5:
print_task();
break;
default:
while(1)malloc(114514);
}
}
return 0;
}