大一下学期的时候迷上了零的游戏。然后下半学期自己尝试着实现了零的一部分战斗系统,只是黑白界面而已。实现算法挺幼稚的,只是单调枯燥的重复工作,抽着空自己纯手编出来,当时大都把知识点都记牢了,当时刚学完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;
else
Percentage+=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 wakan
int getpoint(){return point;}//return point;
long getworth_point(){return worth_point;}//return worth_point
int getaddpoint(){return addpoint;}//return addpoint;
int getpower_level(){return power_level;}//return power_level
int getwakan_level(){return wakan_level;}//return wakan_level
int getrange_level(){return range_level;}//return range_level
int getwakan_max(){return wakan_max;}//return wakan_max
int 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/L
friend 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);
}
else
cout<<"未入手"<<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<<"←";
}
else
cout<<" ";
}
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();
else
cout<<" ";
if(beenchose[i]==true)cout<<white;
if(down==i)
{
cout<<"←";
}
else
{
cout<<" ";
}
}
else
cout<<"○";
}
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; //Enter
case 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_max
void display_range(){cout<<"range:"<<range<<endl;}//输出range:range
int gethp(){return hp;}//返回hp
int getrange(){return range;}//返回range值
//功能函数区
void AdditionalKuo(int m)
{
if(m)
if(range<=10)//d
range++;
else
if(range>=7)//f
range--;
}
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;
else
range+=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;//ENTER
case 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;
else
cout<<p<<"."<<s->getName()<<" 未选择"<<endl;
}
else
{
if(!check)//入手或未入手的区别
{
if(!s->getown())
cout<<"4.深红 未购买 point 100000"<<endl;//入手后输出改变。
else if(dere)
cout<<"4.深红 已选择"<<endl;
else
cout<<"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);
}
else
s->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