C++ RPG创建游戏角色

创建游戏角色```

(1).功能描述
几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。本次上机要求编写一个简化的创建游戏角色的程序。
(2).游戏角色应有的属性
本题目要求的游戏角色应有以下属性:名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。
名字:不超过50个字符。
性别:可以选择男性和女性。
种族:一共可选五个种族,人类、精灵、兽人、矮人和元素。
职业:可选六种职业,狂战士、圣骑士、刺客、猎手、祭司和巫师。
其余属性均为整数。
本题目要求首先用户输入角色姓名,然后由用户选择角色性别,然后由用户选择种族,然后选择职业,然后自动分配力量、敏捷、体力、智力和智慧属性,并计算生命值和魔法值。
生命值=体力*20。
魔法值=(智力+智慧)*10。
(3).职业限制
很多职业会限制某些种族选择,例如兽人不能就职圣骑士等等,所以在要求用户选择职业时,输出信息里面只能有用户所选择种族可以就职的职业。
(4).初始属性
本题目要求力量、敏捷、体力、智力和智慧要求是随机值(利用随机数函数来取得随机数),但是五项属性的总和应该是100,并且应该和职业相关。例如狂战士的体力和力量就要比较高,而巫师需要较高的智力,而祭司则需要较高的智慧。初始属性大致满足该比例,但是应该是随机的。
然后利用属性值计算生命值和魔法值。
(5).显示信息
最后向用户显示该角色的所有信息,然后询问用户是否满意,如用户不满意则重新创建,若用户满意则程序结束,并将用户创建角色的相关信息写入文件保存。

程序实现

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
class Role//角色类
{private:
    char name[50];//角色姓名
	char sex[9];//角色性别
	char nation[50];//角色种族
	char job[50];//角色职业
	int power;//力量
	int agile;//敏捷
	int spirit;//体力
	int IQ;//智力
	int wit;//智慧
	int HP;//生命值
	int MP;//魔法值
public:	
	void getname();//输入姓名
	void getsex();//选择性别
	void getnation();//选择种族
	void getjob(Role r);//选择职业
	void getattribut(Role r);//赋予角色属性
	void display();//输出角色信息
	void writefile();//向文件中写入角色信息
};
//输入姓名
void Role::getname()
{
	printf("请输入您游戏角色的姓名:");
	scanf("%s",&name);
}
//选择性别
void Role::getsex()
{
	int s;
	int t=1;//防止用户输入性别时出错	
	while(t)
	{
		printf("请输入您游戏角色的性别(0男性,1女性):");
		scanf("%d",&s);
		if(s==0) {strcpy(sex,"男性");t=0;}
		else if(s==1) {strcpy(sex,"女性");t=0;}
		else printf("输入错误,请输入0或1!\n");
	}	
}
//选择种族
void Role::getnation()
{
	int n;
	int t=1;//防止用户输入种族时出错	
	while(t)
	{
		printf("请输入您游戏角色的种族(0人类,1精灵,2兽人,3矮人,4元素):");
		scanf("%d",&n);
		if(n==0) {strcpy(nation,"人类");t=0;}
		else if(n==1) {strcpy(nation,"精灵");t=0;}
		else if(n==2) {strcpy(nation,"兽人");t=0;}
		else if(n==3) {strcpy(nation,"矮人");t=0;}
		else if(n==4) {strcpy(nation,"元素");t=0;}
		else printf("输入错误,请输入0、1、2、3或4!\n");
	}	
}
//选择职业
void Role::getjob(Role role)
{
	int j;
	if(strcmp(role.nation,"人类")==0)//人类职业限制
	{
		printf("请选择您的职业(0狂战士,1圣骑士,2刺客,3猎手,4祭司,5巫师):");
		scanf("%d",&j);
		if(j==0) strcpy(job,"狂战士");
		if(j==1) strcpy(job,"圣骑士");
		if(j==2) strcpy(job,"刺客");
		if(j==3) strcpy(job,"猎手");
		if(j==4) strcpy(job,"祭司");
		if(j==5) strcpy(job,"巫师");
	}
	if(strcmp(role.nation,"精灵")==0)//精灵职业限制
	{
		printf("请选择您的职业(0刺客,1猎手,2祭司,3巫师):");
		scanf("%d",&j);
		if(j==0) strcpy(job,"刺客");
		if(j==1) strcpy(job,"猎手");
		if(j==2) strcpy(job,"祭司");
		if(j==3) strcpy(job,"巫师");
	}
	if(strcmp(role.nation,"兽人")==0)//兽人职业限制
	{
		printf("请选择您的职业(0狂战士,1猎手,2祭司):");
		scanf("%d",&j);
		if(j==0) strcpy(job,"狂战士");
		if(j==1) strcpy(job,"猎手");
		if(j==2) strcpy(job,"祭司");
	}
	if(strcmp(role.nation,"矮人")==0)//矮人职业限制
	{
		printf("请选择您的职业(0狂战士,1圣骑士,2祭司):");
		scanf("%d",&j);
		if(j==0) strcpy(job,"狂战士");
		if(j==1) strcpy(job,"圣骑士");
		if(j==2) strcpy(job,"祭司");
	}
	if(strcmp(role.nation,"元素")==0)//元素职业限制
	{
		printf("请选择您的职业(0祭司,1巫师):");
		scanf("%d",&j);
		if(j==0) strcpy(job,"祭司");
		if(j==1) strcpy(job,"巫师");
	}
}
//赋予角色属性
void Role::getattribut(Role role)
{
	int t=1;
	if(strcmp(role.job,"狂战士")==0)//狂战士属性限制
	{
		while(t)
		{
			srand((unsigned)time(NULL));
			power=rand()%5+38;//力量数值在38~42中
			agile=rand()%5+18;//敏捷数值在18~22中
			spirit=rand()%5+28;//体力数值在28~32中
			IQ=rand()%5+3;//智力数值在3~7中
			wit=rand()%5+3;//智慧数值在3~7中
			if(power+agile+spirit+IQ+wit==100) t=0;
		}		
	}
	if(strcmp(role.job,"圣骑士")==0)//圣骑士属性限制
	{
		while(t)
		{
			srand((unsigned)time(NULL));
			power=rand()%5+23;//力量数值在23~27中
			agile=rand()%5+13;//敏捷数值在13~17中
			spirit=rand()%5+28;//体力数值在28~32中
			IQ=rand()%5+18;//智力数值在18~22中
			wit=rand()%5+8;//智慧数值在8~12中
			if(power+agile+spirit+IQ+wit==100) t=0;
		}
	}
	if(strcmp(role.job,"刺客")==0)//刺客属性限制
	{
		while(t)
		{
			srand((unsigned)time(NULL));
			power=rand()%5+18;//力量数值在18~22中
			agile=rand()%5+33;//敏捷数值在33~37中
			spirit=rand()%5+18;//体力数值在18~22中
			IQ=rand()%5+13;//智力数值在13~17中
			wit=rand()%5+8;//智慧数值在8~12中
			if(power+agile+spirit+IQ+wit==100) t=0;
		}
	}
	if(strcmp(role.job,"猎手")==0)//猎手属性限制
	{
		while(t)
		{
			srand((unsigned)time(NULL));
			power=rand()%5+13;//力量数值在13~17中
			agile=rand()%5+38;//敏捷数值在38~42中
			spirit=rand()%5+13;//体力数值在13~17中
			IQ=rand()%5+8;//智力数值在8~12中
			wit=rand()%5+18;//智慧数值在18~22中
			if(power+agile+spirit+IQ+wit==100) t=0;
		}
	}
	if(strcmp(role.job,"祭司")==0)//祭司属性限制
	{
		while(t)
		{
			srand((unsigned)time(NULL));
			power=rand()%5+13;//力量数值在13~17中
			agile=rand()%5+18;//敏捷数值在18~22中
			spirit=rand()%5+13;//体力数值在13~17中
			IQ=rand()%5+33;//智力数值在33~37中
			wit=rand()%5+13;//智慧数值在13~17中
			if(power+agile+spirit+IQ+wit==100) t=0;
		}
	}
	if(strcmp(role.job,"巫师")==0)//巫师属性限制
	{
		while(t)
		{
			srand((unsigned)time(NULL));
			power=rand()%5+8;//力量数值在8~12中
			agile=rand()%5+18;//敏捷数值在18~22中
			spirit=rand()%5+8;//体力数值在8~12中
			IQ=rand()%5+18;//智力数值在18~22中
			wit=rand()%5+38;//智慧数值在38~42中
			if(power+agile+spirit+IQ+wit==100) t=0;
		}
	}
	HP=spirit*20;
	MP=(IQ+wit)*20;
}
//输出角色信息
void Role::display()
{
	printf("===============================\n");
	printf("姓名         %s\n",name);
	printf("===============================\n");
	printf("性别         %s\n",sex);
	printf("===============================\n");
	printf("种族         %s\n",nation);
	printf("===============================\n");
	printf("职业         %s\n",job);
	printf("===============================\n");
	printf("力量         %d\n",power);
	printf("===============================\n");
	printf("敏捷         %d\n",agile);
	printf("===============================\n");
	printf("体力         %d\n",spirit);
	printf("===============================\n");
	printf("智力         %d\n",IQ);
	printf("===============================\n");
	printf("智慧         %d\n",wit);
	printf("===============================\n");
	printf("生命值       %d\n",HP);
	printf("===============================\n");
	printf("魔法值       %d\n",MP);
	printf("===============================\n");
}
//将角色信息写入文件中
void Role::writefile()
{
	FILE *fp;
	fp=fopen("role.txt","w");
    if(!fp)
    {
		printf("\n打开文件role.txt失败!");
    }
    //向文件中读取角色信息
	fprintf(fp,"角色信息:");
	fprintf(fp,"\n姓名      %s",name);
	fprintf(fp,"\n性别      %s",sex);
	fprintf(fp,"\n种族      %s",nation);
	fprintf(fp,"\n职业      %s",job);
	fprintf(fp,"\n力量      %d",power);
	fprintf(fp,"\n敏捷      %d",agile);
	fprintf(fp,"\n体力      %d",spirit);
	fprintf(fp,"\n智力      %d",IQ);
	fprintf(fp,"\n智慧      %d",wit);
	fprintf(fp,"\n生命值    %d",HP);
	fprintf(fp,"\n魔法值    %d",MP);
    printf("\n");
    fclose(fp);
	printf("角色信息已写入文件中\n");
}
int main()
{
	Role r;
	int a;//判断用户是否满意角色信息
	int t=1;//判断角色是否需要重建
	while(t)
	{
		r.getname();
		r.getsex();
		r.getnation();
		r.getjob(r);
		r.getattribut(r);
		r.display();
		printf("是否满意此次创建的角色(满意选0,不满意选1)?\n");
		scanf("%d",&a);
		if(a==0)
		{
			t=0;
			r.writefile();
		}
	}
	return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值