| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 402 人关注过本帖
标题:c++求改错..........
只看楼主 加入收藏
爱的天使xuge
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2013-6-14
收藏
 问题点数:0 回复次数:0 
c++求改错..........
#include<iostream>
 #include<stdio.h>
 #include<stdlib.h>
 
#define Max 5
 #define NULL 0
 
#define bool int
 #define false 0
 #define true 1
 
using namespace std;
 
class ArmyGroup;
 class Soldier          //Soldier 类定义
 {
 public:
 Soldier();
 ~Soldier();
 virtual bool MakeDecision(ArmyGroup *parmy);//
 virtual bool Attack();//
 virtual void Rest();
     virtual bool TakingDrug();
 virtual void GetDrug(){DrugNum+=pTarget->GetDrugNum();}        //获得敌人药瓶函数;
 virtual void Hurted(int i){HP-=i;}
 virtual void NPHurted(){HP-=0.5*MaxHP;}
 virtual bool Die(){if(HP<=0)return 1;else return NULL;}
 virtual void Update();
 public:
 int GetLevel(){return Level;}
 int GetMaxHP(){return MaxHP;}
 int GetHP(){return HP;}
 int GetSP(){return SP;}
 int GetMaxSP(){return MaxSP;}
 int GetExp(){return Exp;}
 int GetDrugNum(){return DrugNum;}
 public:
 virtual void GetTarget(ArmyGroup *parmy,int Target);
 virtual void Print();
 Soldier* pTarget;////////////////////////////////////////////////important!
 public:
 virtual bool WizardAttack(){return 0;}//wizard攻击行为函数
 virtual bool MasterAttack(){return 0;}
 virtual int GetMaxMP(){return 0;}
 virtual int GetMP(){return 0;}
 virtual int GetMaxNP(){return 0;}
 virtual int GetNP(){return 0;}
 protected:
 char name;
 int Level;         //等级
     int MaxHP;         //最大生命
 int HP;            //当前生命
 int MaxSP;        //最大体力
 int SP;            //当前体力
 int Damage;        //攻击力
 int Exp;           //经验
 int DrugNum;       //药瓶数量
 int Counter;       //升级计数器
 };
 
class Wizard:public Soldier   //Wizard类定义
 {
 public:
 Wizard();
     virtual bool MakeDecision(ArmyGroup *parmy);               //Wizard决策函数
 virtual bool WizardAttack();    //攻击行为函数
 virtual void Rest();
     virtual void Print();
 virtual void Update();
 public:
 virtual int GetMaxMP(){return MaxMP;}
 virtual int GetMP(){return MP;}
 protected:
 int MaxMP;        //最大魔法值
 int MP;           //当前魔法值
 
};
 
class Master:public Wizard    //Master类定义
 {
 public:
 Master();
 bool MakeDecision(ArmyGroup *parmy);               //Master决策函数   
bool MasterAttack();   //攻击行为函数
 void Rest();
 virtual void Print();
 virtual void Update();
 public:
 int GetMaxNP(){return MaxNP;}
 int GetNP(){return NP;}
 
protected:
 int MaxNP;        //最大内力
 int NP;           //当前内力
 
};
 
//军团定义
 class ArmyGroup
 {
 public:
 ArmyGroup();
 ~ArmyGroup();
 public:
 Soldier* pSOLDIER;
 Wizard * pWIZARD;
 Master * pMASTER;
Soldier * pRole;
 void GetRole(int Role);
 
};
 
class WarSystem//战斗系统类定义
 {
 public:
 WarSystem();            //WarSystem构造函数
 bool StartWar();  //开局
 void RunGame();         //游戏进程
 bool StartRound(bool r);      //回合展开
 bool Result();          //结果
 
    ~WarSystem();
 private:

 ArmyGroup* parmyA;
 ArmyGroup* parmyB;
 
};
 
Soldier::Soldier()                                   //Soldier构造函数
 {
     Level =1;
 MaxHP =100;
 HP    =100;
 MaxSP =100;
 SP    =100;
 Damage =20;
 Exp    =0;
 DrugNum=5;
 Counter=0;
 pTarget = new Soldier;
 }
 Soldier::~Soldier()
 {
 delete pTarget;
 }
 
void Soldier::Print()                                 //生理状况输出
 {
 cout<<"Level: "<<GetLevel()<<"  Exp:"<<GetExp()<<"  DrugNum: "<<GetDrugNum()<<endl;
 cout<<"  MaxHP: "<<GetMaxHP()<<"  HP: "<<GetHP()<<"  MaxSP: "<<GetMaxSP()<<"  SP: "<<GetSP()<<endl;
 }
 
bool Soldier::MakeDecision(ArmyGroup *parmy)             //决策行为函数
 
{
 int Decision;
 cout<<"please input decision!"<<endl;
 cin>>Decision;
 switch (Decision)
 {
 case 0: if(SP>=10)
 {
                 int Target;
             cout<<"please input target for the Attack!"<<endl;
             cin>>Target;
 GetTarget(parmy,Target);
 Attack();
 }
 
break;
 case 1: if(SP<0.3*MaxSP)Rest();
 break;
 case 2: if(HP<0.5*MaxHP)TakingDrug();
 break;
 default:
 break;
 }
 if((Decision>=0)&&(Decision<=2))
 return 1;
 else
return 0;
 }
 void Soldier::GetTarget(ArmyGroup *parmy,int Target)
 {
 if((Target<=3)&&(Target>=1))
 pTarget = ((parmy->pSOLDIER)+Target-1);
 else if(Target<=5)
 pTarget = ((parmy->pWIZARD)+Target-4);
 else if(Target==6)
 pTarget = parmy->pMASTER;
 else
pTarget = 0;
 }
 
bool Soldier::Attack()      //攻击行为函数
 {
 SP-=10;  Exp+=5;
 Counter++;
 if(Counter==4){Counter=0;Update();}   //升级
 int i=Damage;
 
pTarget->Hurted(i);
 if(pTarget->Die())GetDrug();//敌人已死,获得药瓶
 return 1;
 }
 


//休息行为函数:
 void Soldier::Rest()
 {
 (HP+0.5*MaxHP)>MaxHP?HP=MaxHP:HP+=0.5*MaxHP;
 (SP+0.5*MaxSP)>MaxSP?SP=MaxSP:SP+=0.5*MaxSP;
 }
 //升级函数:
 void Soldier::Update()
 {
 Level+=1;MaxHP+=20;MaxSP+=20;Damage+=20;
 HP=int(HP*(MaxHP/(MaxHP-20)));
 SP=int(SP*(MaxSP/(MaxSP-20)));
 
}
 
//吃药行为函数:
 bool Soldier::TakingDrug()
 {
 if(DrugNum==0)return NULL;
 else {DrugNum--;(HP+0.8*MaxHP)>MaxHP?HP=MaxHP:HP+=0.8*MaxHP;return 1;}
}
 
//Wizard构造函数:
 Wizard::Wizard():Soldier()
 {
 MaxMP = 100;
 MP = 100;  
 }
 
//Wizard显示函数:
 void Wizard::Print()
 {
 cout<<"Level: "<<GetLevel()<<"  Exp:"<<GetExp()<<"  DrugNum: "<<GetDrugNum()<<endl;
 cout<<"  MaxHP: "<<GetMaxHP()<<"  HP: "<<GetHP()<<"  MaxSP: "<<GetMaxSP()<<"  SP: "<<GetSP()<<"  MaxMP: "<<GetMaxMP()<<"  MP: "<<GetMP()<<endl;
 }
 


//Wizard决策行为函数:
 
bool Wizard::MakeDecision(ArmyGroup *parmy)
 {
 int Decision;
 cout<<"please input decision!"<<endl;
 cin>>Decision;
 switch (Decision)
 {
 case 0: if(SP>=10)
 {
             int Target;
             cout<<"please input target for the Attack!"<<endl;
             cin>>Target;
 GetTarget(parmy,Target);
 Attack();
 }
 break;
 case 1: if(SP<0.3*MaxSP)Rest();
 break;
 case 2: if(HP<0.5*MaxHP)TakingDrug();
 break;
 case 3: for(int a=2;a>0;a--)
 {
 if((MP>=25)&&(SP>=10))
   {
 int TargetW;
             cout<<"please input target for the WizardAttack!"<<endl;
             cin>>TargetW;
 GetTarget(parmy,TargetW);
 WizardAttack();
   }
 }
 break;
 default:
 break;
 }
 if((Decision>=0)&&(Decision<=3))
 return 1;
 else
return NULL;
 }
 

//Wizard攻击行为函数:
 bool Wizard::WizardAttack()
 {
     SP-=10; MP-=25; Exp+=5;
 Counter++;
 if(Counter==4){Counter = 0;Update();}//调用升级函数
 
int i=Damage;
 pTarget->Hurted(i);
 if(pTarget->Die())GetDrug();//敌人已死,获得药瓶
 return 1;
 }
 

//Wizard休息行为函数:
 void Wizard::Rest()
 {
 (HP+0.5*MaxHP)>MaxHP?HP=MaxHP:HP+=0.5*MaxHP;
 (SP+0.5*MaxSP)>MaxSP?SP=MaxSP:SP+=0.5*MaxSP;
 (MP+0.3*MaxMP)>MaxMP?MP=MaxMP:MP+=0.3*MaxMP;
 }
 

//Wizard升级函数
 void Wizard::Update()
 {
 Level+=1;
 MaxHP+=20;MaxSP+=20;Damage+=20;MaxMP+=20;
 HP=int(HP*(MaxHP/(MaxHP-20)));
 SP=int(SP*(MaxSP/(MaxSP-20)));
 MP=int(MP*(MaxMP/(MaxMP-20)));
 
}
 
//Master构造函数
 Master::Master():Wizard()
 {
 MaxNP = 100;   
NP = 100;   
 }
 
void Master::Print()
 {
 cout<<"Level: "<<GetLevel()<<"  Exp:"<<GetExp()<<"  DrugNum: "<<GetDrugNum()<<endl;
 cout<<"  MaxHP: "<<GetMaxHP()<<"  HP: "<<GetHP()<<"  MaxSP: "<<GetMaxSP()
 <<"  SP: "<<GetSP()<<"  MaxMP: "<<GetMaxMP()<<"  MP: "<<GetMP()<<"  MaxNP: "<<GetMaxNP()<<"  NP: "<<GetNP()<<endl;
 }
 
//Master决策行为函数
 bool Master::MakeDecision(ArmyGroup *parmy)
 {
 int Decision;
 cout<<"please input decision!"<<endl;
 cin>>Decision;
 switch (Decision)
 {
 case 0: if(SP>=10)
 {
             int Target;
             cout<<"please input target for the Attack!"<<endl;
             cin>>Target;
 GetTarget(parmy,Target);
 Attack();
 }
 break;
 case 1: if(SP<0.3*MaxSP)Rest();
 break;
 case 2: if(HP<0.5*MaxHP)TakingDrug();
 break;
 case 3: for(int a=2;a>0;a--)
 {
 if((MP>=25)&&(SP>=10))
   {
 int TargetW;
             cout<<"please input target for the WizardAttack!"<<endl;
             cin>>TargetW;
 GetTarget(parmy,TargetW);
 WizardAttack();
   }
 }
 break;
 case 4: if((NP>=50)&&(SP>=30))
 {
             int TargetM;
             cout<<"please input target for the MasterAttack!"<<endl;
             cin>>TargetM;
 GetTarget(parmy,TargetM);
 MasterAttack();
 }
 break;
 default:
 break;
 }
 if((Decision>=0)&&(Decision<=4))
 return 1;
 else
return NULL;
 }
 
bool Master::MasterAttack()
 {
 NP-=50;SP-=30;Exp+=5;
 Counter++;
 if(Counter==4){Counter=0;Update();}//调用升级函数
 
(pTarget)->NPHurted();
 if((pTarget)->Die())GetDrug();//敌人已死,获得药瓶
 return 1;
 }
 

void Master::Rest()                    //Master休息函数
 {
 (HP+0.5*MaxHP)>MaxHP?HP=MaxHP:HP+=0.5*MaxHP;
 (SP+0.5*MaxSP)>MaxSP?SP=MaxSP:SP+=0.5*MaxSP;
 (MP+0.3*MaxMP)>MaxMP?MP=MaxMP:MP+=0.3*MaxMP;
 (NP+0.3*MaxNP)>MaxNP?NP=MaxNP:NP+=0.3*MaxNP;
 }
 
void Master::Update()
 {
 Level+=1;MaxHP+=20;MaxSP+=20;Damage+=20;
 HP=int(HP*(MaxHP/(MaxHP-20)));
 SP=int(SP*(MaxSP/(MaxSP-20)));
 MaxMP+=20;
 MP=int(MP*(MaxMP/(MaxMP-20)));
 MaxNP+=20;
 NP=int(NP*(MaxNP/(MaxNP-20)));
 
}
 
////////////////////////////////////////////////////////////////////////////////////////////以下为军团类各个成员函数:
 
//ArmyGroup构造函数
 ArmyGroup::ArmyGroup()
 {
 pSOLDIER = new Soldier[3];
 pWIZARD = new Wizard[2];
 pMASTER = new Master;
 }
 //ArmyGroup析构函数
 ArmyGroup::~ArmyGroup()
 {
 delete [] pSOLDIER;
 delete [] pWIZARD;
 delete pMASTER;
 
}
 
void ArmyGroup::GetRole(int Role)//抽取玩家的军团中的一个角色当做一次回合中的主角色
 {
 
if((Role<=3)&&(Role>=1))
 pRole = pSOLDIER+Role-1;
 else if(Role<=5)
 pRole = pWIZARD+Role-4;
 else if(Role==6)
 pRole = pMASTER;
 else
pRole = 0;
 
}
 


//战斗系统类构造函数:
 WarSystem::WarSystem()
 {
 parmyA = new ArmyGroup;
 
parmyB = new ArmyGroup;
 
}
 
//战斗系统类析构函数:
     WarSystem::~WarSystem()
 {
 delete[] parmyA;
 delete[] parmyB;
 }
 
//开始游戏,随机决定哪一方率先发起攻击:
 bool WarSystem::StartWar()
 {     
 return rand()%2;
 }
 
bool WarSystem::StartRound(bool r)//每一回合的展开,按照输入的数据决定玩家A或B先进行决策
 {
 
int RoleA,RoleB;
 if(r==1)
 {   
 
cout<<"It's A's term"<<endl<<"Player A,please select your soldier: "<<endl;
 cin>>RoleA;
 parmyA->GetRole(RoleA);
 parmyA->pRole->MakeDecision(parmyB);
 
cout<<"It's B's term"<<endl<<"Player B,please select your soldier: "<<endl;
 cin>>RoleB;
 parmyB->GetRole(RoleB);
 parmyB->pRole->MakeDecision(parmyA);
 }
 else if(r==0)
 {
 cout<<"It's B's term"<<endl<<"Player B,please select your soldier: "<<endl;
 cin>>RoleB;
 parmyB->GetRole(RoleB);
 parmyB->pRole->MakeDecision(parmyA);
 
cout<<"It's A's term"<<endl<<"Player A,please select your soldier: "<<endl;
 cin>>RoleA;
 parmyA->GetRole(RoleA);
 parmyA->pRole->MakeDecision(parmyB);
 }
 return 1;
 }
 

bool WarSystem::Result()
 {   int i;
 int DieNumA=0;
 for(i=0;i<=2;i++)
 if((parmyA->pSOLDIER+i)->Die()==1)
 DieNumA++;
 for(i=0;i<=1;i++)
 if((parmyA->pWIZARD+i)->Die()==1)
 DieNumA++;
 if((parmyA->pMASTER)->Die()==1)DieNumA++;
 
int DieNumB=0;
 for(i=0;i<=2;i++)
 if((parmyB->pSOLDIER+i)->Die()==1)
 DieNumB++;
 for(i=0;i<=1;i++)
 if((parmyB->pWIZARD+i)->Die()==1)
 DieNumB++;
 if((parmyB->pMASTER)->Die()==1)DieNumB++;
 
if((DieNumA==3)||(DieNumB==3))
 {
 if(DieNumA==3)cout<<"Player B win !"<<endl;
 if(DieNumB==3)cout<<"Player A win !"<<endl;
 return 1;
 }
 else return 0;
 }
 
void WarSystem::RunGame()
 {
 char Begin;
 int StartTurn=StartWar();
     cout<<"Ready for the game?"<<endl<<"Y(Yes)/N(No)"<<endl;
 cin>>Begin;
 if(Begin=='Y')
 while(!Result())
 {   int i;
         cout<<"Team of A:"<<endl;
         for(i=1;i<=6;i++)
 {
 if(i<=3)
 {cout<<"A"<<i<<endl;(parmyA->pSOLDIER+i-1)->Print();}
 else if(i<=5)
 {cout<<"A"<<i<<endl;(parmyA->pWIZARD+i-4)->Print();}
 else
 {cout<<"A"<<i<<endl;(parmyA->pMASTER)->Print();}
 }
         cout<<"Team of B:"<<endl;
         for(i=1;i<=6;i++)
 {
 if(i<=3)
 {cout<<"A"<<i<<endl;(parmyA->pSOLDIER+i-1)->Print();}
 else if(i<=5)
 {cout<<"A"<<i<<endl;(parmyA->pWIZARD+i-4)->Print();}
 else
 {cout<<"A"<<i<<endl;(parmyA->pMASTER)->Print();}
 }
 StartRound(StartWar());
 }
 else
cout<<"QUIT !"<<endl;
 }
 


void main()
 {
     WarSystem warsystem;
     warsystem.RunGame();
}


搜索更多相关主题的帖子: include public false 
2013-12-03 11:18
快速回复:c++求改错..........
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020589 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved