面向对象程序设计方法RPG小游戏实例

第四章面向对象程序设计方法
一.实验目的
1.掌握面向对象程序设计的方法。明确类与对象的概念,掌握面向对象设计七大原则;
2.掌握常见的设计模式以及类图的描述
二.七大原则总结
(1)单一职责原则:类的职责要单一,不能将太多的职责放在一个类里。
(2)开闭原则:一个软件实体应当对扩展开放,对修改关闭,也就是说在设计一个模块时,应该使这个模块在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。
(3)里氏代换原则:在软件系统中,一个可以接受基类对象的地方必然可以接受一个子类对象。
(4)依赖倒转原则:高层模板不应该依赖低层模板,他们都应该依赖抽象,抽象不应该依赖细节,细节应该依赖抽象。
(5)接口隔离原则:使用多个专门的接口来取代一个统一的接口。
(6)合成复用原则:在系统中应该尽量多使用组合和聚合关联关系,尽量少使用甚至不使用继承关系。
(7)迪米特法则:一个软件实体对其他实体的引用越少越好,或者说如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,而是通过引入一个第三者发生间接交互。
三.题目要求及其分析
本题目要求的游戏角色应有以下属性:名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。
名字:由用户自己设计,不能超过50个字符。
性别:可以选择男性和女性。
种族:一共可选五个种族,人类、精灵、兽人、矮人和元素。
职业:可选六种职业,狂战士、圣骑士、刺客、猎手、祭司和巫师。
生命值=体力*20。
魔法值=(智力+智慧)*10。
种族和职业约束关系表如下:
面向对象程序设计方法RPG小游戏实例_第1张图片

各职业初始属性的大致比例应遵从下表:
面向对象程序设计方法RPG小游戏实例_第2张图片
按照面向对象设计思想我采用类的思想完成各个属性的设置
(1)玩家所选角色信息的类:class PlayerInfo
(2)角色的种族,职业类,公有继承PlayerInfo类的相关成员:
class RaceAndJob :public PlayerInfo
(3)角色属性类,公有继承RaceAndJob类,获取可继承的成员
class Attribute :public RaceAndJob
具体的类与类之间的关系,以及类中的方法如下图
面向对象程序设计方法RPG小游戏实例_第3张图片
要求力量、敏捷、体力、智力和智慧要求是随机值(利用随机数函数来取得随机数),但是五项属性的总和应该是100,并且应该和职业相关。
通过如下代码块实现:
随机生成属性值的实现,5个形参对应不同的5个角色属性

void Attribute::getRandom(int a1, int a2, int a3, int a4, int a5)
{
int sum;   //属性值之和
srand((unsigned)time(NULL));  //让随机数种子不固定,每次执行结果都不一样
do
{
	STR = a1 + rand() % 2;
	AGL = a2 + rand() % 2;
	PHY = a3 + rand() % 2;
	INT = a4 + rand() % 2;
	//WIS = a5 + rand() % 2;
	sum = STR + AGL + PHY + INT;
} while (((100 - a5) < sum) && (sum < 100));
	WIS = 100 - sum;
	HP = PHY * 20;       //生命值等于体力的20倍
	MP = (WIS + INT) * 10;
}

四.UML的类图结构设计
面向对象程序设计方法RPG小游戏实例_第4张图片
五.调试测试及其运行结果
(1)种族限制职业测试展示:
面向对象程序设计方法RPG小游戏实例_第5张图片
在这里插入图片描述
在这里插入图片描述
(2)不同种族对应不同种类的职业
力量、敏捷、体力、智力和智慧随机产生测试
面向对象程序设计方法RPG小游戏实例_第6张图片面向对象程序设计方法RPG小游戏实例_第7张图片
总值为100每次产生的值是随机的,都不相同
(3)写入文件展示
面向对象程序设计方法RPG小游戏实例_第8张图片
(4)完整版运行结果展示
面向对象程序设计方法RPG小游戏实例_第9张图片
六.经验归纳
本次实验之前,我是先学习了程序设计面向对象设计的思想,明白了七大原则以后开始的本次实验。自我感觉对我的编程思想提高蛮多的,感觉整个过程中自己对每个模块该干啥,思路很清晰,尽管可能某一个模块可能实现起来有困难,但是我的思路很清晰。

你可能感兴趣的:(面向对象程序设计方法RPG小游戏实例)