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


大一下学期的时候迷上了零的游戏。然后下半学期自己尝试着实现了零的一部分战斗系统,只是黑白界面而已。实现算法挺幼稚的,只是单调枯燥的重复工作,抽着空自己纯手编出来,当时大都把知识点都记牢了,当时刚学完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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值