开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
c++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
string iostream
问题(Question):
1. 撰写程式建立一 CRole 角色类别,包含
(a) 属性:string Name 名字字串.
(b) 属性:int Age 年纪.
(c) 属性:int Life 生命值.
(d) 属性:int Power 力量值.
(e) 成员函数之建构元:设定名字为空字串,年纪为 -1,生命值为 -1,力量值为
-1.
(f) 成员函数 Disp():打印 Name、Age、Life、Power 数值.
(g) 成员函数 bool Alive():如果 Life>0 且 Age<100,则传回 true,否则传回
false.
(h) 成员函数 void Wound(int nLifeDown):遭受攻击而受伤,使自身生命值下降
nLifeDown.
(i) 虚拟成员函数 void Attack(CRole* pRole).
2. 建立 CSoldier 士兵类别,公开继承自 CRole 类别,包含
(a) 成员函数之建构元:设定名字为 “Soldier”,年纪为 20,生命值为 150,力量
值为 1200.
(b) 成员函数 void Attack(CRole* pEnemy):攻击敌人 *pEnemy,但不得攻击与自身
类别相同之物件;攻击时使敌人生命值减损 (Power/500);而后,使得自身生命值 Life
减损 5,年纪增加 1,力量值下降 100.
(c) 其他自订的属性、成员函数.
3. 建立 CWizard 巫师类别,公开继承自 CRole 类别,包含
(a) 成员函数之建构元:设定名字为 “Wizard”,年纪为 70,生命值为 120,力量
值为 2000.
(b) 成员函数 void Attack(CRole* pEnemy):攻击敌人 *pEnemy,但不得攻击与自身
类别相同之物件;攻击时使敌人生命值减损 (Power/200);而后,使得自身生命值 Life
减损 5,年纪增加 3,力量值下降 100.
(c) 其他自订的属性、成员函数.
4. 并撰写一主程式,产生 CSoldier 和 CWizard 两个物件,由士兵开始互相攻击,直到
任一个物件 "!Alive()" 为止;每次攻击后,需印出被攻击者的状态 "Disp()";最后须
印出何者赢了。
输入:(无)
输出:每次攻击后,输出遭受攻击者的属性资料 (名字、年纪、生命值、力量值),最后输
出士兵与巫师两个物件,何者获胜.
程式码(Code):(请善用置底文网页, 记得排版)
#include <iostream>
#include <string>
using namespace std;
class crole{
public:
string name;
int age;
int life;
int power;
crole(){
name="""";
age=-1;
life=-1;
power=-1;
}
void disp(){
cout<<"name:"<<name<<endl;
cout<<"age:"<<age<<endl;
cout<<"life:"<<life<<endl;
cout<<"power:"<<power<<endl;
}
bool alive(){
if(life>0&&age<100)
return true;
else
return false;
}
void wound(int lifedown){
life=life-lifedown;
}
virtual void attack(crole* prole)=0;
};
class csoldier:public crole{
public:
csoldier(){
name="soldier";
age=20;
life=150;
power=1200;
}
void attack(crole* penemy){
if(dynamic_cast<cwizard*>(penemy)){
cwizard *pwizard=dynamic_cast<cwizard*>(penemy);
pwizard->wound(power/500);
life=life-5;
age=age+1;
power=power-100;
}
}
};
class cwizard:public crole{
public:
cwizard(){
name="wizard";
age=70;
life=120;
power=2000;
}
void attack(crole* penemy){
if(dynamic_cast<csoldier*>(penemy)){
csoldier *psoldier=dynamic_cast<csoldier*>(penemy);
psoldier->wound(power/200);
life=life-5;
age=age+3;
power=power-100;
}
}
};
int main(){
csoldier s;
cwizard w;
while(true){
s.attack(&w);
w.disp();
if(!s.alive()||!w.alive())
break;
w.attack(&s);
s.disp();
if(!s.alive()||w.alive())
break;
}
return 0;
}
补充说明(Supplement):
无法编译
也不知错在哪
希望会的人能直接告诉我错再哪并如何修改
刚学虚拟函数