1.功能描述
几乎所有的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.显示信息
最后向用户显示该角色的所有信息,然后询问用户是否满意,如用户不满意则重新创建,若用户满意则程序结束,并将用户创建角色的相关信息写入文件保存。

#include<iostream>
#include<string>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<fstream>
using namespace std;class Game          //声明Game类
{public:Game(string,int,int);           //声明结构函数 int getwork(int);              //声明公有成员函数 string name;int sex;int race;};Game::Game(string nam,int s,int r)            //定义结构函数
{name=nam;sex=s;race=r;
}
int Game:: getwork(int race)        //定义公有成员函数,通过种族来选取职业(不同种族可选的职业类型不同)
{int work;switch(race)                  //通过种族来选取职业 {case 0:{cout<<"请选择您的职业(0狂战士,1圣骑士,2刺客,3猎手,4祭司,5巫师);";cin>>work;break;}case 1:{cout<<"请选择您的职业(2刺客,3猎手,4祭司,5巫师);";cin>>work;break;}case 2:{cout<<"请选择您的职业(0狂战士,3猎手,4祭司,5巫师);";cin>>work;break;   }case 3:{cout<<"请选择您的职业(0狂战士,3猎手,4祭司);";cin>>work;break;}case 4:{cout<<"请选择您的职业(0狂战士,1圣骑士,3猎手,4祭司);";cin>>work;break;}case 5:{cout<<"请选择您的职业(4祭司,5巫师);";cin>>work;break;}}return work;} class Gameproperty            //声明Gameproperty类
{public:void getproperty(string,int,int,int);           //声明公有成员函数 void printproperty(string,int,int,int,int,int,int,int,int,int,int);              //声明公有成员函数 string name;int sex;int race;int work;int power,agility,phypower,clever,wisdom,life,magic;
};void  Gameproperty::printproperty(string name,int sex,int race,int work,int power,int agility,int phypower,int clever,int wisdom,int life,int magic)//定义公有成员函数  输出和保存该游戏角色的各项属性
{char fname[20];cout<<"请输入你想要的文件名:";cin>>fname;ofstream outfile(fname,ios::out);                               //打开你所输入名字的文件 cout<<"===================="<<endl;cout<<"姓名 "<<name<<endl;outfile<<"姓名  "<<name<<endl; cout<<"===================="<<endl;if(sex==0)                                                       //判断所选性别 {cout<<"性别  男性"<<endl;outfile<<"性别    男性"<<endl; }else{cout<<"性别    女性"<<endl;outfile<<"性别    女性"<<endl;} cout<<"===================="<<endl;switch(race)                                                    //判断所选种族 {case 0:{cout<<"种族  人类"<<endl;outfile<<"种族    人类"<<endl;break;} case 1:{cout<<"种族   精灵"<<endl;outfile<<"种族    精灵"<<endl;break;} case 2:{cout<<"种族   兽人"<<endl;outfile<<"种族    兽人"<<endl;break;} case 3:{cout<<"种族   矮人"<<endl;outfile<<"种族    矮人"<<endl;break;} case 4:{cout<<"种族   元素"<<endl;outfile<<"种族    元素"<<endl;break;} }cout<<"===================="<<endl;switch(work)                                                 //判断所选职业 {case 0:{cout<<"职业  狂战士"<<endl;outfile<<"职业   狂战士"<<endl;break;}case 1:{cout<<"职业   圣骑士"<<endl;outfile<<"职业   圣骑士"<<endl;break;}case 2:{cout<<"职业   刺客"<<endl;outfile<<"职业    刺客"<<endl;break;}case 3:{cout<<"职业    猎手"<<endl;outfile<<"职业    猎手"<<endl;break;}case 4:{cout<<"职业    祭司"<<endl;outfile<<"职业    祭司"<<endl;break;}case 5:{cout<<"职业    巫师"<<endl;outfile<<"职业    巫师"<<endl;break;}}cout<<"===================="<<endl;                              //输出各项属性并写入文件 cout<<"力量  "<<power<<endl;outfile<<"力量 "<<power<<endl; cout<<"===================="<<endl;cout<<"敏捷  "<<agility<<endl;outfile<<"敏捷   "<<agility<<endl;cout<<"===================="<<endl;cout<<"体力 "<<phypower<<endl;outfile<<"体力  "<<phypower<<endl;cout<<"===================="<<endl; cout<<"智力   "<<clever<<endl;outfile<<"智力    "<<clever<<endl;cout<<"===================="<<endl;cout<<"智慧  "<<wisdom<<endl;outfile<<"智慧    "<<wisdom<<endl;cout<<"===================="<<endl;cout<<"生命值 "<<life<<endl;outfile<<"生命值 "<<life<<endl;cout<<"===================="<<endl;cout<<"魔法值   "<<magic<<endl;outfile<<"魔法值    "<<magic<<endl;cout<<"===================="<<endl;outfile<<"===================="<<endl;cout<<"信息已存入《"<<fname<<"》文件中"<<endl; outfile.close();}void Gameproperty::getproperty(string name,int sex,int race,int work)        //定义公有成员函数 得到角色的各项属性值
{int power,agility,phypower,clever,wisdom,life,magic;switch(work)                                                           //通过职业来为角色的每项属性进行赋值 {case 0:{                               //力量,敏捷,体力,智力,智慧均是随机值,且和为100 power=rand()%3+37;                            //通过rand函数得到随机值 agility=rand()%3+18;phypower=rand()%3+28;clever=rand()%3+3;wisdom=100-power-agility-phypower-clever;break;}case 1:{power=rand()%3+23;agility=rand()%3+14;phypower=rand()%3+28;clever=rand()%3+19;wisdom=100-power-agility-phypower-clever;break;}case 2:{power=rand()%3+17;agility=rand()%3+34;phypower=rand()%3+18;clever=rand()%3+13;wisdom=100-power-agility-phypower-clever;break;}case 3:{power=rand()%3+14;agility=rand()%3+37;phypower=rand()%3+14;clever=rand()%3+8;wisdom=100-power-agility-phypower-clever;break;}case 4:{power=rand()%3+14;agility=rand()%3+17;phypower=rand()%3+14;clever=rand()%3+34;wisdom=100-power-agility-phypower-clever;break;}case 5:{power=rand()%3+8;agility=rand()%3+18;phypower=rand()%3+7;clever=rand()%3+18;wisdom=100-power-agility-phypower-clever;break;}}life=phypower*20;                                           //求生命值 magic=(clever+wisdom)*10;                                  //求魔法值 Gameproperty t2;                                         //定义对象t2 t2.printproperty(name,sex,race,work,power,agility,phypower,clever,wisdom,life,magic);          //调用t2的成员函数
//  printproperty(uname,sex,race,work,power,agility,phypower,clever,wisdom,life,magic);}int main()
{string name;int t=1;int sex,race,work;while(t){cout<<"请输入您游戏角色的姓名:";cin>>name;cout<<"请输入您游戏角色的性别(0男性,1女性):";cin>>sex;cout<<"请选择您游戏角色的种族(0人类,1精灵,2兽人,3矮人,4元素):";cin>>race;Game t3(name,sex,race);                work=t3.getwork(race);         //得到work Gameproperty t1;               //定义对象t1 t1.getproperty(name,sex,race,work);cout<<"是否满意该角色的所有信息(0满意,1不满意)?";cin>>t;}return 0;
}

该程序更有两大类Game和Gameproperty
其中Game类主要是获取角色的姓名、性别、种族和职业;他有一个结构函数Game(),和一个公有成员函数getwork(),由于不同的种族对职业的选择不同,所以该函数是用来通过种族来判断职业。
类Gameproperty主要用来生成游戏角色的属性值。其中公有成员函数getproperty()用来通过rand()函数来生成各属性值,并通过随机生成的属性值来计算出生命值和魔法值。还有公有成员函数printproperty()用来输出角色的全部信息并存入文件中,改文件的名字有自己输入决定。

C++实现游戏角色属性(包含文件写入)相关推荐

  1. 微信小游戏wx.getFileSystemManager文件写入

    const fs = wx.getFileSystemManager(); //获取全局唯一的文件管理器 var pathStr=wx.env.USER_DATA_PATH + "/myvi ...

  2. web漏洞(CSRF-SSRF-文件包含-文件解释-文件下载-目录遍历-sql注入-文件上传-反序列化-XSS-XXE-RCE-逻辑越权)

    1.CSRF(跨站请求伪造)(需要对方是在登录的情况下)--主要用于骗转账等等 原理:A在已经登录了银行的网站,并且此时去访问了B所构造的网页添加了特殊代码,A点击了B,由于A已经登录了,就造成了A直 ...

  3. python读文件操作-python文件操作读取文件写入文件

    读取文件 要使用文本文件中的信息,首先需要将信息读取到内存中.为此,你可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取. 读取整个文件 要读取文件,需要一个包含几行文本的文件.下面首先来创 ...

  4. python扫雷代码_谁说Python不能做游戏的?能做这些游戏,附赠所有游戏源码文件...

    Python编程语言的强大,几乎是众所周知的! 不仅能用来做web.爬虫.数据分析等,没想到还能用做这么多的游戏,实在令人惊讶不已. 那么,下面我给大家介绍一下几个用Python实现的各种游戏吧. 注 ...

  5. JAVA文件写入FileWriter

    JAVA文件写入FileWriter 导包import java.io.FileWriter创建构造方法public FileWrite(String filename),参数是文件的路径及文件名(默 ...

  6. 所属文件不可访问_日志文件写入失败(permission denied)

    用过Laravel的小伙伴一开始安装完框架后可能都遇到过daily 日志文件写入失败的问题,接下来我们就来详细说下日志文件写入失败的原因以及对应的解决方案. 在讲这个问题之前可能需要简单介绍下Linu ...

  7. 文件写入的6种方法,这种方法性能最好

    在 Java 中操作文件的方法本质上只有两种:字符流和字节流,而字节流和字符流的实现类又有很多,因此在文件写入时我们就可以选择各种各样的类来实现.我们本文就来盘点一下这些方法,顺便测试一下它们性能,以 ...

  8. ofstream的使用方法--超级精细。C++文件写入、读出函数(转)

    ofstream的使用方法 ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;   在C++中,有一个stream这个类,所有的I/O都以这个"流 ...

  9. m 文件 dll matlab 中调用_利用USO服务将特权文件写入武器化

    James Forshaw发现的DiagHub DLL loading技术已经非常有名了.每当你在Windows或一些第三方软件中发现SYSTEM权限的任意文件写漏洞时,你就可以用这一招来造成任意代码 ...

最新文章

  1. 皮卡丘为什么不进化_皮卡丘为啥不进化成雷丘?小智都暗示得这么明显皮卡丘还是拒绝了...
  2. 【Python】APScheduler定时任务
  3. 分布式系统原理 之4 Quorum 机制
  4. BigDecimal与Long、int之间的互换
  5. 无人机官方网站_无人机开发设计资料整理
  6. 小奇遐想 树状数组实现+容斥思想
  7. fastjson转换包含date类型属性的对象时报错com.alibaba.fastjson.JSONException: For input string 解决方法
  8. RK3288_Android7.1添加两个gpio的按键
  9. 升级qq群一直显示服务器失败怎么回事啊,QQ群创建失败是怎么回事,QQ群创建失败原因是什么...
  10. RSA的APT峰会会议纪要
  11. edge浏览器打开html文件路径被拆分,Edge浏览器显示网页排版错位
  12. Aladdin推出软件智能卡和一次性密码认证解决方案
  13. Windows cmd窗口的切换目录命令无法切换盘符
  14. 移远BC35-G配置网络连接阿里云MQTT发送数据
  15. Python语音信号特征-感知线性预测系数PLP
  16. DTC(Deep Temporal Clustering--Fully Unsupervised Learning of Time-Domain Features)论文理解
  17. python爬取电子书_python爬取计算机电子书(源码移步github)
  18. IT人员转行写小白文可以么?
  19. CTF日记之web题目(入门题目)
  20. matlab 虚数部分,MATLAB去掉一组数据中的虚数【多图】

热门文章

  1. 使用JWT和Spring Security保护REST API
  2. 外贸生产ERP管理软件丨汇信外贸软件
  3. 大数据辟谣:布洛芬用药不慎可能致死?如此标题党居心何在?
  4. kali初讲——Metasploit攻击ms17_010复现
  5. js 各种时间格式的转换
  6. MPI分布式计算模型
  7. 实现上面固定下面滚动效果
  8. 不得不写的AJ-Ministory
  9. CFLAGS、CXXFLAGS和LDFLAGS、LIBS和-L、-rpath、-rpath-link和LD_LIBRARY_PATH
  10. 力扣解法汇总2049-统计最高分的节点数目