rpg角色创建

一.题目要求
几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。本次上机要求编写一个简化的创建游戏角色的程序。
在这里插入图片描述
2.游戏角色应有的属性
本题目要求的游戏角色应有以下属性:名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。
名字:不超过50个字符。
性别:可以选择男性和女性。
种族:一共可选五个种族,人类、精灵、兽人、矮人和元素。
职业:可选六种职业,狂战士、圣骑士、刺客、猎手、祭司和巫师。
其余属性均为整数。
本题目要求首先用户输入角色姓名,然后由用户选择角色性别,然后由用户选择种族,然后选择职业,然后自动分配力量、敏捷、体力、智力和智慧属性,并计算生命值和魔法值。
生命值=体力*20。
魔法值=(智力+智慧)*10。
3.职业限制
很多职业会限制某些种族选择,例如兽人不能就职圣骑士等等,种族和职业的限制表如下:
种族/职业 狂战士 圣骑士 刺客 猎手 祭司 巫师
人类 允许 允许 允许 允许 允许 允许
精灵 不允许 不允许 允许 允许 允许 允许
兽人 允许 不允许 不允许 允许 允许 不允许
矮人 允许 允许 不允许 不允许 允许 不允许
元素 不允许 不允许 不允许 不允许 允许 允许

所以在要求用户选择职业时,输出信息里面只能有用户所选择种族可以就职的职业。
4.初始属性
本题目要求力量、敏捷、体力、智力和智慧要求是随机值(利用随机数函数来取得随机数),但是五项属性的总和应该是100,并且应该和职业相关。例如狂战士的体力和力量就要比较高,而巫师需要较高的智力,而祭司则需要较高的智慧。各职业初始属性的大致比例应遵从下表:
职业/属性 力量 敏捷 体力 智力 智慧
狂战士 40 20 30 5 5
圣骑士 25 15 30 20 10
刺客 20 35 20 15 10
猎手 15 40 15 10 20
祭司 15 20 15 35 15
巫师 10 20 10 20 40
例如,前面示意图中的祭司的初始属性,大致满足该比例,但是应该是随机的。
然后利用属性值计算生命值和魔法值。
5.显示信息
最后向用户显示该角色的所有信息,然后询问用户是否满意,如用户不满意则重新创建,若用户满意则程序结束,并将用户创建角色的相关信息写入文件保存。

二.问题分析
2.1 题目分析
本次实验需要实现简单的人物角色信息的创建,并将创建成功且用户满意的人物角色信息保存在文件中。
首先,需要用户自定义键盘输入角色姓名,输入数字选择角色性别、种族和职业。用户选择了既定的种族后,会对职业的产生有限制,不同的种族所能产生的职业是不同的。所以在要求用户选择职业时,输出信息里面只能有用户所选择种族可以就职的职业。算法将会用switch-case语句来完成,实现种族对职业的限制。
其次,关于不同职业的属性值的产生应该是利用随机函数来实现的,但是其应该遵循职业—属性参照表里的初始属性的有关数值,不能毫无根据的任意产生。其中,力量、敏捷、体力、智力、智慧是利用随机函数产生的,其生命值和魔法值是通过计算得到的(生命值=体力*20;魔法值=(智力+智慧)*10)。且人物角色的属性值之和应该为100。
最后,用户选择创建的人物角色的属性值是否满意,如果满意,则通过文件写入函数将人物角色信息写入到role.txt文件中,如果用户不满意创建的人物角色的属性值,则继续利用随机函数创建属性信息,直到用户满意为止。

2.2 算法思路
此次编程通过面向对象的思想来实现,实现了类的封装和继承,同时符合面向对象设计方法的开闭原则。
(1)通过创建一个class Role基类来存放角色姓名和性别,并分别通过get_name()和get_sex()方法来获取角色姓名和性别。
(2)创建class Race类,对 Role类的公有继承。在Race类中写入种族race和职业occup信息。并通过get()方法来得到角色的种族和职业信息。其中,用if—else语句来实现种族职业属性的限制。
(3)创建class Attribute类,对Race类的公有继承。在class Attribute类中定义属性信息,利用随机函数产生对应的属性值。相应的属性值的产生以各个职业的初始值为参照,且五个属性的值相加等于100则跳出循环,创建成功,并通过计算得到对应的魔法值MP与生命值HP。
(4)void save()来实现向文档中保存信息的功能。如果用户满意角色的属性值,则将角色信保存在role.txt文件中,利用c++的文件写入函数ofstream来讲信息写入文本文件中。

三.UML类图及流程图
(1)UML类图如下:
在这里插入图片描述
(2)程序流程图如下

在这里插入图片描述
四.调试及测试
①开始界面显示:
在这里插入图片描述
②选择性别、种族、职业并生成属性值:
在这里插入图片描述
③选择创建角色是否满意(若满意,将角色保存在文档中;若不满意,则重新创建,直至满意为止)

在这里插入图片描述在这里插入图片描述

④不同角色会限制职业的选择

在这里插入图片描述
在这里插入图片描述

⑤不同的角色对应原始属性表产生的随机属性值
职业/属性 力量 敏捷 体力 智力 智慧
狂战士 40 20 30 5 5
圣骑士 25 15 30 20 10
刺客 20 35 20 15 10
猎手 15 40 15 10 20
祭司 15 20 15 35 15
巫师 10 20 10 20 40
在这里插入图片描述

⑥调试图(调试姓名数组是否存储正确)
在这里插入图片描述
⑦调试图(设置m为判断是否满意的变量,m=1则为满意,将角色保存)
在这里插入图片描述
⑧调试图(调试各属性值是否正确)
在这里插入图片描述
⑨调试图(调试魔法值MP与生命值HP是否正确)

在这里插入图片描述
五.个人总结
(1)通过此次的上机实验让我对面向对象编程的类和对象有了更加深入的理解。通过类的封装和继承,在原有基类的基础上派生出新的类来实现另外的功能。符合面向对象设计方法中的开闭原则。
(2)通过复习了C++的文件写入函数来实现了对角色信息的存储工作。关于C++写文件,首先要创建一个ofstream对象来管理输入流,将对象与文件关联起来,使用cout方式使用该对象,实现了输入文件的操作。
(3)对UML类图有了更加深入的了解。+、#、—分别表示public、protected和private。类之间的关系有关联、聚合、组合、泛化和依赖。在软件开发不同阶段使用的类图具有不同的抽象层次,即概念层、说明层、和实现层。使用UML进行应用建模也应该是一个迭代的过程,所以我们应该建立一个类图的层次的概念。建立类图的步骤包括以下三步:①研究分析问题领域确定系统需求。②确定类,明确类的含义和职责、确定属性和操作。③确定类之间的关系。

猜你喜欢

转载自blog.csdn.net/qq_43815240/article/details/89948201
RPG