RPG游戏角色的建立

1. 题目分析:
题目要求:本次题目是做一个RPG游戏角色的建立。游戏角色包含以下属性:姓名,性别,种族,职业,以及角色的力量、敏捷、体力、智力、智慧、生命值和魔法值。要求首先用户输入角色姓名,然后由用户选择角色性别,然后由用户选择种族,然后选择职业,然后自动分配力量、敏捷、体力、智力和智慧属性,并计算生命值和魔法值。
具体分析:创建的角色包含多个不同属性,需要用面对对象编程思想。建立包含角色属性的类,并且可以对这些属性变量进行具体的操作,角色的性别和种族均是由用户进行选择的,应注明选择标识,题目中每个种族选择职业时,有一定的约束条件,(譬如精灵的职业不允许时圣骑士和狂战士,那么当用户选择角色是精灵,选择职业时若选到的是圣骑士或者是狂战士,将会让其重新选择角色职业。)随机分配角色力量、敏捷、体力、智力和智慧属性的值。但是总和必须等于100.最后再计算角色的生命值和智慧值。(生命值=体力20。
魔法值=(智力+智慧)
10。)。
2 .算法分析
① C++建立类(包含角色的各个属性变量)。建立类role包含角色的姓名,性别,设置成员函数getrole()(输入角色姓名,对角色性别进行选择,选择标志schoice,值为1是女性,为2是男性,若用户输入了其他值,将重新进行性别选择;建立类type继承类role,包含角色的种族和职业属性。并设置了成员函数gettype()(对成员变量种族和职业进行赋值,对角色种族进行选择选择标志rchioce值为1~5之间的整数,当玩家输入其他值时将重新进行种族选择。当玩家选择某一种族时,接着会输出该种族可以选择的职业,随后玩家选择职业时,若选择了该种族不允许的职业,将重新进行职业选择。建立类attract继承类type包含角色的力量、敏捷、体力、智力和智慧属性,生命值和魔法值。运用随机函数rand()对各个属性进行赋值(为避免各个职业的技能各项值比例发生较大改变,所以随机生成的是最小值得变化量),当各项数值综合为100时,就得到当前创建角色属性的各项值。
② 将建立角色的各个信息存入到文件。C++在进行文件操作时,需要包含文件读写头文件,在c++中文件打开方式有ios::app(以追加方式打开文件)、ios::ate(文件打开后定位到文件尾)、ios::binary(以二进制方式打开文件)、ios::in(文件以输入方式打开(文件数据存到内存))、ios::out(文件以输出方打开(内存数据输入到文件))、ios::trunc(如果文件存在则将文件的长度设为0)。将数据读入到文件后关闭文件。
3. 程序实现

#include<iostream>
#include<fstream>
#include <time.h>
#include"string"//涵盖字符串函数
using namespace std;//声明命名空间
class role//定义包含姓名和性别基类
{public:
char name[50];
string sex;
int schoice;
void getrole()//输入当前对象的姓名和性别
{cout<<"请输入角色名"<<endl;
cin>>name;
cout<<"请选择角色性别(1-----女\t2----男)"<<endl;
cin>>schoice;switch(schoice)//进行性别选择{case 1:sex="女";break;case 2:sex="男";break;default:cout<<"输入错误,请重新选择"<<endl;break;}
};
};
class type:public role//种族类包含职业和种族
{public:
string racal;//种族
string job;//职业
int rchoice;
int jchoice;
void gettype()//给角色的种族和职业赋值
{getrole();
int tag=1,sign=1;
while(tag)
{
cout<<"请选择角色种族"<<"1.人类 2.精灵 3.兽人 4.矮人 5.元素"<<endl;
cin>>rchoice;
if(rchoice)//进行职业选择
{
switch(rchoice)//进行种族选择
{
case 1:{racal="人类";cout<<"可以选择职业:1.狂战士 2.圣骑士 3.刺客 4.猎手 5.祭司 6.巫师"<<endl;}break;
case 2:{racal="精灵";cout<<"可以选择职业:3.刺客 4.猎手 5.祭司 6.巫师"<<endl;}break;
case 3:{racal="兽人";cout<<"可以选择职业:1.狂战士 4.猎手 5.祭司"<<endl;}break;
case 4:{racal="矮人";cout<<"可以选择职业:1.狂战士 2.圣骑士 5.祭司"<<endl;}break;
case 5:{racal="元素";cout<<"可以选择职业:5.祭司 6.巫师"<<endl;}break;
}
tag=0;
}
else tag=1;
}
while(1)
{
cout<<"请进行职业选择1.狂战士 2.圣骑士 3.刺客 4.猎手 5.祭司 6.巫师"<<endl;
cin>>jchoice;
if(rchoice=1&&jchoice>0)//人类可以选择职业:1.狂战士 2.圣骑士 3.刺客 4.猎手 5.祭司 6.巫师
break;
else if(rchoice==2&&jchoice>2)//精灵可以选择职业:3.刺客 4.猎手 5.祭司 6.巫师
break;
else if((rchoice==3&&jchoice==1)||(rchoice==3&&jchoice==4)||rchoice==3&&jchoice==5)
break;//兽人可以选择职业1.狂战士 4.猎手 5.祭司
else if((rchoice==4&&jchoice==1)||(rchoice==4&&jchoice==2)||(rchoice==4&&jchoice==5))
break;//矮人可以选择职业1.狂战士 2.圣骑士 5.祭司
else if((rchoice==5&&jchoice==5)||(rchoice==5&&jchoice==6))
break;//元素可以选择职业5.祭司 6.巫师
else
cout<<"选择职业错误,请重新选择"<<endl;
}
while(sign)
{
switch(jchoice)//进行职业选择
{case 1:job="狂战士";sign=0;break;
case 2:job="圣骑士";sign=0;break;
case 3:job="刺客";sign=0;break;
case 4:job="猎手";sign=0;break;
case 5:job="祭司";sign=0;break;
case 6:job="巫师";sign=0;break;
default:cout<<"输入错误,请重新选择"<<endl;break;
}
}
};
};
class attract:public type//角色特性类
{public:
int strength;//力量
int quick;//敏捷
int body;//体力
int intell;//智力
int wisdom;//智慧
int life;//生命值
int magic;//魔法值
void getattract(int s,int q,int b,int i,int w)//给角色各个特性赋任意值
{
int sum=0;
srand((unsigned)time(NULL));
while(sum!=100)//各个特性综合为100
{strength=s+rand()%10;//调用随机函数
quick=q+rand()%10;
body=b+rand()%10;
intell=i+rand()%10;
wisdom=w+rand()%10;
sum=strength+quick+body+intell+wisdom;
}
life=body*20;//计算生命值
magic=(intell+wisdom)*10;//计算魔法值
cout<<"姓名      "<<name<<endl;;
cout<<"人物性别  "<<sex<<endl;
cout<<"种族      "<<racal<<endl;
cout<<"职业      "<<job<<endl;
cout<<"力量      "<<strength<<endl;
cout<<"敏捷      "<<quick<<endl;
cout<<"体力      "<<body<<endl;
cout<<"智力      "<<intell<<endl;
cout<<"智慧      "<<wisdom<<endl;
cout<<"生命值    "<<life<<endl;
cout<<"魔法值    "<<magic<<endl;
};
void getchoice()//给各项特性赋最小值
{gettype();
switch(jchoice)
{
case 1:getattract(40,20,30,5,5);break;//狂战士
case 2:getattract(25,15,30,20,10);break;//圣骑士
case 3:getattract(20,35,20,15,10);break;//刺客
case 4:getattract(15,40,15,10,20);break;//猎手
case 5:getattract(15,20,15,35,15);break;//祭司
case 6:getattract(10,20,10,20,40);break;//巫师
}
};
};
void main()
{attract a;//生成一个角色对象
ofstream p("message.txt",ios::app||ios::ate||ios::out);/*ios::app表示文件在打开后,在写入文件不会覆盖源文件中的内容*/
int singla=1;
int con;
while(singla)//定义循环用户满意则将建立角色信息存到文件中
{a.getchoice();
cout<<"是否满意你建立的对象1.满意,将建立角色信息存到文档中2.不满意,重新建立一个角色"<<endl;
cin>>con;
switch(con)
{case 1:{p<<" 姓名:"<<a.name<<" 性别:"<<a.sex<<"  种族:"<<a.racal<<" 职业:"<<a.job<<" 力量:"<<a.strength<<" 敏捷:"<<a.quick<<" 体力:"<<a.body<<" 智力:"<<a.intell<<" 智慧:"<<a.wisdom<<" 生命值:"<<a.life<<" 魔法值:"<<a.magic<<endl;singla=0;//写入文件结束循环p.close();//关闭文件
}       break;
case  2:break;}
}
}

4 .测试调试和运行结果
运行结果


测试结果
① 测试类role的成员函数getrole()

② 测试类type的成员函数gettype()



③ 测试类attract的成员函数getattract()和getchoice()



调试结果

5.实验总结
本次题目是做一个RPG游戏角色的建立。游戏角色包含以下属性:姓名,性别,种族,职业,以及角色的力量、敏捷、体力、智力、智慧、生命值和魔法值。要求首先用户输入角色姓名,然后由用户选择角色性别,然后由用户选择种族,然后选择职业,然后自动分配力量、敏捷、体力、智力和智慧属性,并计算生命值和魔法值。
此次实验用到了面向对象程序设计的方法,要求掌握面向对象设计七大原则,用的是c++面向对象编程,开始的想法是:由于创建的角色包含多个不同属性,需要用面向对象编程思想。建立包含角色属性的类,并且可以对这些属性变量进行具体的操作,角色的性别和种族均是由用户进行选择的,应注明选择标识,题目中每个种族选择职业时,有一定的约束条件,随机分配角色力量、敏捷、体力、智力和智慧属性的值。但是总和必须等于100.最后再计算角色的生命值和智慧值。
我在编程过程中遇到的困难有:c++很长时间没用了,对其头文件声明方法不太清楚,以至于头文件声明出现错误。经过翻阅c++书(谭浩强著《c++基础编程教程》)了解到:由系统提供的头文件不带后缀.h由用户自己编制的头文件可以后缀.h。在c++中可以用c语言中的头文件.h。c++读写文件方式与c不同:c++中有三个对文件进行操作的类①ifstream类,从istream中派生而来,用来支持从磁盘文件的输入。②ofstream类,从ostream中派生而来,用来支持向磁盘文件的输出。③fstream类,从iosream派生而来,支持磁盘文件的输入与输出。此外对磁盘文件的操作是通过文件流对象实现的不是cin或者cout.文件流对象是用文件流类来定义的。Ofstream p;调用文件流的成员函数open打开文件open(磁盘文件名,输入输出方式);在c++中文件打开方式有ios::app(以追加方式打开文件)、ios::ate(文件打开后定位到文件尾)、ios::binary(以二进制方式打开文件)、ios::in(文件以输入方式打开(文件数据存到内存))、ios::out(文件以输出方打开(内存数据输入到文件))、ios::trunc(如果文件存在则将文件的长度设为0)。将数据读入到文件后关闭文件。
通过这次实验我得到的感悟是:遇到困难时的心态要平和,冷静地去查找问题并解决问题。注意知识的总结和积累。最近,其实不止是本次程序实验带给我的收获,就是作为一个合格的程序员,要注意对知识的积累和知识体系的梳理,每隔一段时间就应该对自己近期的工作有个小结和反思,只有这样,才能不断进步。

RPG游戏角色的建立相关推荐

  1. Java创建RPG游戏角色

    ◆题目名称 创建RPG游戏角色 ◆题目分析 该程序需要用到有关类与对象的知识点,所以不能使用C语言来编写代码,这里我选择Java语言.本题目要求的游戏角色应有以下属性:名字.性别.种族.职业.力量.敏 ...

  2. RPG游戏角色生成器

    一,题目分析: 1. 题目:编写一个简化的创建游戏角色的程序: 2. 分析:要编写此程序,建立一个角色类,围绕角色类进行选择和保存等操作.单一职责原则将不同的职责分离到单独的类,每一个职责都是一个变化 ...

  3. C++ RPG游戏角色的创建

    题目 几乎所有的RPG游戏(一种源自<龙与地下城>的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色.本次上机要求编写一个简化的创建游戏角色的程序. 1.游戏角色应有的属性 本题目 ...

  4. python+pyqt5实现RPG游戏角色生成器

    游戏说明:输入姓名,选择性别,选择种族,职业,点击确定按钮,会生成各属性值,如果不满意,点击返回,重新选择. 首先准备一个保存下拉框选项数据的文件 rpgdict.py dictrace = {1:' ...

  5. 游戏设计与计算机,RPG游戏设计与实现-数学与计算机系.doc

    RPG游戏设计与实现-数学与计算机系 XX学院 毕业论文(设计) RPG游戏设计与实现 院 系 :数学与计算机系专业(班级):计算机科学与技术专业2班姓名:XXX学号:20084011023指导教师: ...

  6. 游戏理论研究四:RPG游戏

    游戏理论研究四(转)RPG游戏- - 作者:hitman     4.RPG游戏 RPG游戏 (角色扮演类游戏)无疑是最受欢迎的游戏类型.但很难对其进行确切定义 .本文采取用其性质或者说其构成要素来定 ...

  7. RPG游戏制作-02-游戏世界主角的诞生

    在RPG游戏中,有着各种各样的NPC(Non-Player Control),玩家可以操作主角与NPC进行交互,来获得情报,道具,装备等等.而NPC的概念比较广泛,从各种商人到宝箱再到空气墙,都可以认 ...

  8. 游戏理论研究四(转)RPG游戏

    4.RPG游戏 RPG游戏 (角色扮演类游戏)无疑是最受欢迎的游戏类型.但很难对其进行确切定义 .本文采取用其性质或者说其构成要素来定义其本身的方法,在阐述了下述问题之后, 对RPG游戏的定义问题也就 ...

  9. RPG游戏自定义角色

    一.实验内容 1.功能描述 几乎所有的RPG游戏(一种源自<龙与地下城>的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色.本次上机要求编写一个简化的创建游戏角色的程序. 2.游戏 ...

最新文章

  1. [转]Zookeeper入门看这篇就够了
  2. 前端学习(2847):css鼠标样式
  3. RatingBar的自定义
  4. 注册了Stack Overflow
  5. 高精度大数c++类模板 很好用
  6. 【机器学习】Andrew Ng——前言
  7. L3G4200D + ADXL345 卡尔曼滤波
  8. 迈克尔杰克逊全部专辑下载
  9. 利用soapUI获取freemarker的ftl文件模板
  10. Microsoft Lync2013客户端下载
  11. Composition API使用记录
  12. 微信公众账号调取用户昵称和用户头像
  13. 一北大毕业生的返乡报告:家乡面目全非 备感无力
  14. Bailian2713 肿瘤面积
  15. python手机屏幕自动点击代码_鼠标隔段时间自动点击屏幕
  16. 深入浅出的解释什么是IP地址、子网掩码、端口号、DNS、网关(初学者一定要看看)
  17. picker多选 vant_Vant picker 多级联动操作
  18. 【愚公系列】2023年02月 .NET CORE工具案例-Lunar日历转换
  19. JAVA mapper.map()_Java MapperFacade.map方法代码示例
  20. 导数的定义_____一元函数的求导公式

热门文章

  1. asp.net954-少儿英语图书销售与评价系统
  2. RHCOS(Red Hat Enterprise Linux CoreOS )简介
  3. ECharts实现数据可视化 “ 10分钟入门 “ 教程(超详细)
  4. knockoutjs data-bind 声明式绑定整理
  5. 左耳朵耗子-左耳听风-技术专栏
  6. vnc,vnc远程不了报错,解决方法
  7. 把虚拟机当服务器设置密码,VMware Workstation如何创建加密虚拟机
  8. Java答题卡识别系统
  9. SEO文章关键词一般布局在哪里?
  10. 音标1-2-3单元音中的长元音