RPG游戏角色属性简单的设置C++

一.题目要求
1.游戏角色应有的属性
本题目要求的游戏角色应有以下属性:名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。
名字:不超过50个字符。
性别:可以选择男性和女性。
种族:一共可选五个种族,人类、精灵、兽人、矮人和元素。
职业:可选六种职业,狂战士、圣骑士、刺客、猎手、祭司和巫师。
其余属性均为整数。
本题目要求首先用户输入角色姓名,然后由用户选择角色性别,然后由用户选择种族,然后选择职业,然后自动分配力量、敏捷、体力、智力和智慧属性,并计算生命值和魔法值。
生命值=体力*20。
魔法值=(智力+智慧)*10。
2.职业限制
很多职业会限制某些种族选择,例如兽人不能就职圣骑士等等,种族和职业的限制表如下:在这里插入图片描述

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

二.题目分析
运用多个switch语句,对输入的游戏角色的信息进行判断,并将信息赋给相对应字符串。
在这里插入图片描述

在不同种族的职业选择方面,首先还是用switch语句,对种族的进行判断,对不同的case的操作是:不同的种族显示相对应的职业。
在这里插入图片描述
在力量,敏捷,体力,智力,智慧的赋值,先生成合适的随机数,然后用switch语句,对职业进行判断,对不同的case的操作是:不同的职业赋值不同范围的随机数。
在这里插入图片描述
三.流程图
在这里插入图片描述
代码:

#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
using namespace std;
class Initial
{public:
void display();         //显示角色信息
void file();            //保存信息到文件中
void getname();         //获取角色的名字和性别
void getrace();         //获取角色的种族,职业,并对角色各项基础属性赋值
char name[10];
char *race2,*profession2,*sex2;
int race,profession,sex,power,agility,physical,zhili,zhihui,life,magic;

};
void Initial::getname(){
	

    cout<<"请输入您游戏角色的姓名"<<endl;
 	cin>>name;
    cout<<"请输入您游戏角色的性别(0:男性 1:女性)"<<endl;
	cin>>sex;
	switch(sex){
	case 0:sex2="男性";break;
	case 1:sex2="女性";break;
}
};

void Initial::getrace(){


	cout<<"请输入您游戏角色的种族(0:人类 1:精灵 2:兽人 3:矮人 4:元素 )"<<endl;
	cin>>race;
	switch(race){
	case 0:race2="人类";  cout << "请输入您的职业1.狂战士 2.圣骑士 3.刺客 4.猎手 5.祭司 6.巫师" << endl;cin>>profession; break;
	case 1:race2="精灵";  cout << "3.刺客 4.猎手 5.祭司 6.巫师" << endl;cin>>profession;break;
	case 2:race2="兽人";  cout << "1.狂战士 4.猎手 5.祭司 " << endl;cin>>profession;break;
	case 3:race2="矮人";  cout << "1.狂战士 2.圣骑士 5.祭司 " << endl;cin>>profession;break;
	case 4:race2="元素";  cout << "5.祭司 6.巫师" << endl;cin>>profession;break;
}

switch(profession){
	case 1:profession2="狂战士";break;
	case 2:profession2="圣骑士";break;
	case 3:profession2="刺客";break;
	case 4:profession2="猎手";break;
	case 5:profession2="祭司";break;
	case 6:profession2="巫师";break;
	}
	srand((unsigned)time(NULL));
	int a,b,c,d,e;
      a=rand()%11+35;    //35--45
      b=rand()%11+25;    //25--35
      c=rand()%11+15;    //15--25
      d=rand()%11+5;     //5 --15
      e=rand()%11+10;    //10--20

switch(profession){
	case 1:power=a;agility=c;physical=b;zhili=d;zhihui=d;break; //狂战士
	case 2:power=b;agility=e;physical=b;zhili=c;zhihui=d;break;  //圣骑士
	case 3:power=b;agility=a;physical=c;zhili=e;zhihui=d;break;  //刺客
	case 4:power=c;agility=a;physical=b;zhili=e;zhihui=b;break;  //猎手
	case 5:power=e;agility=c;physical=e;zhili=a;zhihui=e;break;  //祭司
	case 6:power=d;agility=c;physical=d;zhili=c;zhihui=a;break;  //巫师


}
      life=physical*20;
      magic=(zhili+zhihui)*10;
};


void Initial::display(){
cout<<"============================="<<endl;
cout<<"姓名             "<<name<<endl;
cout<<"============================="<<endl;
cout<<"性别             "<<sex2<<endl;
cout<<"============================="<<endl;
cout<<"种族             "<<race2<<endl;
cout<<"============================="<<endl;
cout<<"职业             "<<profession2<<endl;
cout<<"============================="<<endl;
cout<<"力量             "<<power<<endl;
cout<<"============================="<<endl;
cout<<"敏捷             "<<agility<<endl;
cout<<"============================="<<endl;
cout<<"体力             "<<physical<<endl;
cout<<"============================="<<endl;
cout<<"智力             "<<zhili<<endl;
cout<<"============================="<<endl;
cout<<"智慧             "<<zhihui<<endl;	
cout<<"============================="<<endl;
cout<<"生命值           "<<life<<endl;	
cout<<"============================="<<endl;
cout<<"魔法值           "<<magic<<endl;	


}
void Initial::file(){
		FILE *fp = fopen("人物初始化.txt", "w");

    {
        //写入数据
fprintf(fp, "姓名        %s\n",name );
fprintf(fp, "性别        %s\n",sex2 );
fprintf(fp, "种族        %s\n",race2);
fprintf(fp, "职业        %s\n",profession2 );
fprintf(fp, "力量        %d\n",power);
fprintf(fp, "敏捷        %d\n",agility );
fprintf(fp, "体力        %d\n",physical);
fprintf(fp, "智力        %d\n",zhili);
fprintf(fp, "智慧        %d\n",zhihui );
fprintf(fp, "生命值      %d\n",life );
fprintf(fp, "魔力值      %d\n",magic );
    }
  
   fclose(fp);	  //关闭文件 
   cout<<"保存角色成功"<<endl;
}

void main()
{   int n;
	Initial t0;
    loop:
	t0.getname();
	t0.getrace();
	t0.display();
	cout<<"对生成的角色是否满意(0.满意 1.不满意)"<<endl;
	cin>>n;
	switch(n){
	case 0:t0.file();break;     //调用file()函数,保存信息
	case 1:goto loop;           //返回标记处,对角色重新定义
	}
	
}

代码测试:
不满意角色设定,进行重新的设定并保存新设定的属性信息到文件中。
在这里插入图片描述
在这里插入图片描述
选择兽人,在职业只显示狂战士,猎手,祭祀。
在这里插入图片描述
在这里插入图片描述

问题 :角色的力量,敏捷,体力,智力,智慧五项属性之和不为题目要求的100.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值