实验五:类的继承、派生和多态2
/*问题描述*/
设计并实现一个机器宠物类MachinePets。 每个机器宠物有如下信息:昵称(nickname) 每个机器宠物有如下成员函数: 带参数的构造函数MachinePets(const string s) ,为机器宠物初始化昵称。 纯虚函数string talk()为机器宠物派生类提供宠物叫声的统一接口。
设计并实现电子宠物猫类PetCats,该类公有继承自MachinePets。每个电子宠物猫类有如下成员函数: 带参数的构造函数PetCats(const string s),为机器宠物猫初始化昵称。 string talk(),返回电子宠物猫叫声。 设计并实现电子宠物狗类PetDogs, 该类公有继承自MachinePets。每个电子宠物狗类有如下成员函数:
带参数的构造函数PetCats(const string s),为机器宠物狗初始化昵称。 string talk(),返回电子宠物狗叫声。
/*代码如下*/
1 #include "pch.h" 2 #include <iostream> 3 #include<string> 4 using std::cin; 5 using std::cout; 6 using std::endl; 7 using std::string;//引用程序所需的函数标准声明,便于在型程序出错时找错,养成良好习惯。 8 9 class machine_pets {//电子宠物类 10 public: 11 machine_pets(){} 12 machine_pets(const string str) { 13 nickname = str; 14 } 15 virtual void talk() { 16 } 17 void getnickname(string s) { 18 nickname = s; 19 } 20 private: 21 string nickname; 22 }; 23 24 class pet_cats:public machine_pets {//公有继承自电子宠物类的电子猫类 25 public: 26 pet_cats(const string name0){ 27 name = name0; 28 } 29 void talk() { 30 cout << name << " says : " << words << endl; 31 } 32 private: 33 string name; 34 string words = "miao wu``";//此处可以通过参数自行设置宠物的声音 35 }; 36 37 class pet_dogs :public machine_pets {//公有继承自电子宠物类的电子狗类 38 public: 39 pet_dogs(const string name0) { 40 name = name0; 41 } 42 void talk() { 43 cout << name << " says : " << words << endl; 44 } 45 private: 46 string name; 47 string words = "wang wang``"; 48 }; 49 50 void play(machine_pets *pets) {//公共接口函数,用于发出叫声, 51 pets->talk(); 52 } 53 54 int main() { 55 pet_cats cat("hello kitty"); 56 pet_dogs dog("superdog"); 57 58 play(&cat); 59 play(&dog); 60 61 system("pause"); 62 return 0; 63 }
/*运行截图*/
/*拓展部分*/
我们可以尝试通过音频调用的函数,以文件名作为参数等方法,来调用音频文件,使得宠物可以发出猫猫狗狗的叫声
这里给出一段参考性的代码
1 #include <windows.h> 2 #include<stdio.h> 3 #include <mmsystem.h> 4 #pragma comment(lib, "winmm.lib") 5 6 int main() 7 { 8 int mp3_alltime=0; 9 mciSendString("open \"C:\\Users\\Administrator\\Desktop\\M2M Pretty Boy.wav\" alias mp3_music",NULL,0,NULL); //需要更改 10 //播放音乐 11 mciSendString("play mp3_music",NULL,0,NULL); 12 //获取播放时间 13 char sPosition[500]; 14 mciSendString("status mp3_music length",sPosition,225,0); 15 mp3_alltime=atol(sPosition); 16 Sleep(mp3_alltime); 17 return 0; 18 }
/*选做部分*/
展示一下运行的结果⑧
/*运行截图*/
/*简单的说明*/
补足程序后大概就是这么玩的。
1、创建角色,选择职业(这里暂时只实现了swordsman的代码,所以暂时只能选swordsman)
2、默认你的对手是什么;
3、展示你和你对手的状态,包括血量和魔法值(本题用了容器写了一个背包,里面放置你拥有的治疗药水和魔法药水)
4、战斗,你可以选择普攻,特殊攻击(有概率被闪避)或者使用药水来恢复自己,对手也一样,这是一个回合。进攻成功可以获得经验然后升级。
5、直至一方死亡,若你死亡,就game over,如果对手死亡,你可以获得他背包中剩下的物品,然后迎接下一位对手。
6、重复以上步骤。
/*自己的一些想法*/
1、再写一个金币加进去,每次击败对手可以获得金币,并且设置药水在商店中的价格,每次开局前可以购买药水。
2、加入金币的原因,战斗过程中如果对手用完了药水,那么面对第二个对手失败的可能性很大,有了金币可以增强持续战斗能力。
3、可以自由选择对手职业,不总是默认的。
4、......
/*再说一点⑧*/
弓箭手和法师还没有实现,我要先写作业啦,没办法,我太菜了,得笨鸟先飞。
我把作业写完再回来试着实现我的想法和另外两个职业。