[問題] c++作業問題

作者: ga544523 (美麗新世界)   2014-06-02 09:24:10
開發平台(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):
無法編譯
也不知錯在哪
希望會的人能直接告訴我錯再哪並如何修改
剛學虛擬函數

Links booklink

Contact Us: admin [ a t ] ucptt.com