#include <iostream>
#include <string>
#include <cstdlib>
#include <time.h>
using namespace std;
 
 
 
//武器类
class Weapon{
protected:  int Price; //武器价格  int ATK; //武器攻击力  string Name; //武器名称  string Rank; //武器等级
public:  Weapon(int price=0,int atk=0,string name="",string rank=""){Price=price;ATK=atk;Name=name;Rank=rank;}  int GetPrice(){return Price;}  int GetATK(){return ATK;}  string GetName(){return Name;}  string GetRank(){return Rank;}  virtual ~Weapon(){}
};
 
//战士武器类
class WarriorWeapon:public Weapon{
public:  WarriorWeapon(int price=0,int atk=0,string name="",string rank=""):Weapon(price,atk,name,rank){}  ~WarriorWeapon(){}
};
 
class WarriorWeapon1:public WarriorWeapon{
public:  WarriorWeapon1(int price=500,int atk=70,string name="巨剑",string rank="白银"):WarriorWeapon(price,atk,name,rank){}  ~WarriorWeapon1(){}
};
 
class WarriorWeapon2:public WarriorWeapon{
public:  WarriorWeapon2(int price=1000,int atk=130,string name="巨剑",string rank="黄金"):WarriorWeapon(price,atk,name,rank){}  ~WarriorWeapon2(){}
};
 
class WarriorWeapon3:public WarriorWeapon{
public:  WarriorWeapon3(int price=1800,int atk=220,string name="巨剑",string rank="白金"):WarriorWeapon(price,atk,name,rank){}  ~WarriorWeapon3(){}
};
 
class WarriorWeapon4:public WarriorWeapon{
public:  WarriorWeapon4(int price=3000,int atk=350,string name="巨剑",string rank="钻石"):WarriorWeapon(price,atk,name,rank){}  ~WarriorWeapon4(){}
};
 
//法师武器类
class WizardWeapon:public Weapon{
public:  WizardWeapon(int price=0,int atk=0,string name="",string rank=""):Weapon(price,atk,name,rank){}  ~WizardWeapon(){}
};
 
class WizardWeapon1:public WizardWeapon{
public:  WizardWeapon1(int price=400,int atk=50,string name="法杖",string rank="白银"):WizardWeapon(price,atk,name,rank){}  ~WizardWeapon1(){}
};
 
class WizardWeapon2:public WizardWeapon{
public:  WizardWeapon2(int price=800,int atk=100,string name="法杖",string rank="黄金"):WizardWeapon(price,atk,name,rank){}  ~WizardWeapon2(){}
};
 
class WizardWeapon3:public WizardWeapon{
public:  WizardWeapon3(int price=1500,int atk=180,string name="法杖",string rank="白金"):WizardWeapon(price,atk,name,rank){}  ~WizardWeapon3(){}
};
 
class WizardWeapon4:public WizardWeapon{
public:  WizardWeapon4(int price=2500,int atk=300,string name="法杖",string rank="钻石"):WizardWeapon(price,atk,name,rank){}  ~WizardWeapon4(){}
};
 
//妖怪武器类
class MonsterWeapon:public Weapon{
public:  MonsterWeapon(int price=0,int atk=0,string name="",string rank=""):Weapon(price,atk,name,rank){}  ~MonsterWeapon(){}
};
 
class MonsterWeapon1:public MonsterWeapon{
public:  MonsterWeapon1(int price=450,int atk=60,string name="灵刃",string rank="白银"):MonsterWeapon(price,atk,name,rank){}  ~MonsterWeapon1(){}
};
 
class MonsterWeapon2:public MonsterWeapon{
public:  MonsterWeapon2(int price=900,int atk=120,string name="灵刃",string rank="黄金"):MonsterWeapon(price,atk,name,rank){}  ~MonsterWeapon2(){}
};
 
class MonsterWeapon3:public MonsterWeapon{
public:  MonsterWeapon3(int price=1650,int atk=200,string name="灵刃",string rank="白金"):MonsterWeapon(price,atk,name,rank){}  ~MonsterWeapon3(){}
};
 
class MonsterWeapon4:public MonsterWeapon{
public:  MonsterWeapon4(int price=2750,int atk=320,string name="灵刃",string rank="钻石"):MonsterWeapon(price,atk,name,rank){}  ~MonsterWeapon4(){}
};
 
 
//盔甲类
class Armor{
protected:  int Price; //盔甲价格  int DEF; //盔甲防御力  string Name; //盔甲名称  string Rank; //盔甲等级
public:  Armor(int price=0,int def=0,string name="",string rank=""){Price=price;DEF=def;Name=name;Rank=rank;}  int GetPrice(){return Price;}  int GetDEF(){return DEF;}  string GetName(){return Name;}  string GetRank(){return Rank;}  //虚析构函数  ~Armor(){}
};
 
 
//战士盔甲类
class WarriorArmor:public Armor{
public:  WarriorArmor(int price=0,int def=0,string name="",string rank=""):Armor(price,def,name,rank){}  ~WarriorArmor(){}
};
 
class WarriorArmor1:public WarriorArmor{
public:  WarriorArmor1(int price=300,int def=30,string name="铠甲",string rank="白银"):WarriorArmor(price,def,name,rank){}  ~WarriorArmor1(){}
};
 
class WarriorArmor2:public WarriorArmor{
public:  WarriorArmor2(int price=600,int def=60,string name="铠甲",string rank="黄金"):WarriorArmor(price,def,name,rank){}  ~WarriorArmor2(){}
};
 
class WarriorArmor3:public WarriorArmor{
public:  WarriorArmor3(int price=1200,int def=100,string name="铠甲",string rank="白金"):WarriorArmor(price,def,name,rank){}  ~WarriorArmor3(){}
};
 
class WarriorArmor4:public WarriorArmor{
public:  WarriorArmor4(int price=2000,int def=200,string name="铠甲",string rank="钻石"):WarriorArmor(price,def,name,rank){}  ~WarriorArmor4(){}
};
 
 
//法师盔甲类
class WizardArmor:public Armor{
public:  WizardArmor(int price=0,int def=0,string name="",string rank=""):Armor(price,def,name,rank){}  ~WizardArmor(){}
};
 
class WizardArmor1:public WarriorArmor{
public:  WizardArmor1(int price=400,int def=40,string name="面纱",string rank="白银"):WarriorArmor(price,def,name,rank){}  ~WizardArmor1(){}
};
 
class WizardArmor2:public WarriorArmor{
public:  WizardArmor2(int price=800,int def=80,string name="面纱",string rank="黄金"):WarriorArmor(price,def,name,rank){}  ~WizardArmor2(){}
};
 
class WizardArmor3:public WarriorArmor{
public:  WizardArmor3(int price=1500,int def=160,string name="面纱",string rank="白金"):WarriorArmor(price,def,name,rank){}  ~WizardArmor3(){}
};
 
class WizardArmor4:public WarriorArmor{
public:  WizardArmor4(int price=2500,int def=250,string name="面纱",string rank="钻石"):WarriorArmor(price,def,name,rank){}  ~WizardArmor4(){}
};
 
 
//妖怪盔甲类
class MonsterArmor:public Armor{
public:  MonsterArmor(int price=0,int def=0,string name="",string rank=""):Armor(price,def,name,rank){}  ~MonsterArmor(){}
};
 
class MonsterArmor1:public MonsterArmor{
public:  MonsterArmor1(int price=350,int def=35,string name="鳞甲",string rank="白银"):MonsterArmor(price,def,name,rank){}  ~MonsterArmor1(){}
};
 
class MonsterArmor2:public MonsterArmor{
public:  MonsterArmor2(int price=700,int def=70,string name="鳞甲",string rank="黄金"):MonsterArmor(price,def,name,rank){}  ~MonsterArmor2(){}
};
 
class MonsterArmor3:public MonsterArmor{
public:  MonsterArmor3(int price=1350,int def=130,string name="鳞甲",string rank="白金"):MonsterArmor(price,def,name,rank){}  ~MonsterArmor3(){}
};
 
class MonsterArmor4:public MonsterArmor{
public:  MonsterArmor4(int price=2300,int def=220,string name="鳞甲",string rank="钻石"):MonsterArmor(price,def,name,rank){}  ~MonsterArmor4(){}
};
 
 
//角色类
class Character{
protected:  string Name; //职业名称  int Health; //生命值  int ATK; //攻击力  int DEF; //防御力  int Money;  //武器,盔甲,药(暂用治疗术代替药水)  Weapon *weapon;  Armor *armor;  //Medicine medicine;  public:  Character(int health=2000,int atk=0,int def=0,int money=500,string name="")  {Health=health;ATK=atk;DEF=def;Money=money;Name=name;weapon=new Weapon();armor=new Armor();}    //得到角色的信息  string GetName(){return Name;}  int GetHealth(){return Health;}  int GetATK(){return ATK;}  int GetDEF(){return DEF;}  int GetMoney(){return Money;}  Weapon* GetWeapon(){return weapon;}  Armor* GetArmor(){return armor;}
 
   //获得金钱,武器,装备  void GetMoney(int money){Money+=money;cout<<"获得了"<<money<<"金币"<<endl;}  void GetWeapon(Weapon *w)  {   Money-=w->GetPrice()-weapon->GetPrice(); //金币减少  ATK+=w->GetATK()-weapon->GetATK(); //攻击力上升  weapon=w;   }  void GetArmor(Armor *a)  {  Money-=a->GetPrice()-armor->GetPrice(); //金币减少  DEF+=a->GetDEF()-armor->GetDEF(); //防御力上升  armor=a;   }
   /*void GetMedicine(Medicine m)  {  Medicine=m;  Money-=m.Price;  }*/
   //受到攻击  void TakeAttack(int atk)  {  if(atk>DEF)  Health=Health-atk+DEF;  if(Health<0)  Health=0;  }
   //使用治疗术  void Treatment()  {  if((Health+200)<=2000)  Health+=200;  else  Health=2000;  }
   /*void TakeMedicine()  {  if((Health+medicine.value)<=2000)  Health+=medicine.value;  else  Health=2000;  }*/
   //展示角色信息  void Show()  {  cout<<"职业:"<<Name<<endl;  cout<<"生命值:"<<Health<<endl;  cout<<"武器:"<<weapon->GetRank()<<weapon->GetName()<<"t攻击力:"<<ATK<<endl;  cout<<"盔甲:"<<armor->GetRank()<<armor->GetName()<<"t防御力:"<<DEF<<endl;  cout<<"金币:"<<Money<<endl;  }  //虚析构函数  virtual ~Character()  {  if(!weapon)delete weapon;  if(!armor) delete armor;  }
};
 
//战士类
class Warrior:public Character{
public:  Warrior(int health=2000,int atk=70,int def=20,int money=500,string name="战士"):Character(health,  atk,def,money,name){}   ~Warrior()  {   if(!weapon)delete weapon;  if(!armor) delete armor;  }
};
 
//法师类
class Wizard:public Character{
public:  Wizard(int health=2000,int atk=50,int def=40,int money=500,string name="法师"):Character(health,  atk,def,money,name){}  ~Wizard()  {  if(!weapon)delete weapon;  if(!armor) delete armor;  }
};
 
//妖怪类
class Monster:public Character{
public:  Monster(int health=2000,int atk=60,int def=30,int money=500,string name="妖怪"):Character(health,  atk,def,money,name){}  ~Monster()  {  if(!weapon)delete weapon;  if(!armor) delete armor;  }
};
 
 
class CharacterFactory{
public:  Character *CreatCharacter(int flag)  {  switch(flag)  {  case 1:  return new Warrior();  break;  case 2:  return new Wizard();  break;  case 3:  return new Monster();  break;  }  }
};
 
 
//武器商店类
class WeaponStore{
public:  virtual void Show()=0; //武器信息展示  virtual Weapon *CreatWeapon(int flag)=0; //创建武器  //虚析构函数,防止析构一般,泄漏一半  virtual ~WeaponStore(){}
};
 
 
//战士武器商店类
class WarriorWeaponStore:public WeaponStore{
public:  void Show()  {  cout<<"1.白银巨剑 500金币 +70攻击力"<<endl;  cout<<"2.黄金巨剑 1000金币 +130攻击力"<<endl;  cout<<"3.白金巨剑 1800金币 +220攻击力"<<endl;  cout<<"4.钻石巨剑 3000金币 +350攻击力"<<endl;  }  Weapon *CreatWeapon(int flag)  {  switch(flag)  {  case 1:  return new WarriorWeapon1();break;  case 2:  return new WarriorWeapon2();break;  case 3:  return new WarriorWeapon3();break;  case 4:  return new WarriorWeapon4();break;  }  }  ~WarriorWeaponStore(){}
};
 
//法师武器商店类
class WizardWeaponStore:public WeaponStore{
public:  void Show()  {  cout<<"1.白银法杖 400金币 +50攻击力"<<endl;  cout<<"2.黄金法杖 800金币 +100攻击力"<<endl;  cout<<"3.白金法杖 1500金币 +180攻击力"<<endl;  cout<<"4.钻石法杖 2500金币 +300攻击力"<<endl;  }  Weapon *CreatWeapon(int flag)  {  switch(flag)  {  case 1:  return new WizardWeapon1();break;  case 2:  return new WizardWeapon2();break;  case 3:  return new WizardWeapon3();break;  case 4:  return new WizardWeapon4();break;  }  }  ~WizardWeaponStore(){}
};
 
//妖怪武器商店类
class MonsterWeaponStore:public WeaponStore{
public:  void Show()  {  cout<<"1.白银灵刃 450金币 +60攻击力"<<endl;  cout<<"2.黄金灵刃 900金币 +120攻击力"<<endl;  cout<<"3.白金灵刃 1650金币 +200攻击力"<<endl;  cout<<"4.钻石灵刃 2750金币 +320攻击力"<<endl;  }  Weapon *CreatWeapon(int flag)  {  switch(flag)  {  case 1:  return new MonsterWeapon1();break;  case 2:  return new MonsterWeapon2();break;  case 3:  return new MonsterWeapon3();break;  case 4:  return new MonsterWeapon4();break;  }  }  ~MonsterWeaponStore(){}
};
 
 
//盔甲商店类
class ArmorStore{
public:  virtual void Show()=0; //盔甲信息展示  virtual Armor* CreatArmor(int flag)=0; //创建盔甲  virtual ~ArmorStore(){}
};
 
 
//战士盔甲商店类
class WarriorArmorStore:public ArmorStore{
public:  void Show()  {  cout<<"1.白银铠甲 300金币 +30防御力"<<endl;  cout<<"2.黄金铠甲 600金币 +60防御力"<<endl;  cout<<"3.白金铠甲 1200金币 +100防御力"<<endl;  cout<<"4.钻石铠甲 2000金币 +200防御力"<<endl;  }  Armor *CreatArmor(int flag)  {  switch(flag)  {  case 1:  return new WarriorArmor1();break;  case 2:  return new WarriorArmor2();break;  case 3:  return new WarriorArmor3();break;  case 4:  return new WarriorArmor4();break;  }  }  ~WarriorArmorStore(){}
};
 
//法师盔甲商店类
class WizardArmorStore:public ArmorStore{
public:  void Show()  {  cout<<"1.白银面纱 400金币 +40防御力"<<endl;  cout<<"2.黄金面纱 800金币 +80防御力"<<endl;  cout<<"3.白金面纱 1500金币 +160防御力"<<endl;  cout<<"4.钻石面纱 2500金币 +250防御力"<<endl;  }  Armor *CreatArmor(int flag)  {  switch(flag)  {  case 1:  return new WizardArmor1();break;  case 2:  return new WizardArmor2();break;  case 3:  return new WizardArmor3();break;  case 4:  return new WizardArmor4();break;  }  }  ~WizardArmorStore(){}
};
 
//妖怪盔甲商店类
class MonsterArmorStore:public ArmorStore{
public:  void Show()  {  cout<<"1.白银鳞甲 350金币 +35防御力"<<endl;  cout<<"2.黄金鳞甲 700金币 +70防御力"<<endl;  cout<<"3.白金鳞甲 1350金币 +130防御力"<<endl;  cout<<"4.钻石鳞甲 2300金币 +220防御力"<<endl;  }  Armor *CreatArmor(int flag)  {  switch(flag)  {  case 1:  return new MonsterArmor1();break;  case 2:  return new MonsterArmor2();break;  case 3:  return new MonsterArmor3();break;  case 4:  return new MonsterArmor4();break;  }  }  ~MonsterArmorStore(){}
};
 
//管理商店类
class StoreManager{
public:  WeaponStore *CreatWeaponStore(string name)  {  if(name=="战士")  return new WarriorWeaponStore();  if(name=="法师")  return new WizardWeaponStore();  if(name=="妖怪")  return new MonsterWeaponStore();  }  ArmorStore *CreatArmorStore(string name)  {  if(name=="战士")  return new WarriorArmorStore();  if(name=="法师")  return new WizardArmorStore();  if(name=="妖怪")  return new MonsterArmorStore();  }
};
 
 
int main()
{  CharacterFactory characterFactory; //角色产生工厂  Character *player1=0; //玩家一角色  Character *player2=0; //玩家二角色
   StoreManager storeManager; //商店产生工厂(决定产生哪种职业的武器和盔甲)  WeaponStore* player1weaponStore=0; //玩家一武器商店  ArmorStore* player1armorStore=0; //玩家一盔甲商店  WeaponStore* player2weaponStore=0; //玩家二武器商店  ArmorStore* player2armorStore=0; //玩家二盔甲商店
   Weapon *player1Weapon=0; //玩家一武器  Weapon *player2Weapon=0; //玩家二武器  Armor *player1Armor=0; //玩家一盔甲  Armor *player2Armor=0; //玩家二盔甲
   int money; //每回合随机生成金币  srand((unsigned)time(NULL));  money=rand()%100+200; //每回合生成200到300的金币
 
   int flag=0,count=0; //用于switch的flag和记录回合数的count  const int treatCD=4; //治疗术的CD,即四个回合  int player1NextTreat=1,player2NextTreat=1; //玩家一和玩家二下次可以使用治疗术的回合
 
   //游戏开始  cout<<"游戏开始!"<<endl;
   //玩家一创建角色  cout<<"玩家一请选择职业:n"<<"1.战士t2.法师t3.妖怪"<<endl;  while(1)  {  cin>>flag;  if(!cin) //输入类型错误,即int型的flag却输入了字母  {  cin.clear(); //防止输入字母后程序崩溃,将之前的输入错误标识改回为0,即输入无错误  cin.sync(); //清除之前错误的数据流,以便重新输入  cout<<"输入错误请重新输入!n"<<endl;  continue;  }  if(flag!=1&&flag!=2&&flag!=3)  cout<<"输入错误,请重新输入!n";  else  break;  }  player1=characterFactory.CreatCharacter(flag);  player1weaponStore=storeManager.CreatWeaponStore(player1->GetName());  player1armorStore=storeManager.CreatArmorStore(player1->GetName());
   //玩家二创建角色  cout<<"玩家二请选择职业:n"<<"1.战士t2.法师t3.妖怪"<<endl;  while(1)  {  cin>>flag;  if(!cin) //输入类型错误,即int型的flag却输入了字母  {  cin.clear(); //防止输入字母后程序崩溃,将之前的输入错误标识改回为0,即输入无错误  cin.sync(); //清除之前错误的数据流,以便重新输入  cout<<"输入错误请重新输入!n"<<endl;  continue;  }  if(flag!=1&&flag!=2&&flag!=3)  cout<<"输入错误,请重新输入!";  else  break;  }  player2=characterFactory.CreatCharacter(flag);  player2weaponStore=storeManager.CreatWeaponStore(player2->GetName());  player2armorStore=storeManager.CreatArmorStore(player2->GetName());
 
   //无限循环,直到有一方生命值下降为0  while(1)  {  count++;  cout<<"n*************"<<endl;  cout<<"***第"<<count<<"回合***"<<endl;  cout<<"*************n"<<endl;    //玩家一进行游戏  cout<<"玩家一:"<<endl;  money=rand()%100+200;  player1->GetMoney(money);  player1->Show();   while(1) //为了能退到上一级,即选择攻击或买武器等,需要这个循环  {  cout<<"请选择操作:"<<"n1.攻击n2.买武器n3.买盔甲n4.治疗术(回复200生命值,冷却时间为四个回合)"<<endl;  while(1)  {  cin>>flag;  if(!cin) //输入类型错误,即int型的flag却输入了字母  {  cin.clear(); //防止输入字母后程序崩溃,将之前的输入错误标识改回为0,即输入无错误  cin.sync(); //清除之前错误的数据流,以便重新输入  cout<<"输入错误请重新输入!n"<<endl;  continue;  }  if(flag!=1&&flag!=2&&flag!=3&&flag!=4)  cout<<"输入错误,请重新输入"<<endl;  else  break;  }  switch(flag)  {  case 1: //攻击  player2->TakeAttack(player1->GetATK());break;  case 2: //买武器   player1weaponStore->Show();  cout<<"0.返回上一级"<<endl;  while(1)  {  cout<<"请选择操作"<<endl;  cin>>flag;  if(!cin) //输入类型错误,即int型的flag却输入了字母  {  cin.clear(); //防止输入字母后程序崩溃,将之前的输入错误标识改回为0,即输入无错误  cin.sync(); //清除之前错误的数据流,以便重新输入  cout<<"输入错误请重新输入!n"<<endl;  continue;  }  if(flag!=0&&flag!=1&&flag!=2&&flag!=3&&flag!=4)  cout<<"输入错误,请重新输入"<<endl;  else if(flag==0)  break;  else  {  Weapon* tempWeapon=player1weaponStore->CreatWeapon(flag);  if(player1->GetMoney()<tempWeapon->GetPrice()-player1->GetWeapon()->GetPrice())  {  cout<<"你的金币不够,请重新选择或输入0返回上一级"<<endl;  delete tempWeapon;  }  else  {  delete tempWeapon;  break;  }  }  }  if(flag==0)  break;  player1Weapon=player1weaponStore->CreatWeapon(flag);  player1->GetWeapon(player1Weapon);  break;  case 3: //买盔甲  player1armorStore->Show();  cout<<"0.返回上一级"<<endl;  while(1)  {  cout<<"请选择盔甲"<<endl;  cin>>flag;  if(!cin) //输入类型错误,即int型的flag却输入了字母  {  cin.clear(); //防止输入字母后程序崩溃,将之前的输入错误标识改回为0,即输入无错误  cin.sync(); //清除之前错误的数据流,以便重新输入  cout<<"输入错误请重新输入!n"<<endl;  continue;  }  if(flag!=0&&flag!=1&&flag!=2&&flag!=3&&flag!=4)  cout<<"输入错误,请重新输入"<<endl;  else if(flag==0)  break;  else  {  Armor* tempArmor=player1armorStore->CreatArmor(flag);  if(player1->GetMoney()<tempArmor->GetPrice()-player1->GetArmor()->GetPrice())  {  cout<<"你的金币不够,请重新选择或输入0返回上一级"<<endl;  delete tempArmor;  }  else  {  delete tempArmor;  break;  }  }  }  if(flag==0)  break;  player1Armor=player1armorStore->CreatArmor(flag);  player1->GetArmor(player1Armor);  break;  case 4: //补血  if(count>=player1NextTreat)  {  player1->Treatment();  player1NextTreat+=treatCD;  }  else  {  cout<<"治疗术正在冷却中,还剩"<<(player1NextTreat-count)<<"个回合"<<endl;  while(1)  {  cout<<"按0退回上一级"<<endl;  cin>>flag;  if(flag==0)  break;  }  }  break;  }  if(flag!=0)  break;  }  //判断输赢  if(player2->GetHealth()<=0)  {  cout<<"玩家二生命值下降为0,玩家一胜利"<<endl;  break;  }        //玩家二进行游戏  cout<<"玩家二:"<<endl;  money=rand()%100+200;  player2->GetMoney(money);  player2->Show();   while(1) //为了能退到上一级,即选择攻击或买武器等,需要这个循环  {  cout<<"请选择操作:"<<"n1.攻击n2.买武器n3.买盔甲n4.治疗术(回复200生命值,冷却时间为四个回合)"<<endl;  while(1)  {  cin>>flag;  if(!cin) //输入类型错误,即int型的flag却输入了字母  {  cin.clear(); //防止输入字母后程序崩溃,将之前的输入错误标识改回为0,即输入无错误  cin.sync(); //清除之前错误的数据流,以便重新输入  cout<<"输入错误请重新输入!n"<<endl;  continue;  }  if(flag!=1&&flag!=2&&flag!=3&&flag!=4)  cout<<"输入错误,请重新输入"<<endl;  else  break;  }  switch(flag)  {  case 1: //攻击  player1->TakeAttack(player2->GetATK());break;  case 2: //买武器   player2weaponStore->Show();  cout<<"0.返回上一级"<<endl;  while(1)  {  cout<<"请选择操作"<<endl;  cin>>flag;  if(!cin) //输入类型错误,即int型的flag却输入了字母  {  cin.clear(); //防止输入字母后程序崩溃,将之前的输入错误标识改回为0,即输入无错误  cin.sync(); //清除之前错误的数据流,以便重新输入  cout<<"输入错误请重新输入!n"<<endl;  continue;  }  if(flag!=0&&flag!=1&&flag!=2&&flag!=3&&flag!=4)  cout<<"输入错误,请重新输入"<<endl;  else if(flag==0)  break;  else  {  Weapon* tempWeapon=player2weaponStore->CreatWeapon(flag);  if(player2->GetMoney()<tempWeapon->GetPrice()-player2->GetWeapon()->GetPrice())  {  cout<<"你的金币不够,请重新选择或输入0返回上一级"<<endl;  delete tempWeapon;  }  else  {  delete tempWeapon;  break;  }  }  }  if(flag==0)  break;  player2Weapon=player2weaponStore->CreatWeapon(flag);  player2->GetWeapon(player2Weapon);  break;  case 3: //买盔甲  player2armorStore->Show();  cout<<"0.返回上一级"<<endl;  while(1)  {  cout<<"请选择盔甲"<<endl;  cin>>flag;  if(!cin) //输入类型错误,即int型的flag却输入了字母  {  cin.clear(); //防止输入字母后程序崩溃,将之前的输入错误标识改回为0,即输入无错误  cin.sync(); //清除之前错误的数据流,以便重新输入  cout<<"输入错误请重新输入!n"<<endl;  continue;  }  if(flag!=0&&flag!=1&&flag!=2&&flag!=3&&flag!=4)  cout<<"输入错误,请重新输入"<<endl;  else if(flag==0)  break;  else  {  Armor* tempArmor=player2armorStore->CreatArmor(flag);  if(player2->GetMoney()<tempArmor->GetPrice()-player2->GetArmor()->GetPrice())  {  cout<<"你的金币不够,请重新选择或输入0返回上一级"<<endl;  delete tempArmor;  }  else  {  delete tempArmor;  break;  }  }  }  if(flag==0)  break;  player2Armor=player2armorStore->CreatArmor(flag);  player2->GetArmor(player2Armor);  break;  case 4: //补血  if(count>=player2NextTreat)  {  player2->Treatment();  player2NextTreat+=treatCD;  }  else  {  cout<<"治疗术正在冷却中,还剩"<<(player2NextTreat-count)<<"个回合"<<endl;  while(1)  {  cout<<"按0退回上一级"<<endl;  cin>>flag;  if(flag==0)  break;  }  }  break;  }  if(flag!=0)  break;  }  //判断输赢  if(player1->GetHealth()<=0)  {  cout<<"玩家一生命值下降为0,玩家二胜利"<<endl;  break;  }   }
   //销毁申请的空间  if(!player1)  delete player1;  if(!player2)  delete player2;  if(!player1weaponStore)  delete player1weaponStore;  if(!player1armorStore)  delete player1armorStore;  if(!player2weaponStore)  delete player2weaponStore;  if(!player2armorStore)  delete player2armorStore;  if(!player1Weapon)  delete player1Weapon;  if(!player2Weapon)  delete player2Weapon;  if(!player1Armor)  delete player1Armor;  if(!player2Armor)  delete player2Armor;
   system("pause");  return 0;
}
网站地图xml地图