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


1.游戏角色应有的属性
本题目要求的游戏角色应有以下属性:名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。
名字:不超过50个字符。
性别:可以选择男性和女性。
种族:一共可选五个种族,人类、精灵、兽人、矮人和元素。
职业:可选六种职业,狂战士、圣骑士、刺客、猎手、祭司和巫师。
其余属性均为整数。
本题目要求首先用户输入角色姓名,然后由用户选择角色性别,然后由用户选择种族,然后选择职业,然后自动分配力量、敏捷、体力、智力和智慧属性,并计算生命值和魔法值。
生命值=体力*20。
魔法值=(智力+智慧)*10。
2.职业限制
很多职业会限制某些种族选择,例如兽人不能就职圣骑士等等,种族和职业的限制表如下:
所以在要求用户选择职业时,输出信息里面只能有用户所选择种族可以就职的职业。
3.初始属性
本题目要求力量、敏捷、体力、智力和智慧要求是随机值(利用随机数函数来取得随机数),但是五项属性的总和应该是100,并且应该和职业相关。例如狂战士的体力和力量就要比较高,而巫师需要较高的智力,而祭司则需要较高的智慧。各职业初始属性的大致比例应遵从下表:

例如,前面示意图中的祭司的初始属性,大致满足该比例,但是应该是随机的。
然后利用属性值计算生命值和魔法值。
4.显示信息
最后向用户显示该角色的所有信息,然后询问用户是否满意,如用户不满意则重新创建,若用户满意则程序结束,并将用户创建角色的相关信息写入文件保存。

题目分析

1.需要创建两个类第一个类存放要选择角色的性别,职业等等,第二个类存放人的选择。
2.需要第一类当作基类, 第二个类继承第一个类
3.要生成角色"力量",“敏捷”,“体力”,“智力”,“智慧”,“生命值”,"魔法值"需要按照初始属性表大概比例随机生成。
4.当玩家确认时,可以将生成的数据存入文件中。

相关算法:

double random(double start,double end) //绝对随机数生成算法
{
return start + (end - start) * rand() / (RAND_MAX + 1.0);
}

按照6种职业属性比例求机属性分配的比例
求6种职业的最大公约数,只有两种,5和10,对于这两种结果,随机生成4-6或者9-11的随机数,再用100逐个减去,最后剩下100中的就是最后一个属性。

void get_choice::randoms() //力量、敏捷、体力、智力和智慧比例分配
{
int temp=100;
int n;
if(get_profession>4) //第6个职业的属性比例最大公约数为10
{
n=10;
}
else{
n=5; //前4个职业的属性比例最大公约数为5
}
srand((unsigned)time(NULL));
for(int i=0;i<4;i++)
{
a[i]=random(n-1,n+1)*profession_attribute[get_profession][i];//随机生成与最大公约数相近的数(n-1,n+1),乘以比例。
temp-=a[i]; //100-生成的属性
}
a[4]=temp;
a[5]=a[2]*20; //生命值
a[6]=(a[3]+a[4])*10; //魔法值
}
####运行截图

代码

/*
title:RPG角色生成器
Author:  Q
Date:2019/4/17
具体功能:
一个角色生成程序,可自己输入姓名,性别,种族,职业
随机生成符合角色的属性
*/
#include<iostream>
#include<ctime>
#include<cstdlib>
#include<fstream>
using namespace std;double random(double start,double end)       //绝对随机数生成算法
{return start + (end - start) * rand() / (RAND_MAX + 1.0);
}class person
{public:char sex[2][20]={ "男性","女性" };char race[5][20]={ "人类","精灵","兽人","矮人","元素" };char profession[6][20]={ "狂战士","圣骑士","刺客","猎手","祭司","巫师" };};
class get_choice :public person
{protected:char name[50];int get_sex;int get_race;int get_profession;int profession_attribute[6][5]={{8,4,6,1,1,},{5,3,6,4,2,},{4,7,4,3,2,},{3,8,3,2,4,},{3,4,3,7,3,},{1,2,1,2,4}};int a[7];char b[7][20]={"力量","敏捷","体力","智力","智慧","生命值","魔法值"};public:void input_name();int input_sex();int input_race();int input_profession();void randoms();void display();friend void output_file(get_choice &get);
};
void get_choice::input_name()
{cout << "请输入您游戏角色的姓名:";cin >>name;
}
int get_choice::input_sex()
{while (1){cout << "请选择您游戏角色的性别("<<"0 "<<sex[0]<<","<<"1 "<<sex[1]<<"):";cin >>get_sex;if (get_sex == 0 ||get_sex == 1)            //判断性别输入是否正确{break;}                                            //正确则跳出elsecout << "请输入0或1来选择性别!\n";   }return get_sex;
}
int get_choice::input_race()
{while (1){cout << "请选择您游戏角色的种族(";for(int i=0;i<5;i++){cout<<i<<" "<<race[i]<<" "; } cout<<")";cin>>get_race;if (get_race>=0&&get_race<5)              //判断输入是否符合要求{break;}                                            //正确则跳出elsecout << "请输入0到5来选择种族!\n";    }return get_race;
}
int get_choice::input_profession()
{switch(get_race){case 0:while (1){cout << "请选择您游戏角色的职业(";    //人类可选职业 for(int i=0;i<6;i++){cout<<i<<" "<<profession[i]<<" "; } cout<<")";cin>>get_profession;if (get_profession>=0&&get_profession<6)             //判断输入是否符合要求{break;}                                            //正确则跳出elsecout << "请输入0到6来选择职业!\n";    }break;case 1:while (1){cout <<"请选择您的职业(2刺客,3猎手,4祭司,5巫师):"; //精灵所选职业cin>>get_profession;if (get_profession>=2&&get_profession<6)              //判断输入是否符合要求{break;}                                            //正确则跳出elsecout << "请输入2到5来选择职业!\n";   }break;case 2:while (1){cout << "请选择您的职业(0狂战士,3猎手,4祭司):"; //兽人所选职业cin>>get_profession;if (get_profession==2||get_profession==4||get_profession==0)              //判断输入是否符合要求{break;}                                            //正确则跳出elsecout << "请根据括号中的数字来选择职业!\n";  }break;case 3:while (1){cout << "请选择您的职业(0狂战士,1圣骑士,4祭司):";//矮人所选职业cin>>get_profession;if (get_profession==1||get_profession==4||get_profession==0)                //判断输入是否符合要求{break;}                                            //正确则跳出elsecout << "请根据括号中的数字来选择职业!\n";    }break; case 4:while (1){cout << "请选择您的职业(4祭司,5巫师):"; //元素所选职业cin>>get_profession;if (get_profession==4||get_profession==5)                //判断输入是否符合要求{break;}                                            //正确则跳出elsecout << "请根据括号中的数字来选择职业!\n";    }break; return get_profession;}
}void get_choice::display()
{cout<<"======================="<<endl;cout<<name<<endl;cout<<"======================="<<endl;cout<<sex[get_sex]<<endl;cout<<"======================="<<endl;cout<<race[get_race]<<endl;cout<<"======================="<<endl;cout<<profession[get_profession]<<endl;}
void get_choice::randoms()         //力量、敏捷、体力、智力和智慧比例分配
{int temp=100;int n;if(get_profession>4){n=10;}else{n=5;}srand((unsigned)time(NULL));for(int i=0;i<4;i++){a[i]=random(n-1,n+1)*profession_attribute[get_profession][i];temp-=a[i];}a[4]=temp;a[5]=a[2]*20;a[6]=(a[3]+a[4])*10;cout<<"======================="<<endl;for(int j=0;j<7;j++){cout<<b[j]<<":"<<a[j]<<endl;cout<<"======================="<<endl;} }
void output_file(get_choice &get)
{ofstream out("人物创建结果.txt");out<< "======================="<<endl;out<< "姓名 : " << get.name << endl;out<< "======================="<<endl;out<< "性别 : " << get.sex[get.get_sex]<<endl;out<< "======================="<<endl;out<< "种族 : " << get.race[get.get_race]<<endl;out<< "======================="<<endl;out<< "职业 : " <<get.profession[get.get_profession]<<endl;out<< "======================="<<endl;out<< "力量 : " << get.a[0] << endl;out<< "======================="<<endl;out<< "敏捷 : " << get.a[1] << endl;out<< "======================="<<endl;out<< "体力 :  " << get.a[2] << endl;out<< "======================="<<endl;out<< "智力 : " << get.a[3] << endl;out<< "======================="<<endl;out<< "智慧 : " << get.a[4] << endl;out<< "======================="<<endl;out<< "生命值 : " << get.a[5] << endl;out<< "======================="<<endl;out<< "法力值 : " << get.a[6]<< endl;out<< "======================="<<endl;
}
int main()
{int n,k=1;get_choice get;do{get.input_name();get.input_sex();get.input_race();get.input_profession();get.display();get.randoms();while(1){cout<<"请问对创建的人物属性还满意吗?按 0 确认,按 1 重新创建!"<<endl;cin>>n;if(n!=0&&n!=1){cout<<"输入错误!"<<endl;continue;}else{break;}}}while(n!=0);output_file(get);return 0;
}

C++ RPG游戏角色的创建相关推荐

  1. Java创建RPG游戏角色

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

  2. RPG游戏角色的建立

    RPG游戏角色的建立 1. 题目分析: 题目要求:本次题目是做一个RPG游戏角色的建立.游戏角色包含以下属性:姓名,性别,种族,职业,以及角色的力量.敏捷.体力.智力.智慧.生命值和魔法值.要求首先用 ...

  3. RPG游戏角色生成器

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

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

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

  5. 只需一张自拍,网易伏羲用这种方法直接生成「个人专属」游戏角色

    选自:arXiv 作者:Tianyang Shi等 参与:魔王 来源:机器之心(ID:almosthuman2014) 角色扮演游戏允许玩家挑选自己喜欢的角色或定制角色外观,但这一过程比较麻烦.那么, ...

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

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

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

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

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

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

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

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

最新文章

  1. 自定义leftBarButtonItem的button
  2. Luogu P2619 [国家集训队2]Tree I 凸优化,wqs二分
  3. 【面试招聘】聊聊读研究生应该怎么权衡offer的选择:适合选择恐惧症
  4. 发那科机器人控制柜示教器不通电_FANUC发那科工业机器人本地自动运行的设置方式...
  5. java进阶之路学习笔记
  6. 5.5 关于数据的问题
  7. 将某字符串切割成阵列并排序列出
  8. java中使用nextLine(); 没有输入就自动跳过的问题?
  9. 视频、网络传输速率科普
  10. STM32 硬件I2C读写AT24C02/08
  11. 微软拼音变成繁体,如何修改为简体
  12. Latex中斜线表头的制作方法
  13. 编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音,可以弹奏的乐器包括二胡、钢琴和琵琶。
  14. Web前端开发必备网站
  15. Python爬虫问题汇总(持续更新)
  16. threejs导入简单地图模型
  17. 大数据征信的应用和启示:ZestFinance的基于大数据的信用评估技术
  18. 《揭秘跨境电商》读书笔记
  19. Objective-C Blocks Caveat
  20. 读书笔记《硬件十万个为什么——开发流程篇》

热门文章

  1. 阿里云虚拟主机使用教程
  2. 猜数字游戏python程序_Python猜数游戏,程序随机生成一个0-100的数,猜对后退出【实例源码】...
  3. 左耳朵耗子-左耳听风-技术专栏
  4. 跟我学Kafka之Controller控制器详解(一)
  5. Tensorflow声纹识别说话人识别
  6. java SWT:最有效的layout方法Control.requestLayout()
  7. 下载Vivado并获取免费License
  8. VSCode通过SSH远程连接虚拟机并配置SpringBoot开发环境
  9. httpd: Could not reliably determine the server's fully qualified domain name
  10. 超级干货 :一文读懂数据可视化