C++ RPG游戏角色的创建
题目
几乎所有的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;
} //正确则跳出
else
cout << "请输入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;
} //正确则跳出
else
cout << "请输入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;
} //正确则跳出
else
cout << "请输入0到6来选择职业!\n";
}break;
case 1:
while (1)
{
cout <<"请选择您的职业(2刺客,3猎手,4祭司,5巫师):"; //精灵所选职业
cin>>get_profession;
if (get_profession>=2&&get_profession<6) //判断输入是否符合要求
{
break;
} //正确则跳出
else
cout << "请输入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;
} //正确则跳出
else
cout << "请根据括号中的数字来选择职业!\n";
}break;
case 3:
while (1)
{
cout << "请选择您的职业(0狂战士,1圣骑士,4祭司):";//矮人所选职业
cin>>get_profession;
if (get_profession==1||get_profession==4||get_profession==0) //判断输入是否符合要求
{
break;
} //正确则跳出
else
cout << "请根据括号中的数字来选择职业!\n";
}break;
case 4:
while (1)
{
cout << "请选择您的职业(4祭司,5巫师):"; //元素所选职业
cin>>get_profession;
if (get_profession==4||get_profession==5) //判断输入是否符合要求
{
break;
} //正确则跳出
else
cout << "请根据括号中的数字来选择职业!\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;
}
上一篇: 安装软件