大一下学期的时候迷上了零的游戏。然后下半学期自己尝试着实现了零的一部分战斗系统,只是黑白界面而已。实现算法挺幼稚的,只是单调枯燥的重复工作,抽着空自己纯手编出来,当时大都把知识点都记牢了,当时刚学完C++的入门基础,还未接触到算法。以后可以来回看幼稚时候的自己。

注意要能通过必须在VC6.0里打开工程->设置->C/C++  或者快捷键Alt+F7->C/C++ 在下面的框最后面添加    /Zm500    才能通过,好像是代码太多行了........

#include"ConsoleColor.h"
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include <windows.h>
#include<iomanip>
#include<string>
#include<fstream>
using namespace std;//全局变量区域
//升级间接值全局变量
int a[7]={10000,20000,30000,40000,50000,60000,70000};
int b[7]={10000,15000,30000,50000,70000,100000,130000};
int c[7]={10000,15000,20000,25000,30000,35000,40000};
int d[3]={15000,25000,35000};
int e[3]={20000,35000,50000};
//MAX SHOT判定变量
bool check_MAX_SHOT=true;//MAX_SHOT检测
int film07=0,film14=100,film61=100,film90=100,film0=100,wanyewan=100,yushenshui=100;  //这些需要存档
double chong_damage=1,filmdamage=1;
long point=3000000;//分数(需要存档)
int *po,delaytime=0,delaytime_max,Ghost_number=1;//*po指向胶卷数量
bool delay=false,FF=false;//设置胶卷装填状态
bool Ghostmove=true;//灵体能否移动
bool ya=false,ke=false,ling=false,ji=false,guan=false,feng=false,mie=false,lian=false;
bool huan=true,huo=true,kuo=true;//追加机能换、获、扩
int Parrow(int m);
void rank_display(int m,int n);class Strengthenlens;
ostream& operator<<(ostream& out, Strengthenlens&s);
istream& operator>>(istream& in, Strengthenlens&s);
ofstream& operator<<(ofstream& out, Strengthenlens&s);
ifstream& operator>>(ifstream& in, Strengthenlens&s);
//强化镜头
class Strengthenlens
{
public:Strengthenlens(){Name="0";Percentage=0;usinglingzi=0;time=0;own=true;level=0;}
//返回值函数区int getusinglingzi(){return usinglingzi;}double getPercentage(){return Percentage;}int gettime(){return time;}void display_condition(){cout<<green<<"○"<<white<<endl;}virtual void increase_percentage(){}virtual void increase_time(){}bool getown(){return own;}string getName(){return Name;}  int getlevel(){return level;}
//赋值函数区域void getit(){own=true;}friend ostream& operator<<(ostream& out, Strengthenlens&s){return out<<"镜头名称:"<<s.Name<<endl<<"镜头效果:"<<s.Percentage<<endl<<"时间:"<<s.time<<endl<<"是否拥有:"<<(s.own==true?"是":"否")<<endl<<"等级:"<<s.level<<endl<<endl;}friend istream& operator>>(istream& in, Strengthenlens&s){return in>>s.Percentage>>s.time>>s.level>>s.own;}friend ofstream& operator<<(ofstream& out, Strengthenlens&s) {out<<s.Name<<":"<<endl;out<<s.Percentage<<"  "<<s.time<<"  "<<s.own<<endl;return out;}  friend ifstream& operator>>(ifstream& in, Strengthenlens&s) {string buff;getline(in,buff,'\n');in>>s.Percentage>>s.time>>s.own;cout<<buff<<endl;getline(in,buff,'\n');cout<<s.Percentage<<s.time<<s.own<<endl;return in;}
protected:double Percentage;int usinglingzi,time,level;bool own;string Name;
};//强化镜头压
class Strengthenlensya:public Strengthenlens
{
public:Strengthenlensya(){Percentage=0;usinglingzi=2;Name="压";}virtual void increase_percentage(){if(level<3){if(Percentage<0.1){Percentage+=0.1;}else if(Percentage>=0.1){Percentage+=0.2;}level++;}}
};//强化镜头刻
class Strengthenlenske:public Strengthenlens
{
public:Strengthenlenske(){Percentage=0.2;usinglingzi=2;Name="刻";}virtual void increase_percentage(){if(level<3){Percentage+=0.2;level++;}}
};//强化镜头零
class Strengthenlensling:public Strengthenlens
{
public:Strengthenlensling(){Percentage=0.4;usinglingzi=3;Name="零";}virtual void increase_percentage(){if(level<3){Percentage+=0.4;level++;}}
};//强化镜头击
class Strengthenlensji:public Strengthenlens
{
public:Strengthenlensji(){Percentage=-0.4;Name="击";}virtual void increase_percentage(){if(level<3){Percentage+=0.2;level++;}}
};//强化镜头贯
class Strengthenlensguan:public Strengthenlens
{
public:Strengthenlensguan(){Percentage=0.1;time=4;usinglingzi=2;Name="贯";}virtual void increase_time(){if(level<3){if(time<10){time+=2;}}}virtual void increase_percentage(){if(level<3){if(Percentage<0.16)Percentage+=0.06;elsePercentage+=0.07;level++;}}
};
//强化镜头封
class Strengthenlensfeng:public Strengthenlens
{
public:Strengthenlensfeng(){Percentage=0.1;time=3;usinglingzi=2;Name="封";}virtual void increase_time(){if(level<3){time+=2;}}virtual void increase_percentage(){if(level<3){Percentage+=0.1;level++;}if(level==3){Percentage=0.5;}}
};
//强化镜头灭
class Strengthenlensmie:public Strengthenlens
{
public:Strengthenlensmie(){Percentage=0.6;;usinglingzi=4;Name="灭";}virtual void increase_percentage(){if(level<3){Percentage+=0.6;level++;}}
};
//强化镜头连
class Strengthenlenslian:public Strengthenlens
{
public:Strengthenlenslian(){Percentage=0.25;;usinglingzi=1;Name="连";}virtual void increase_percentage(){if(Percentage<1){Percentage+=0.25;level++;}}
};Strengthenlenske KE;
Strengthenlensling LING;
Strengthenlensmie MIE;
Strengthenlensya YA;
Strengthenlenslian LIAN;
Strengthenlensfeng FENG;
Strengthenlensguan GUAN;
Strengthenlensji JI;class Person;
istream& operator>>(istream& in, Person& s);
ostream& operator <<(ostream&out,Person&s);
ifstream& operator>>(ifstream&in,Person&s);
ofstream& operator<<(ofstream&our,Person&s);
class Ghost;
//深红
class Person
{
public:Person(){hp=300;hp_max=300;power=15;wakan=0;wakan_max=4;range=3;rate=0.2;addpoint=0;power_level=0;wakan_level=0;range_level=0;power_level_max=7;wakan_level_max=7;range_level_max=7;worth_point=100000;own=false;power_copy=power;lingzi_max=wakan_max;wakan_chong=0;wakan_chong_max=0;chong=false;Name="深红";}
//输出函数区virtual void display_wakan_chong()  //输出深红的重{cout<<"重"<<wakan_chong<<"/"<<wakan_chong_max<<endl;}void display_describe(bool check){cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl<<"┃        解锁条件:天仓莹,天仓澪,黑泽怜入手                     ┃"<<endl;if(!check){cout<<"┃        雏咲深红:                                               ┃"<<endl<<"┃            十九岁,黑泽怜的助手,第一代零ZERO的主角。          ┃"<<endl<<"┃        曾经历冰室邸的恐怖,渐渐从失去哥哥的痛苦中恢复。        ┃"<<endl<<"┃                                                                ┃"<<endl;}cout<<"┃            灵力高,血防少,升级空间最大,初始范围较小           ┃"<<endl<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;}virtual void display_describe(){}void display_hp(){int i;for(i=0;i<(hp*10)/hp_max;i++){if(((hp*10)/hp_max)>3&&((hp*10)/hp_max)<=10)cout<<blue;if(((hp*10)/hp_max)>1&&((hp*10)/hp_max)<=3)cout<<yellow;cout<<"▂";}if(((hp*10)/hp_max)==0)cout<<red<<"▂";cout<<white<<endl;}void display_wakan(){cout<<"wakan:"<<wakan<<"/"<<wakan_max;}void display_Point(){addpoint=0;cout<<"Point:"<<point<<endl;}void display_lingzi()//lingzi的输出{int i;for(i=0;i<lingzi;i++){cout<<blue<<"●"<<white;}for(i=0;i<lingzi_max-lingzi;i++){cout<<blue<<"○"<<white;}cout<<endl;}
//功能函数区域virtual void Strengthen_update(){} //强化镜头升级void Additonalwu(){film14=9999;film61=9999;film90=9999;film0=9999;}virtual void changeStrengthenlens(){}void attacked(Ghost &s);void restore_()  //药物回血{int p=0,m;
Restoremenu:system("cls");cout<<hp<<"/"<<hp_max<<endl;m=p%2;if(m){cout<<"万叶丸←"<<wanyewan<<endl;cout<<"御神水  "<<yushenshui<<endl;}else{cout<<"万叶丸  "<<wanyewan<<endl;cout<<"御神水←"<<yushenshui<<endl;}cout<<"↑ ↓ 上下移动"<<"   "<<"Enter 选择"<<",Esc 返回战斗"<<endl;p=Parrow(p);if(p==-2){if(m){if(wanyewan>0){if(hp<hp_max*0.5){wanyewan--;hp+=hp_max*0.5;}else if(hp<hp_max){wanyewan--;hp=hp_max;}}}else{if(yushenshui>0){if(hp<hp_max){yushenshui--;hp=hp_max;}}}p=m;}if(p==-1){return;}goto Restoremenu;}virtual void useStrengthenlens()    //深红没有强化镜头,只有“重”{wakan_chong_max=wakan;chong=true;if(wakan_chong<wakan_chong_max)wakan_chong++;chong_damage=(1+wakan_chong*rate);}virtual void display_Strengthelens(){}
//返回值函数区域virtual int gettime(){return 0;}long getsum_point(){return sum_point;}int gethp(){return hp;}int getrange(){return range;}virtual string getName(){return Name;}int getpower(){return power*(1+wakan*rate)*filmdamage*chong_damage;}int getwakan(){return wakan;}//return wakanint getpoint(){return point;}//return point;long getworth_point(){return worth_point;}//return worth_pointint getaddpoint(){return addpoint;}//return addpoint;int getpower_level(){return power_level;}//return power_levelint getwakan_level(){return wakan_level;}//return wakan_levelint getrange_level(){return range_level;}//return range_levelint getwakan_max(){return wakan_max;}//return wakan_maxint getpower_level_max(){return power_level_max;}int getwakan_level_max(){return wakan_level_max;}int getrange_level_max(){return range_level_max;}bool getown(){return own;}
//赋值函数区void reset_chong(){wakan_chong_max=0;wakan_chong=0;chong=false;chong_damage=1;}void setlingzi(){static long d=0;static int needpoint;d+=addpoint;if(huo)needpoint=2500;else needpoint=5000;while(d>=needpoint&&lingzi<lingzi_max){d-=needpoint;lingzi++;}}void uselingzi(int i){lingzi-=i;}virtual void setfilm(int l)//胶卷更换{switch(l%5){case 0:power=power_copy;cout<<"零七式 ∞"<<endl;po=&film07;*po=99999;filmdamage=1;delaytime_max=10;break;case 1:if(film14>=0&&film14<=10)cout<<red;power=power_copy;cout<<"一四式 "<<film14<<white<<endl;filmdamage=1.25;po=&film14;delaytime_max=8;break;case 2:if(film61>=0&&film61<=10)cout<<red;power=power_copy;cout<<"六一式 "<<film61<<white<<endl;filmdamage=1.5;po=&film61;delaytime_max=6;break;case 3:if(film90>=0&&film90<=10)cout<<red;power=power_copy;cout<<"九零式 "<<film90<<white<<endl;filmdamage=1.75;po=&film90;delaytime_max=4;break;case 4:if(film0>=0&&film0<=10)cout<<red;power=power_copy;cout<<"零式 "<<film0<<white<<endl;filmdamage=2;po=&film0;delaytime_max=12;break;}}void sumpoint(long a){sum_point=a;}void minussumpoint(long a){sum_point-=a;}virtual void increase_power_level()//深红一级五点灵力最大值共七级{if(power_level<=power_level_max){power_level++;power+=5;}power_copy=power;}virtual void increase_wakan_level()//深红一级一点灵力上限共七级{if(wakan_level<=wakan_level_max){wakan_max+=1;wakan_level++;}lingzi_max=wakan_max;}virtual void increase_range_level()//深红一级一点范围共七级{if(range_level<=range_level_max){range+=1;range_level++;}}void setwakan(){if(wakan<wakan_max&&(!chong)){wakan++;}}void setwakan(int m)//拍摄后积蓄的灵子消失{wakan=0;}void setwakan1(int m){wakan-=m;}void setpoint(long a){point=a;}void getpoint(long a)//用于对分数的统计{addpoint+=a;point+=a;}void setown(){own=true;}void setown(long *a)//购买{if(*a>=worth_point){if(!own){own=true;*a-=worth_point;}else{system("cls");cout<<"┏━━━━━━━━━━━━━━┓"<<endl;cout<<"┃          已入手            ┃"<<endl;cout<<"┗━━━━━━━━━━━━━━┛"<<endl;getch();}}else {if(!own){cout<<"No Enough Point."<<endl;getch();}}}void restore(){hp=hp_max;}//用于战斗后恢复血量void setown(long a){if(a>=worth_point){own=true;a-=worth_point;}else cout<<"No Enough Point."<<endl;}//商店购买入手
//文件S/Lfriend istream& operator>>(istream& in, Person& s){return in>>s.lingzi_max>>s.power>>s.wakan_max>>s.range>>s.power_level>>s.wakan_level>>s.range_level>>s.rate>>s.own;}friend ostream& operator<<(ostream& out, Person& s){return out<<"人物名称:"<<s.Name<<endl<<"灵子最大值:"<<s.lingzi_max<<endl<<"灵力:"<<s.power_copy<<endl<<"灵子数最大值:"<<s.wakan_max<<endl<<"范围:"<<s.range<<endl<<"灵力等级:"<<s.power_level<<endl<<"灵子等级:"<<s.wakan_level<<endl<<"范围等级:"<<s.range_level<<endl<<"比率:"<<s.rate<<endl<<"是否拥有: "<<(s.own==true?"是":"否")<<endl<<endl;}friend ofstream& operator<<(ofstream&out,Person&s){out<<s.Name<<":"<<endl;out<<s.lingzi_max<<" "<<s.power_copy<<" "<<s.wakan_max<<" "<<s.range<<" "<<s.power_level<<" "<<s.wakan_level<<" "<<s.range_level<<" "<<s.rate<<" "<<s.own<<endl;return out;}friend ifstream& operator>>(ifstream& in, Person& s){string buff;getline(in,buff,'\n');in>>s.lingzi_max>>s.power>>s.wakan_max>>s.range>>s.power_level>>s.wakan_level>>s.range_level>>s.rate>>s.own;cout<<buff<<endl;getline(in,buff,'\n');cout<<s.lingzi_max<<s.power<<s.wakan_max<<s.range<<s.power_level<<s.wakan_level<<s.range_level<<s.rate<<s.own<<endl;return in;}
protected:long worth_point,sum_point,addpoint;int lingzi,lingzi_max,hp,hp_max,power,power_copy,wakan,wakan_max,range,power_level,wakan_level,range_level,power_level_max,wakan_level_max,range_level_max,wakan_chong,wakan_chong_max;double rate;bool own,chong;string Name;
};//萤
class Person1:public Person
{
public:Person1(){Name="莹";hp=1000;hp_max=1000;power=3;range=5;rate=0.05;wakan_max=2;power_level_max=5;wakan_level_max=2;range_level_max=2;str[0]=&str1;str[1]=&str1;str[2]=&str1;}virtual string getName(){return "莹";}
//输出函数区virtual void display_wakan_chong()//用于返回装备强化镜头名{cout<<"强化镜头"<<str[0]->getName()<<endl;}virtual void display_describe()//不解释{cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl<<"┃        天仓萤:                                                 ┃"<<endl<<"┃            二十六岁自由作家,是麻生优雨的好友,和他关系密切。  ┃"<<endl<<"┃       在优雨过世后,负起照顾怜的责任。                         ┃"<<endl<<"┃                                                                ┃"<<endl<<"┃            灵力低,血防高。适合持久战以及与高伤灵战斗          ┃"<<endl<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;}
//赋值函数区virtual void increase_power_level()  //萤一级三点灵力最大值共五级{if(power_level<=power_level_max){power_level++;power+=3;}}virtual void increase_wakan_level()   //萤一级一点灵力上限,灵子数增加三共两级{if(wakan_level<=wakan_level_max){wakan_max+=1;wakan_level++;lingzi_max+=3;}}virtual void increase_range_level()  //萤一级一点范围共两级{if(range_level<=range_level_max){range+=1;range_level++;}}
//返回值函数区virtual int gettime(){if(!Ghostmove){return FENG.gettime();}if(guan){return GUAN.gettime();}return 0;}
//功能函数区virtual void Strengthen_update() //强化镜头升级{int i,p;char *o,l='1';Strengthenlens *s[]={&KE,&LING,&MIE,&YA,&LIAN,&FENG,&GUAN,&JI};while(1){system("cls");cout<<point<<endl;for(i=0;i<8;i++){cout<<i+1<<".";if(s[i]->getown()){cout<<s[i]->getName()<<"LV"<<s[i]->getlevel();if((s[i]->getName()=="压"||s[i]->getName()=="刻"||s[i]->getName()=="贯")&&s[i]->getlevel()<3)cout<<" "<<c[s[i]->getlevel()]<<endl;if((s[i]->getName()=="零"||s[i]->getName()=="击"||s[i]->getName()=="封")&&s[i]->getlevel()<3)cout<<" "<<d[s[i]->getlevel()]<<endl;if((s[i]->getName()=="灭"||s[i]->getName()=="连")&&s[i]->getlevel()<3)cout<<" "<<e[s[i]->getlevel()]<<endl;if(s[i]->getlevel()==3)cout<<endl;rank_display(s[i]->getlevel(),3);}elsecout<<"未入手"<<endl;}cout<<"====================================="<<endl<<"Esc退出"<<endl;l=getch();o=&l;p=atoi(o);if(p==0){return;}if(p>=1&&p<=8&&s[p-1]->getown()){if((s[p-1]->getName()=="压"||s[p-1]->getName()=="刻"||s[p-1]->getName()=="贯")&&s[p-1]->getlevel()<3){if(point>=c[s[p-1]->getlevel()]){point-=c[s[p-1]->getlevel()];s[p-1]->increase_time();s[p-1]->increase_percentage();}}if((s[p-1]->getName()=="零"||s[p-1]->getName()=="击"||s[p-1]->getName()=="封")&&s[p-1]->getlevel()<3){if(point>=d[s[p-1]->getlevel()]){point-=d[s[p-1]->getlevel()];s[p-1]->increase_time();s[p-1]->increase_percentage();}}if((s[p-1]->getName()=="灭"||s[p-1]->getName()=="连")&&s[p-1]->getlevel()<3){if(point>=e[s[p-1]->getlevel()]){point-=e[s[p-1]->getlevel()];s[p-1]->increase_time();s[p-1]->increase_percentage();}}}}}virtual void useStrengthenlens() //使用强化镜头{cout<<str[0]->getName();if(str[0]->getName()=="压"&&lingzi>=2){ya=true;chong_damage=1+str[0]->getPercentage();lingzi-=str[0]->getusinglingzi();}if(str[0]->getName()=="击"&&lingzi!=0){ji=true;chong_damage=lingzi*(1+str[0]->getPercentage());lingzi=0;return;} if(str[0]->getName()=="封"&&lingzi>=2){Ghostmove=false;lingzi-=str[0]->getusinglingzi();return;}if(str[0]->getName()=="贯"&&lingzi>=2){guan=true;lingzi-=str[0]->getusinglingzi();chong_damage=1+str[0]->getPercentage();return;}if(str[0]->getName()=="连"&&lingzi>=1){lian=true;chong_damage=1+str[0]->getPercentage();lingzi-=str[0]->getusinglingzi();return;}if((str[0]->getName()=="刻"||str[0]->getName()=="零"||str[0]->getName()=="灭")&&lingzi>=str[0]->getusinglingzi()){ke=true;chong_damage=1+str[0]->getPercentage();lingzi-=str[0]->getusinglingzi();}}virtual void display_Strengthelens()   //输出强化镜头{int i,up=0,down=-1,memory=0,Nhuan;bool beenchose[7]={false};Strengthenlens *lens[]={&KE,&LING,&MIE,&YA,&LIAN,&FENG,&GUAN,&JI};
StrengthelensMenu:system("cls");if(huan)Nhuan=3;else Nhuan=1;for(i=0;i<Nhuan;i++){if(str[i]->getName()=="0"){cout<<"○";}else{cout<<str[i]->getName();}                if(up==i){cout<<"←";}elsecout<<" ";}cout<<endl;for(i=0;i<8;i++){if(beenchose[i]==true)cout<<yellow;if(lens[i]->getown()){if(lens[i]->getName()!="0")cout<<lens[i]->getName();elsecout<<" ";if(beenchose[i]==true)cout<<white;if(down==i){cout<<"←";}else{cout<<" ";}}elsecout<<"○";}cout<<endl;switch(EquipStrengthelens()){case -2:for(i=0;i<8;i++)//ESC{if(beenchose[i]==true){beenchose[i]=false;memory=-1;break;}}if(up!=-1||down!=-1){up=-1;down=-1;break;}else return;case -1:if(up==-1&&down!=-1)//Enter{       beenchose[down]=true;memory=down;up=0;down=-1;break;}if(memory!=-1&&beenchose[memory]==true&&lens[memory]->getown()){beenchose[memory]=false;str[up]=lens[memory];break;}break;case 1:up=0;down=-1;break;//上case 2:down=0;up=-1;break;//下case 3://左if(up!=-1){if(up>0)up--;else up=0;}else{if(down>0)down--;else down=0;}break;case 4://右if(up!=-1){if(up<2)up++;else up=2;}else{if(down<7)down++;else down=7;}break;default:break;}goto StrengthelensMenu;}int EquipStrengthelens()  //装备强化镜头{int key;if(kbhit()){key=getch();if(key==224)   {key=getch();switch(key){case 72:return 1;  //上case 80:return 2;  //下case 75:return 3;  //左case 77:return 4;  //右}}else switch(key){case 13:return -1;  //Entercase 27:return -2;  //Esc}}return 0;}virtual void changeStrengthenlens() //更换强化镜头{Strengthenlens *a;a=str[0];str[0]=str[1];str[1]=str[2];str[2]=a;}
protected:  Strengthenlens *str[3];Strengthenlens str1;
};//怜
class Person2:public Person1
{
public:Person2(){Name="怜";hp=600;hp_max=600;power=10;range=4;rate=0.1;wakan_max=5;power_level_max=5;wakan_level_max=3;range_level_max=3;}virtual string getName(){return Name;}
//输出函数区virtual void display_describe(){cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl<<"┃        黑泽怜:                                                 ┃"<<endl<<"┃            二十三岁自由摄影师。因工作关系来到“幽灵屋敷”。    ┃"<<endl<<"┃       无意间看到车祸身亡未婚夫:麻生优雨的影子,因此进入       ┃"<<endl<<"┃       了恐怖世界,当她调查身上正蔓延的蛇型纹身时,恶梦亦慢慢   ┃"<<endl<<"┃       地入侵她的现实世界。                                     ┃"<<endl<<"┃                                                                ┃"<<endl<<"┃            攻防适中。灵子数最多。                              ┃"<<endl<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;}
//赋值函数区virtual void increase_power_level()  //怜一级四点灵力最大值共五级{if(power_level<=power_level_max){power_level++;power+=4;}}virtual void increase_wakan_level()   //怜一级三点灵力上限共三级{if(wakan_level<=wakan_level_max){wakan_max+=3;wakan_level++;}lingzi_max=wakan_max;}virtual void increase_range_level()  //怜一级一点范围共三级{if(range_level<=range_level_max){range+=1;range_level++;}}
//功能函数区
};//澪
class Person3:public Person1
{
public:Person3(){Name="澪";hp=400;hp_max=400;power=8;rate=0.1;wakan_max=3;range=8;power_level_max=4;wakan_level_max=4;range_level_max=4;}virtual string getName(){return Name;}
//功能函数区virtual void setfilm(int l)  //卷轴更换,澪的胶卷装填速度最快,独立一个函数。{switch(l%5){case 0:power=power_copy;cout<<"零七式 ∞"<<endl;po=&film07;*po=99999;delaytime_max=8;break;case 1:if(film14>=0&&film14<=10)cout<<red;power=power_copy;cout<<"一四式 "<<film14<<white<<endl;power*=1.25;po=&film14;delaytime_max=6;break;case 2:if(film61>=0&&film61<=10)cout<<red;power=power_copy;cout<<"六一式 "<<film61<<white<<endl;power*=1.5;po=&film61;delaytime_max=4;break;case 3:if(film90>=0&&film90<=10)cout<<red;power=power_copy;cout<<"九零式 "<<film90<<white<<endl;power*=1.75;po=&film90;delaytime_max=2;break;case 4:if(film0>=0&&film0<=10)cout<<red;power=power_copy;cout<<"零式 "<<film0<<white<<endl;power*=2;po=&film0;delaytime_max=10;break;}}
//输出函数区virtual void display_describe()  //不解释{cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl<<"┃       天仓澪:                                                  ┃"<<endl<<"┃            十五岁,萤的妹妹,上一作零红蝶的主角。三个月前,    ┃"<<endl<<"┃       水坝失踨事件中唯一逃脱的人。对自己亲手杀死姐姐茧一事     ┃"<<endl<<"┃       感到十分惭愧及懊悔不已。后来一度失去意识,因太过想念     ┃"<<endl<<"┃       失去踪影的姐姐,而被梦囚禁著。                           ┃"<<endl<<"┃                                                                ┃"<<endl<<"┃            血量较少,伤害中下。范围最远。胶卷装填速度最快。    ┃"<<endl<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;}
//赋值函数区virtual void increase_power_level()  //澪一级四点灵力最大值共四级{if(power_level<=power_level_max){power_level++;power+=4;}}virtual void increase_wakan_level()   //澪一级两点灵力上限共四级{if(wakan_level<=wakan_level_max){wakan_max+=2;wakan_level++;}lingzi_max=wakan_max;}virtual void increase_range_level()  //澪一级一点范围共四级{if(range_level<=range_level_max){range+=1;range_level++;}}
//功能函数区
};Person DeRe;
Person1 Ying;
Person2 Lian;
Person3 Mio;
class Ghost
{
public:
//返回值函数区域string getName(){return Name;}
//输出函数区void display_hp(){int i;for(i=0;i<(hp*10)/hp_max;i++){if(((hp*10)/hp_max)>3&&((hp*10)/hp_max)<=10)cout<<blue;if(((hp*10)/hp_max)>1&&((hp*10)/hp_max)<=3)cout<<yellow;cout<<"▂";}if(((hp*10)/hp_max)==0)cout<<red<<"▂";cout<<white<<endl;Ghost_point=0;}//输出hp/hp_maxvoid display_range(){cout<<"range:"<<range<<endl;}//输出range:rangeint gethp(){return hp;}//返回hpint getrange(){return range;}//返回range值
//功能函数区void AdditionalKuo(int m){if(m)if(range<=10)//drange++;else if(range>=7)//frange--;}virtual void FFZSCS(Person &p){}      //用于判断FF、ZS、CS时机,由于各个灵不一样所以基类不表virtual int attacked(Person &s)       //灵被攻击函数{static bool check=true;int a,i,damage=0,point_sum=0;bool hit=false;a=s.getpower();if(ya){ya=false;      for(i=0;i<20;i++){if(rand()%2){cout<<"SPECIAL SHOT"<<endl;(*po)--;damage+=a*0.7;hp-=a;}}return damage;}if(delay){return 0;}if(ke||ji){(*po)--;hp-=a*1.5;damage+=a*1.5;cout<<"SPECIAL SHOT"<<endl;if(!ji)s.getpoint(damage*(20+rand()%10));Sleep(500);ke=false;ji=false;}if(s.getwakan()==s.getwakan_max()&&check_MAX_SHOT&&*po>0&&(!delay))//Max_shot{cout<<"MAX SHOT"<<endl;s.getpoint(s.getwakan()*10);check_MAX_SHOT=false;}if(range<=s.getrange()&&range>4&&*po>0&&(!delay))//Code shot{         FF=false;delay=true;if(lian){(*po)--;hp-=a*1.5;damage+=a*1.5;cout<<"SPECIAL SHOT"<<endl;s.getpoint(damage*(20+rand()%10));Sleep(500);lian=false;}(*po)--;hp-=a*0.5;damage+=a*0.5;cout<<"CODE SHOT"<<endl;s.getpoint(damage*(10+rand()%10));Sleep(500);}if((range>=3&&range<=4)&&*po>0&&(!delay))//Zero shot{FF=false;delay=true;(*po)--;hp-=a*1.5;range+=4;damage+=a*1.5;if(lian){range-=4;damage/=2;lian=false;cout<<"SPECIAL SHOT"<<endl;}cout<<"ZERO SHOT"<<endl;s.getpoint(damage*(20+rand()%10));Sleep(500);}if((range==1||range==2)&&*po>0&&(!delay))//Fatal Frame{FF=true;(*po)--;hp-=a*1.5;if(rand()%2)range+=1;elserange+=3;damage+=a*1.5;cout<<"FATAL FRAME"<<endl;s.getpoint(200);s.getpoint(damage*(20+rand()%10));}if(delay){if(delaytime==0)delaytime=delaytime_max;}if(!guan&&!FF)   //.....逻辑混乱了{s.reset_chong();}return damage;}virtual void move(){if(Ghostmove){int m=rand()%3;   if(range<=4&&range>0)m=1;if(m){range--;}else{range++;}}}int getpower(){return power;}void getGhost_point(){point+=Ghost_point;}
//赋值函数区
void setrange(){range=7;}//设置range为7
void setName(string m)
{Name=m;}
//析构函数
virtual ~Ghost(){}
protected:int hp,hp_max,power,range;long Ghost_point;string Name;
};//容易幽灵类
class Ghost_easy:virtual public Ghost
{
public:Ghost_easy(){hp_max=500+rand()%500;hp=hp_max;power=30;range=rand()%10+3;Ghost_point=3000;}virtual void FFZSCS(Person &p){if(range==1||range==2){cout<<red<<"●"<<white;}else if(range==3||range==4){cout<<red<<"○"<<white;}else if(range<=p.getrange()&&range>=4){cout<<yellow<<"○"<<white;}if(guan||!Ghostmove||ya){cout<<"\b\b"<<green<<"○"<<white;}}
};class Ghost_medium:virtual public Ghost
{
public:Ghost_medium(){hp_max=1000+rand()%1000;hp=hp_max;power=50;range=rand()%10+3;Ghost_point=5000;}virtual void FFZSCS(Person &p){if(range==1||range==2){cout<<red<<"●"<<white;}else if(range==3||range==4){cout<<red<<"○"<<white;}else if(range<=p.getrange()&&range>=4){cout<<yellow<<"○"<<white;}if(guan||!Ghostmove||ya){cout<<"\b\b"<<green<<"○"<<white;}}
};class Ghost_hard:virtual public Ghost
{
public:Ghost_hard(){hp_max=10000+rand()%10000;hp=hp_max;power=50;range=rand()%10+3;Ghost_point=10000;}virtual void FFZSCS(Person &p){if(range==1||range==2){cout<<red<<"●"<<white;}else if(range==3||range==4){cout<<red<<"○"<<white;}else if(range<=p.getrange()&&range>=4){cout<<yellow<<"○"<<white;}if(guan||!Ghostmove||ya){cout<<"\b\b"<<green<<"○"<<white;}}
};class Ghost_BOSS:virtual public Ghost
{
public:Ghost_BOSS(){hp_max=10000+rand()%10000;hp=hp_max;power=50;range=rand()%10+3;Ghost_point=7000;}void inital(int a,int b){hp_max=a;hp=hp_max;power=b;range=rand()%10+3;}virtual void skill(Person&p)=0;virtual void FFZSCS(Person &p){if(range==1||range==2){cout<<red<<"●"<<white;}else if(range==3||range==4){cout<<red<<"○"<<white;}else if(range<=p.getrange()&&range>=4){cout<<yellow<<"○"<<white;}if(guan||!Ghostmove||ya){cout<<"\b\b"<<green<<"○"<<white;}}
};class BOSS_firstkind:public Ghost_BOSS
{
public:virtual void skill(Person &p){int i=rand()%10;if(i>=0&&i<=2){range=rand()%7+1;}}
};class BOSS_secondkind:public Ghost_BOSS
{
public:BOSS_secondkind(){switch_skill=false;hp_max=10000+rand()%10000;hp=hp_max;power=50;range=rand()%10+3;Ghost_point=7000;}virtual void skill(Person &p){int i=rand()%20;bool switch_skill2=false;static int hp_copy;if(i>=0&&i<=3&&!switch_skill){switch_skill=true;switch_skill2=true;hp_copy=hp;}if(switch_skill){if(switch_skill2){range=12;switch_skill2=false;}if(!(range--)||hp!=hp_copy)switch_skill=false;}}virtual void move(){if(Ghostmove&&!switch_skill){int m=rand()%3;   if(range<=4&&range>0)m=1;if(m){range--;}else{range++;}}}
protected:bool switch_skill;
};class BOSS_thirdkind:public Ghost_BOSS
{
public:BOSS_thirdkind(){FFtime=false;switch_skill=false;hp_max=1;hp=hp_max;power=50;range=rand()%10+3;Ghost_point=7000;}virtual void skill(Person &p){int i=rand()%50;bool switch_skill2=false;if(i>=0&&i<=2&&!switch_skill){switch_skill=true;switch_skill2=true;time1=rand()%5+5;}if(switch_skill){if(switch_skill2){range=12;switch_skill2=false;}time1--;if((time1==0||time1==1))FFtime=true;if(time1<0&&!FF){FFtime=false;range--;}if(range==0){range=7;switch_skill=false;}}}virtual void move()    //灵体移动{if(Ghostmove&&!switch_skill){int m=rand()%3; if(range<=4&&range>0)m=1;if(m){range--;}else{range++;}}}virtual int attacked(Person &s)       //灵被攻击函数{static bool check=true;int a,i,damage=0,point_sum=0,sum=0;bool hit=false;a=s.getpower();if(ya){ya=false;      for(i=0;i<20;i++){if(rand()%2){cout<<"SPECIAL SHOT"<<endl;(*po)--;damage+=a*0.7;hp-=a;}}return damage;}if(delay){return 0;}if(ke||ji){(*po)--;hp-=a*1.5;damage+=a*1.5;cout<<"SPECIAL SHOT"<<endl;if(!ji)s.getpoint(damage*(20+rand()%10));Sleep(500);ke=false;ji=false;}if(s.getwakan()==s.getwakan_max()&&check_MAX_SHOT&&*po>0&&(!delay))//Max_shot{cout<<"MAX SHOT"<<endl;s.getpoint(s.getwakan()*10);check_MAX_SHOT=false;}if(range<=s.getrange()&&s.getrange()!=12&&range>4&&*po>0&&(!delay))//Code shot{          FF=false;delay=true;FFtime=false;switch_skill=false;if(lian){(*po)--;hp-=a*1.5;damage+=a*1.5;cout<<"SPECIAL SHOT"<<endl;s.getpoint(damage*(20+rand()%10));Sleep(500);lian=false;}(*po)--;hp-=a*0.5;damage+=a*0.5;cout<<"CODE SHOT"<<endl;s.getpoint(damage*(10+rand()%10));Sleep(500);}if((range>=1&&range<=4)&&*po>0&&(!delay))//Zero shot{FF=false;delay=true;FFtime=false;switch_skill=false;(*po)--;hp-=a*1.5;range+=4;damage+=a*1.5;if(lian){range-=4;damage/=2;lian=false;cout<<"SPECIAL SHOT"<<endl;}cout<<"ZERO SHOT"<<endl;s.getpoint(damage*(20+rand()%10));Sleep(500);}if(FFtime&&*po>0&&(!delay))//Fatal Frame{sum++;if(!(sum%3)){FFtime=false;switch_skill=false;}FF=true;(*po)--;hp-=a*1.5;if(!(rand()%5))range=4;damage+=a*1.5;cout<<"FATAL FRAME"<<endl;s.getpoint(200);s.getpoint(damage*(20+rand()%10));}if(delay){if(delaytime==0)delaytime=delaytime_max;}if(!guan&&!FF)   //.....逻辑混乱了{s.reset_chong();}return damage;} virtual void FFZSCS(Person &p)  //拍摄时机显示{if(FFtime){cout<<red<<"●"<<white;}else if(range>=1&&range<=4){cout<<red<<"○"<<white;}else if(range<=p.getrange()&&range>4){cout<<yellow<<"○"<<white;}if(guan||!Ghostmove||ya){cout<<"\b\b"<<green<<"○"<<white;}}
protected:bool switch_skill,FFtime;int hp_copy,time1;
};void Person::attacked(Ghost &s)
{hp-=s.getpower();s.setrange();cout<<"hp -"<<s.getpower()<<endl;
}int battle(Person &p,Ghost &g);
void battle_disaplay(Person &p,Ghost &g);void setGhost(Person &s,string name,int m)
{int p;if(m==7){Ghost_BOSS *ghost;p=rand()%3;if(p==0){ghost=new BOSS_firstkind;ghost->setName(name);point+=battle(s,*ghost);delete ghost;}if(p==1){ghost=new BOSS_secondkind;ghost->setName(name);point+=battle(s,*ghost);delete ghost;}if(p==2){ghost=new BOSS_thirdkind;ghost->setName(name);point+=battle(s,*ghost);delete ghost;}}else{  Ghost *ghost;if(m==0){ghost=new Ghost_easy;ghost->setName(name);point+=battle(s,*ghost);delete ghost;}if(m==1){ghost=new Ghost_medium;ghost->setName(name);point+=battle(s,*ghost);delete ghost;}if(m==2){ghost=new Ghost_hard;ghost->setName(name);point+=battle(s,*ghost);delete ghost;}}Ghost_number++;
}void battle_Menu(Person &p) //战斗菜单函数
{int i,m=0,l;string a[19]={"生き残った女","黒い影","彷徨う母娘(母)","彷徨う母娘(娘)","四つん這いの女","乳母車の老婆","白装束の男","刺青を刻まれた男","顔を隠した男","巫女姿の少女","針を刺す女","髪を梳かす女","久世家当主","刺青の巫女","縄の巫女","縄の男","生き残った女","木工頭","楔"};
battle_Menu1:system("cls");cout<<point<<endl;Ghost_number=19;for(i=0;i<Ghost_number;i++){if(i>=7*m&&i<=6+7*m)cout<<i%7+1<<a[i]<<endl;}cout<<"================================================================"<<endl;cout<<"左右方向键换页,按对应的数字键选怪物。Esc返回。"<<endl;l=getch();if(l==224){l=getch();switch(l){case 72:return;  //上case 80:return;  //下case 75:if(m>0)m--;goto battle_Menu1;  //左case 77:if(m<2)m++;goto battle_Menu1;  //右}} switch(l){case 27:return;case 49:setGhost(p,a[7*m+0],m);break;case 50:setGhost(p,a[7*m+1],m);break;case 51:setGhost(p,a[7*m+2],m);break;case 52:setGhost(p,a[7*m+3],m);break;case 53:setGhost(p,a[7*m+4],m);break;case 54:if(m!=2)setGhost(p,a[7*m+5],m);break;case 55:if(m!=2)setGhost(p,a[7*m+6],7);break;}goto battle_Menu1;
}
//需要存档的变量(int)film07,film14,film61,film90,film0,wanyewan,yushenshui,Ghost_number;
//              (long)point;
//              (bool)ya,ke,ling,ji,guan,feng,mie,lian,huan,huo,kuo
//              (Strengthenlens)KE,LING,MIE,YA,LIAN,FENG,GUAN,JI;
//              (Person)DeRe,Ying,Lian,Mio;void LOADSAVE()  //存读档函数
{ofstream fout;ifstream fin;int i,p=0,Date=1,choice;static int filetime1=0,filetime2=0,filetime3=0,point1=0,point2=0,point3=0;string a[3]={"存档","读档","退出"};
Mainip:system("cls");for(i=0;i<3;i++){if(p==-2){cout<<a[choice]<<endl;if(p==-2){switch(choice){case 0:cout<<"Date 1:"<<point1<<"\\"<<filetime1<<endl;cout<<"Date 2:"<<point2<<"\\"<<filetime2<<endl;cout<<"Date 3:"<<point3<<"\\"<<filetime3<<endl;   cout<<"输入1,2,3以外的数字退出"<<endl;cin>>Date;while(Date==1||Date==2||Date==3){if(Date==1){fout.open("D:\\123.txt");fout<<KE<<LING<<MIE<<YA<<LIAN<<FENG<<GUAN<<JI<<DeRe<<Ying<<Lian<<Mio        <<film07<<" "<<film14<<" "<<film61<<" "<<film90<<" "<<film0<<" "<<wanyewan<<" "<<yushenshui<<" "<<Ghost_number<<endl<<point<<endl<<ya<<" "<<ke<<" "<<ling<<" "<<ji<<" "<<guan<<" "<<feng<<" "<<mie<<" "<<lian<<" "<<huan<<" "<<huo<<" "<<kuo<<endl;point1=point;fout.close();filetime1++;}if(Date==2){fout.open("D:\\124.txt");fout<<KE<<LING<<MIE<<YA<<LIAN<<FENG<<GUAN<<JI<<DeRe<<Ying<<Lian<<Mio        <<film07<<" "<<film14<<" "<<film61<<" "<<film90<<" "<<film0<<" "<<wanyewan<<" "<<yushenshui<<" "<<Ghost_number<<endl<<point<<endl<<ya<<" "<<ke<<" "<<ling<<" "<<ji<<" "<<guan<<" "<<feng<<" "<<mie<<" "<<lian<<" "<<huan<<" "<<huo<<" "<<kuo<<endl;point2=point;fout.close();filetime2++;}if(Date==3){fout.open("D:\\125.txt");fout<<KE<<LING<<MIE<<YA<<LIAN<<FENG<<GUAN<<JI<<DeRe<<Ying<<Lian<<Mio        <<film07<<" "<<film14<<" "<<film61<<" "<<film90<<" "<<film0<<" "<<wanyewan<<" "<<yushenshui<<" "<<Ghost_number<<endl<<point<<endl<<ya<<" "<<ke<<" "<<ling<<" "<<ji<<" "<<guan<<" "<<feng<<" "<<mie<<" "<<lian<<" "<<huan<<" "<<huo<<" "<<kuo<<endl;point3=point;fout.close();filetime3++;}cout<<"存档成功! txt文件保存在D盘"<<endl;cin>>Date;}p=0;goto Mainip;case 1:            cout<<"Date 1:"<<point1<<"\\"<<filetime1<<endl;cout<<"Date 2:"<<point2<<"\\"<<filetime2<<endl;cout<<"Date 3:"<<point3<<"\\"<<filetime3<<endl; cout<<"输入1,2,3以外的数字退出"<<endl;cin>>Date;while(Date==1||Date==2||Date==3){if(Date==1){fin.open("D:\\123.txt");fin>>KE>>LING>>MIE>>YA>>LIAN>>FENG>>GUAN>>JI>>DeRe>>Ying>>Lian>>Mio        >>film07>>film14>>film61>>film90>>film0>>wanyewan>>yushenshui>>Ghost_number>>point>>ya>>ke>>ling>>ji>>guan>>feng>>mie>>lian>>huan>>huo>>kuo;cout<<film07<<" "<<film14<<" "<<film61<<" "<<film90<<" "<<film0<<" "<<wanyewan<<" "<<yushenshui<<" "<<Ghost_number<<endl<<point<<endl<<ya<<" "<<ke<<" "<<ling<<" "<<ji<<" "<<guan<<" "<<feng<<" "<<mie<<" "<<lian<<" "<<huan<<" "<<huo<<" "<<kuo<<endl;point1=point;fin.close();}if(Date==2){fin.open("D:\\123.txt");fin>>KE>>LING>>MIE>>YA>>LIAN>>FENG>>GUAN>>JI>>DeRe>>Ying>>Lian>>Mio        >>film07>>film14>>film61>>film90>>film0>>wanyewan>>yushenshui>>Ghost_number>>point>>ya>>ke>>ling>>ji>>guan>>feng>>mie>>lian>>huan>>huo>>kuo;cout<<film07<<" "<<film14<<" "<<film61<<" "<<film90<<" "<<film0<<" "<<wanyewan<<" "<<yushenshui<<" "<<Ghost_number<<endl<<point<<endl<<ya<<" "<<ke<<" "<<ling<<" "<<ji<<" "<<guan<<" "<<feng<<" "<<mie<<" "<<lian<<" "<<huan<<" "<<huo<<" "<<kuo<<endl;point1=point;fin.close();}if(Date==3){fin.open("D:\\123.txt");fin>>KE>>LING>>MIE>>YA>>LIAN>>FENG>>GUAN>>JI>>DeRe>>Ying>>Lian>>Mio        >>film07>>film14>>film61>>film90>>film0>>wanyewan>>yushenshui>>Ghost_number>>point>>ya>>ke>>ling>>ji>>guan>>feng>>mie>>lian>>huan>>huo>>kuo;cout<<film07<<" "<<film14<<" "<<film61<<" "<<film90<<" "<<film0<<" "<<wanyewan<<" "<<yushenshui<<" "<<Ghost_number<<endl<<point<<endl<<ya<<" "<<ke<<" "<<ling<<" "<<ji<<" "<<guan<<" "<<feng<<" "<<mie<<" "<<lian<<" "<<huan<<" "<<huo<<" "<<kuo<<endl;point1=point;fin.close();}cout<<"读档成功!"<<endl;cin>>Date;}p=0;goto Mainip;case 2:return;}}break;}cout<<a[i];if(p%3==i){cout<<"←"<<endl;choice=p%3;}else cout<<endl;}p=Parrow(p);goto Mainip;}void status()//状态函数
{system("cls");cout<<KE<<LING<<MIE<<YA<<LIAN<<FENG<<GUAN<<JI<<DeRe<<Ying<<Lian<<Mio    <<"零七式胶卷: "<<"∞"<<endl<<"一四式胶卷: "<<film14<<endl<<"六一式胶卷: "<<film61<<endl<<"九零式胶卷: "<<film90<<endl<<"零式胶卷: "<<film0<<endl<<"万叶丸: "<<wanyewan<<endl<<"御神水: "<<yushenshui<<endl<<"已解锁的幽灵数量: "<<Ghost_number<<endl<<"分数: "<<point<<endl<<"换: "<<((huan==true)?"是":"否")<<endl<<"获: "<<((huo==true)?"是":"否")<<endl<<"扩: "<<((kuo==true)?"是":"否")<<endl<<endl;getch();
}void gamehelp()
{system("cls");cout<<red<<"战斗界面:"<<endl;cout<<blue<<"A键"<<white<<": 拍摄,对灵造成伤害。"<<endl;cout<<blue<<"X键"<<white<<": 使用特殊镜头拍摄。不同镜头有不同的作用。"<<endl;cout<<blue<<"E键"<<white<<": 逃跑。"<<endl;cout<<blue<<"R键"<<white<<": 恢复血量的界面"<<endl;cout<<blue<<"Q键"<<white<<": 有两个以上的镜头时用Q键切换镜头。"<<endl;cout<<blue<<"方向←→键"<<white<<": 切换胶卷"<<endl;cout<<yellow<<"○"<<white<<": CodeShot,伤害中等。"<<endl;cout<<red<<"○"<<white<<": ZeroShot时机,伤害较大。"<<endl;cout<<red<<"●"<<white<<": FatelFame时机,此时可以连拍。连拍的次数视运气而定"<<endl;cout<<green<<"○"<<white<<": 使用贯或封类似的有时间限制的镜头就会出现。"<<endl;cout<<blue<<"○"<<white<<": 灵子数。使用镜头需要消耗一定的灵子数。拍摄可以积蓄灵子。"<<endl;getch();
}void update(Person &s);
Person* Person_choice(Person &a,Person1 &b,Person2 &c,Person3 &d,Person &k);
void rest(Person *p)    //游戏主界面
{int i;p=Person_choice(DeRe,Ying,Lian,Mio,*p);system("cls");Main:system("cls");string a[]={"1.状态","2.战斗","3.升级","4.人物选择","5.存档/读档","6.相机升级","7.游戏说明","8.退出"};for(i=0;i<8;i++){cout<<a[i]<<endl;}switch(getch()){case'1':status();goto Main;case'2':p->display_Strengthelens();battle_Menu(*p);p->restore();goto Main;case'3':update(*p);goto Main;case'4':p=Person_choice(DeRe,Ying,Lian,Mio,*p);goto Main;case'5':LOADSAVE();goto Main;case'6':p->Strengthen_update();goto Main;case'7':gamehelp();goto Main;case'8':exit(0);default:goto Main;}
}int Parrow(int m)    //箭头函数
{int ch;ch = getch();if(ch == 224){ch = getch();switch(ch){case 72:if(m>0)//上m--;else m=3;break;                case 80:m++;break;   //下                   default:break;}}else{switch(ch){case 13:m=-2;break;//ENTERcase 27:m=-1;break;//ESC}}return m;
}//等级界面输出函数
void rank_display(int m,int n)
{int minus;minus=n-m;while(m--){cout<<blue<<"●"<<white;}while(minus--){cout<<blue<<"○"<<white;}cout<<endl;
}//升级界面函数
void update(Person &s)
{int i,j,k;
Main:system("cls");cout<<point<<endl;cout<<"1.灵力"<<endl;i=s.getpower_level();switch(i){case 0:if(i!=s.getpower_level_max())cout<<"LV1 10000"<<endl;rank_display(i,s.getpower_level_max());break;case 1:if(i!=s.getpower_level_max())cout<<"LV2 20000"<<endl;rank_display(i,s.getpower_level_max());break;case 2:if(i!=s.getpower_level_max())cout<<"LV3 30000"<<endl;rank_display(i,s.getpower_level_max());break;case 3:if(i!=s.getpower_level_max())cout<<"LV4 40000"<<endl;rank_display(i,s.getpower_level_max());break;case 4:if(i!=s.getpower_level_max())cout<<"LV5 50000"<<endl;rank_display(i,s.getpower_level_max());break;case 5:if(i!=s.getpower_level_max())cout<<"LV6 60000"<<endl;rank_display(i,s.getpower_level_max());break;case 6:if(i!=s.getpower_level_max())cout<<"LV7 70000"<<endl;rank_display(i,s.getpower_level_max());break;case 7:rank_display(i,s.getpower_level_max());break;}cout<<"2.灵子数"<<endl;j=s.getwakan_level();switch(j){case 0:if(j!=s.getwakan_level_max())cout<<"LV1 10000"<<endl;rank_display(j,s.getwakan_level_max());break;case 1:if(j!=s.getwakan_level_max())cout<<"LV2 15000"<<endl;rank_display(j,s.getwakan_level_max());break;case 2:if(j!=s.getwakan_level_max())cout<<"LV3 30000"<<endl;rank_display(j,s.getwakan_level_max());break;case 3:if(j!=s.getwakan_level_max())cout<<"LV4 50000"<<endl;rank_display(j,s.getwakan_level_max());break;case 4:if(j!=s.getwakan_level_max())cout<<"LV5 70000"<<endl;rank_display(j,s.getwakan_level_max());break;case 5:if(j!=s.getwakan_level_max())cout<<"LV6 100000"<<endl;rank_display(j,s.getwakan_level_max());break;case 6:if(j!=s.getwakan_level_max())cout<<"LV7 130000"<<endl;rank_display(j,s.getwakan_level_max());break;case 7:rank_display(j,s.getwakan_level_max());break;}cout<<"3.范围"<<endl;k=s.getrange_level();switch(k){case 0:if(k!=s.getrange_level_max())cout<<"LV1 10000"<<endl;rank_display(k,s.getrange_level_max());break;case 1:if(k!=s.getrange_level_max())cout<<"LV2 15000"<<endl;rank_display(k,s.getrange_level_max());break;case 2:if(k!=s.getrange_level_max())cout<<"LV3 20000"<<endl;rank_display(k,s.getrange_level_max());break;case 3:if(k!=s.getrange_level_max())cout<<"LV4 25000"<<endl;rank_display(k,s.getrange_level_max());break;case 4:if(k!=s.getrange_level_max())cout<<"LV5 30000"<<endl;rank_display(k,s.getrange_level_max());break;case 5:if(k!=s.getrange_level_max())cout<<"LV6 35000"<<endl;rank_display(k,s.getrange_level_max());break;case 6:if(k!=s.getrange_level_max())cout<<"LV7 40000"<<endl;rank_display(k,s.getrange_level_max());break;case 7:rank_display(k,s.getrange_level_max());break;}cout<<"4.回到休息区"<<endl;
Loop:i=getch();switch(i){case'1':if(point>=a[s.getpower_level()]&&s.getpower_level()!=s.getpower_level_max()){point-=a[s.getpower_level()];s.increase_power_level();}goto Main;case'2':if(point>=a[s.getwakan_level()]&&s.getwakan_level()!=s.getwakan_level_max()){point-=a[s.getwakan_level()];s.increase_wakan_level();}goto Main;case'3':if(point>=a[s.getrange_level()]&&s.getrange_level()!=s.getrange_level_max()){point-=a[s.getrange_level()];s.increase_range_level();}goto Main;case'4':break;default:goto Loop;}
}void display_delaytime()
{int i;if(delaytime==0){cout<<yellow<<"▂▂▂▂▂▂▂▂▂▂"<<white;}   else{for(i=0;i<(((delaytime_max-delaytime)*10)/delaytime_max);i++){cout<<"▂";}    }cout<<endl;
}//战斗输出函数
void battle_disaplay(Person &p,Ghost &g)
{cout<<white<<p.getName();p.display_hp();cout<<endl;cout<<white<<g.getName();g.display_hp();cout<<endl; p.display_wakan();cout<<setw(15);g.display_range();p.display_wakan_chong();p.display_Point();
}//战斗函数
int battle(Person&p,Ghost_BOSS &g)
{int damage=0,point=0,fengtime=0;int key,l=0;while(1){
First:system("cls");g.skill(p);battle_disaplay(p,g);  //战斗内容输出        p.setfilm(l);           //设置胶卷display_delaytime();    //胶卷装填进度条if(delaytime>0&&!(--delaytime))    //胶卷装填{delay=false;}if(p.getName()!="深红")p.display_lingzi();     //灵子数输出g.FFZSCS(p);            //判断拍摄状态if(g.getrange()<=p.getrange())     //灵子增加{p.setwakan();}if(g.getrange()==0)     //距离为0灵体发动攻击{p.attacked(g);if(p.gethp()<=0)    //玩家死亡{break;}}   if(kbhit()&&g.getrange()!=0)    //玩家操作{key=getch();if(key=='a'&&!delay)                 //攻击{Ghostmove=true;cout<<endl;damage=g.attacked(p);if(damage){       p.setlingzi();if(!FF)p.setwakan(0);cout<<damage<<" damage"<<endl;cout<<"Point +"<<p.getaddpoint()<<endl;point+=p.getaddpoint();}check_MAX_SHOT=true;Sleep(1000);}   if(key=='e')      //逃跑{return 0;}else if(key==224)   //切换底片{key=getch();switch(key){case 75:l++;break;case 77:if(l>0)l--;else l=4;break;}goto First;}if(key=='r')     //道具回血{p.restore_();}if(key=='x'&&!delay){p.useStrengthenlens();if(lian||ke||ji){cout<<endl;damage=g.attacked(p);if(damage){      p.setlingzi();if(!FF)p.setwakan(0);cout<<damage<<" damage"<<endl;cout<<"Point +"<<p.getaddpoint()<<endl;point+=p.getaddpoint();}check_MAX_SHOT=true;Sleep(1000);}}if(key=='q'&&p.getName()!="深红"&&huan){p.changeStrengthenlens();}if(kuo){if(key=='d'){g.AdditionalKuo(1);}if(key=='f'){g.AdditionalKuo(0);}}}if(g.gethp()<=0)      //灵体死亡{cout<<"just kill"<<endl;Sleep(1000);return point;;}Sleep(300);if(Ghostmove)g.move();if(!Ghostmove||guan){fengtime++;if(fengtime==p.gettime()){Ghostmove=true;guan=false;fengtime=0;}}}return point;;
}int battle(Person &p,Ghost &g)
{int damage=0,point=0,fengtime=0;int key,l=0;while(1){
First:system("cls");battle_disaplay(p,g); //战斗内容输出        p.setfilm(l);           //设置胶卷display_delaytime();    //胶卷装填进度条if(delaytime>0&&!(--delaytime))    //胶卷装填{delay=false;}if(p.getName()!="深红")p.display_lingzi();     //灵子数输出g.FFZSCS(p);            //判断拍摄状态if(g.getrange()<=p.getrange())     //灵子增加{p.setwakan();}if(g.getrange()==0)     //距离为0灵体发动攻击{p.attacked(g);if(p.gethp()<=0)    //玩家死亡{break;}}   if(kbhit()&&g.getrange()!=0)    //玩家操作{key=getch();if(key=='a'&&!delay)                 //攻击{Ghostmove=true;cout<<endl;damage=g.attacked(p);if(damage){       p.setlingzi();if(!FF)p.setwakan(0);cout<<damage<<" damage"<<endl;cout<<"Point +"<<p.getaddpoint()<<endl;point+=p.getaddpoint();}check_MAX_SHOT=true;Sleep(1000);}   if(key=='e')      //逃跑{return 0;}else if(key==224)   //切换底片{key=getch();switch(key){case 75:l++;break;case 77:if(l>0)l--;else l=4;break;}goto First;}if(key=='r')     //道具回血{p.restore_();}if(key=='x'&&!delay){p.useStrengthenlens();if(lian||ke||ji){cout<<endl;damage=g.attacked(p);if(damage){      p.setlingzi();if(!FF)  //FF时机时候灵子不回0,damage叠加。p.setwakan(0);cout<<damage<<" damage"<<endl;cout<<"Point +"<<p.getaddpoint()<<endl;point+=p.getaddpoint();}check_MAX_SHOT=true;Sleep(1000);}}if(key=='q'&&p.getName()!="深红"&&huan){p.changeStrengthenlens();}if(kuo){if(key=='d'){g.AdditionalKuo(1);}if(key=='f'){g.AdditionalKuo(0);}}}if(g.gethp()<=0)      //灵体死亡{return point;;}Sleep(300);if(Ghostmove)g.move();if(!Ghostmove||guan){fengtime++;if(fengtime==p.gettime()){Ghostmove=true;guan=false;fengtime=0;}}}return point;
}void Person_choice_Menu1_display(Person *s,bool &ying,bool &lian,bool &lio,bool &dere,bool check)
{int p;bool *l=false;//建立bool类型的指针,为四种bool类型的形参改成相同的名字l,精简代码l=&ying;p=1;if(s->getName()=="怜"){l=&lian;p=2;}if(s->getName()=="澪"){l=&lio;p=3;}if(s->getName()=="深红"){l=&dere;p=4;}if(p!=4){if(!s->getown())cout<<p<<"."<<s->getName()<<"     未购买    point 100000"<<endl;else if(*l)cout<<p<<"."<<s->getName()<<"     已选择"<<endl;elsecout<<p<<"."<<s->getName()<<"     未选择"<<endl;}else{if(!check)//入手或未入手的区别{if(!s->getown())cout<<"4.深红    未购买    point 100000"<<endl;//入手后输出改变。else if(dere)cout<<"4.深红    已选择"<<endl;elsecout<<"4.深红    未选择"<<endl;}else cout<<"4.???    未入手"<<endl;}
}void Person_choice_Menu2_display(Person *s,Person &d,bool check)
{int p;p=1;if(s->getName()=="怜")p=2;if(s->getName()=="澪")p=3;if(s->getName()=="深红")p=4;cout<<"萤";if(p==1)cout<<"←"<<endl;else cout<<endl;cout<<"怜";if(p==2)cout<<"←"<<endl;else cout<<endl;cout<<"澪";if(p==3)cout<<"←"<<endl;else cout<<endl;if(!check)cout<<"深红";else cout<<"???";if(p==4)cout<<"←"<<endl;else cout<<endl;
}void Person_choice_Menu3_display(int q)
{if(q%2==0){      cout<<"       花100000 point购买←"<<endl;cout<<"       说明"<<endl;}else{     cout<<"       花100000 point购买"<<endl;cout<<"       说明←"<<endl;}
}
int Person_choice_buy(Person *s,long *m,int q,bool check);
int Person_choice_menu3_display(Person *s,Person &d,long *m,bool check)
{int p;int q=0;
Menu2:system("cls");p=1;if(s->getName()=="怜")p=2;if(s->getName()=="澪")p=3;if(s->getName()=="深红")p=4;cout<<"萤";if(p==1){cout<<"←"<<endl;Person_choice_Menu3_display(q);}else cout<<endl;cout<<"怜";if(p==2){cout<<"←"<<endl;Person_choice_Menu3_display(q);}else cout<<endl;cout<<"澪";if(p==3){cout<<"←"<<endl;Person_choice_Menu3_display(q);}else cout<<endl;if(!check)cout<<"深红";else cout<<"???";if(p==4){cout<<"←"<<endl;Person_choice_Menu3_display(q);}else cout<<endl; cout<<"===================================="<<endl;cout<<"↑ ↓ 上下移动"<<"   "<<"Enter 选择"<<",Esc 返回上一菜单"<<endl;q=Person_choice_buy(s,m,q,check);if(q==-1)//若输入为Esc键则结束函数。{return 0;}goto Menu2;
}int Person_choice_buy(Person *s,long *m,int q,bool check)
{int o;o=q;q=Parrow(q);if(q==-1)     {return q;}if(o%2!=0&&q==-2){q=o;while(1){system("cls");if(s->getName()=="深红"){s->display_describe(check);}elses->display_describe();if(getch()==27){return q;}}}else if(o%2==0&&q==-2){q=0;if(s->getName()=="深红"){   if(!check)s->setown(m);}//若为回车键则购买else{  s->setown(m);}}return q;
}
//人物选择界面
Person* Person_choice(Person &a,Person1 &b,Person2 &c,Person3 &d,Person &k)
{static bool ying=false,lian=false,lio=false,dere=false,choice=true,check=true;Person *p,*s;p=&k;int q=0,l=0,z=0;
//作为第一次游戏时候选择初始人物if(choice){
rechoose:cout<<"1.莹"<<endl;cout<<"2.怜"<<endl;cout<<"3.澪"<<endl;switch(getch()){case'1':s=&b;s->setown(100000);ying=true;lian=false;lio=false;dere=false;p=&b;break;case'2':s=&c;s->setown(100000);ying=false;lian=true;lio=false;dere=false;p=&c;break;case'3':s=&d;s->setown(100000);ying=false;lian=false;lio=true;dere=false;p=&d;break;default:goto rechoose;}choice=false;}Main:system("cls");cout<<point<<endl;//输出所得分数//判断深红取得条件是否已经达成if(check&& b.getown() && c.getown() && d.getown()){check=false;}//进行人物选择界面菜单一的输出s=&b;Person_choice_Menu1_display(s,ying,lian,lio,dere,check);s=&c;Person_choice_Menu1_display(s,ying,lian,lio,dere,check);s=&d;Person_choice_Menu1_display(s,ying,lian,lio,dere,check);s=&a;Person_choice_Menu1_display(s,ying,lian,lio,dere,check);cout<<"================================="<<endl<<"s=人才市场,e=退出,1,2,3,4选择人物"<<endl;//用数字来进行人物选择switch(getch()){case '1':s=&b;if(s->getown()){ying=true;lian=false;lio=false;dere=false;p=&b;}goto Main;case '2':s=&c;if(s->getown()){ying=false;lian=true;lio=false;dere=false;p=&c;}goto Main;case '3':s=&d;if(s->getown()){ying=false;lian=false;lio=true;dere=false;p=&d;}goto Main;case '4':s=&a;if(s->getown()&&!check){ying=false;lian=false;lio=false;dere=true;p=&a;}goto Main;case 'e':return p;default:goto Main;case 's':   //进入人才市场购买人物
Choice:  //第二菜单的输出system("cls");switch(l%4)//用数字来判断箭头指向{case 0:s=&b;Person_choice_Menu2_display(s,a,check);break;case 1:s=&c;Person_choice_Menu2_display(s,a,check);break;case 2:s=&d;Person_choice_Menu2_display(s,a,check);break;case 3:s=&a;Person_choice_Menu2_display(s,a,check);break;}cout<<"===================================="<<endl;cout<<"↑ ↓ 上下移动"<<"   "<<"Enter 选择"<<",Esc 返回上一菜单"<<endl;z=l; //z(int)用于与l的对比来判断箭头改变情况l=Parrow(l);   //调用箭头函数if(l==-1)     //输入为Esc时箭头函数返回值为-1。{l=z;goto Main;}else if(l>=0&&l<=3)//执行了“↑”键或“↓”键,l值加一或减一。{goto Choice;}else if(l==-2){l=z;system("cls");switch(l%4)//用数字来判断箭头指向{case 0:s=&b;Person_choice_menu3_display(s,a,&point,check);break;case 1:s=&c;Person_choice_menu3_display(s,a,&point,check);break;case 2:s=&d;Person_choice_menu3_display(s,a,&point,check);break;case 3:s=&a;Person_choice_menu3_display(s,a,&point,check);break;}goto Choice;} else goto Choice;}
}int main()
{Person *p;rest(p);return 0;
}

以下是ConsoleColor.h.h头文件,用于实现颜色界面。这个头文件是从网上下的,从这个头文件里认识到句柄的存在。

#pragma once
#include <iostream>#include <windows.h>inline std::ostream& blue(std::ostream &s)
{HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hStdout, FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY);return s;
}inline std::ostream& red(std::ostream &s)
{HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hStdout, FOREGROUND_RED|FOREGROUND_INTENSITY);return s;
}inline std::ostream& green(std::ostream &s)
{HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN|FOREGROUND_INTENSITY);return s;
}inline std::ostream& yellow(std::ostream &s)
{HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY);return s;
}inline std::ostream& white(std::ostream &s)
{HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hStdout, FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);return s;
}
/*
struct color {color(WORD attribute):m_color(attribute){};WORD m_color;
};template <class _Elem, class _Traits>
std::basic_ostream<_Elem,_Traits>& operator<<(std::basic_ostream<_Elem,_Traits>& i, color& c)
{HANDLE hStdout=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hStdout,c.m_color);return i;
}
*/
// Copyleft Vincent Godin

【无浪】自己用C++实现的零游戏的战斗(半成品)相关推荐

  1. 【无浪】花了两周时间纯手打打出来的Java记事本

    最近的大作业是记事本,两周的大块时间和碎片时间都花在这上面了,数据结构已经落下了,要恶补了. 注意这个记事本在没有联网的时候会在关于记事本类中的一个JLabel标签里停下,该标签使用了HTML连向一张 ...

  2. Mixlab无界社区新年礼!密室逃脱游戏社交内测资格放送!

    Mixlab无界社区新年礼! 密室逃脱游戏社交内测资格放送! 无界社区与Vland共同推出的元宇宙社交活动. AI 让我想象下密室是什么样的? ♾️密室主题的科技活动? shadow 为了赋予您更好的 ...

  3. 中国首个无助力外骨骼式机甲将亮相零一科技节

    ▼ 点击上方蓝字 关注网易智能 为你解读AI领域大公司大事件,新观点新应用 图:无助力外骨骼式载人机甲NK01 从<高达>到<变形金刚>,这类机甲机器人似乎只存在于二次元中,成 ...

  4. 300辆无人车200万公里路测零事故,首次揭秘背后整套安全保障方案

    百度Apollo的自动驾驶出租车队,已经在长沙梅溪湖畔开启试运营.所有长沙市民都可申请成为种子用户亲身试乘.但RoboTaxi落地,意义不止是百度自动驾驶迈步新阶段,而且也有多项行业性风向标亮点可从中 ...

  5. 工具篇:TailScale免费实现远程设备互连(无费用方案,亲测,零基础安装),支持手机、Windows或linux系统、NAS

    重点:免费  (在内网环境,无特殊要求,能上网就行)  -----收费的方案大把,不废口水了 支持连接设备: 苹果设备(IOS.PAD.iMAC).安卓手机.Windows或linux系统.NAS(只 ...

  6. 对话新经济人物|知道创宇杨冀龙:无边界网络时代已来,“零信任”正重构安防体系...

    [华西都市报消息]随着疫情加速企业拥抱互联网,业务不断上云,发生在云平台上的网络安全事件或威胁数量也居高不下.当企业打通内部.外部网络孤岛成为一种趋势,网络安防的诉求将随之发生怎样的改变? " ...

  7. 无风扇cpu测试软件,噪音为零!TT首款无风扇设计CPU散热器

    构架和处理: 构架似乎是十分聪明的,因为无论在桌面使用还是在塔形机箱中总是至少有三条管能够以最大性能工作.安放好的散热设备还总是允许自然的空气对流.插座是双层的,具有巨大散热片的三条热管被安放靠近CP ...

  8. 【洞见研报】无糖食品行业研究报告——最炫“零糖”风,解码无糖食品纵横之路

    炎炎夏日,冰爽甜蜜的冰淇淋.奶茶.汽水变成大街小巷人手常备的"苦夏装备":为满足消费者的健康消费理念,众多冰淇淋.汽水.奶茶品牌都推出了"无糖"系列,让夏日甜蜜 ...

  9. 无套路,鬼灭之刃同人游戏

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 自我介绍 上代码 一.自我介绍 这是第一篇文章,若有错误,还望海涵 二.上代码 #include<stdio.h> ...

最新文章

  1. Rails工作效率和Java运行平台
  2. 传递给后台的Json数据解析
  3. win10系统下多python版本部署
  4. python 网络爬虫介绍
  5. 用友t3服务器文件丢失,用友T3软件在T3用友通标准版恢复账套时在备份的文件中找不到要恢复的文件,如何解决?-用友T3...
  6. 使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开
  7. linux升级tls,为CentOS升级OpenSSL 让Nginx支持TLS 1.2
  8. php7.0 百度百科,PHP 7.0.10正式发布
  9. stun服务器搭建(coTurn)
  10. Eclipse配置Tomcat并运行
  11. 关于QTableWidget删除遇到的坑(removeRow)
  12. 基于C#和SQL SERVER的汉字词典的设计与实现
  13. Java架构师成长路线总结2021版(持续更新)
  14. 数据清洗 excel mysql_Excel获取MYSQL数据库数据
  15. 使用iconfont阿里多色矢量图标
  16. python微信加人_python实现微信自动加好友
  17. Linux du命令和df命令
  18. 细胞生物学-7-叶绿体和线粒体
  19. 阿里巴巴面试算法题目:25匹赛马,5个跑道,也就是说每次有5匹马可以同时比赛。问最少比赛多少次可以知道跑得最快的5匹马
  20. PHP实现简单的网站访客统计

热门文章

  1. 哪个软件能实盘测试策略,Quicklib提供期货CTA策略实盘模拟监控的好工具(原创)...
  2. 线性表的应用——多项式的计算
  3. 超级计算机排行榜历年,历代游戏主机浮点运算能力排行榜 究竟谁才是真正的性能怪兽...
  4. 力扣热门题目简单部分合集(共23道)
  5. java中字符串和数字变量之间的转换方法
  6. python调整图片大小reshape_将不同大小的图像调整为28x28图像并将其转换为一个csvfi...
  7. vue element Pagination分页组件二次封装
  8. JLINK的SWD接口调试器制作
  9. PDF文件打印不清楚怎么办?
  10. 郭天祥的10天学会51单片机_第七节