第四章上机作业

一.实验目的及内容
目的:
1.掌握面向对象程序设计的方法,明确类与对象的概念,掌握面向对象设计七大原则;
2.掌握常见的设计模式以及类图的描述。
内容:
1.功能描述
2.游戏角色应有的属性
3.职业限制
4.初始属性
5.显示信息
注:具体实验内容见《第四章上机》
二.实验分析
本游戏为一个面向对象的游戏,函数部分分为三个部分:
1.输入姓名和性别并对其进行判断,看是否合理;
2.选择种族和职业并对其进行判断,看是否合理;
3.利用随机函数生成属性(力量,敏捷,体力,智力,智慧),由此计算出生命值和魔法值
三.类图
在这里插入图片描述
在这里插入图片描述
四.运行结果
在这里插入图片描述
五.个人总结
这次的上机作业目的是让我们学会使用UML的类图结构设计,面向对象设计的7大原则,使用适合的设计模式。我之前写C++程序的时候都是把所有的东西放在一个类中,然后在主函数中调用类里面的函数等。其实我这次刚,开始也是这样写的,写到一半我发现破坏了规则,即对于一个类而言,应该仅有一个引起它变化的原因,如果一个类承担的职责过多,就会容易遭到破坏。
另外这次的题目就主要用到了随机数的生成,这个在前几次的作业中涉及到了,唯一改变的就是随机数的生成是有条件的,所以也不是很难。
说到底,这次的程序写起来也不难,但是要注意的就是要遵循面向对象设计的7大原则。
六.源代码

#include<iostream>
#include<cstdlib>
#include<ctime>
#include<cmath>
using namespace std;

int getSex();	//输入性别
int getRace();	//输入种族
int getOccupation(int);	//输入职业
void Attribute(int occupation);	//输出属性
char Isex[2][50]={"男","女"};
char Irace[5][50]={"人类","精灵","兽人","矮人","元素"};
char Ioccupation[6][50]={"狂战士","圣骑士","刺客","猎手","祭司","巫师"};

//类1:姓名和角色 
class Base   
{  
protected:  
    char name[50]; //限制姓名的长度  
    int sex;       //性别
    int sex_choice;  
public:  
    void getBase();  
    friend class Output;    //友元类,输出角色信息  
    //输入姓名及其处理
    void judge_name(string name){
		int length=name.size();
		if(length>50)
		{
			cout<<"请输入合理长度的姓名!"<<endl;
			exit(1);
		}
	}
}; 

//角色的种族、职业  
class Race 
{  
protected:  
    char name[50];  
    int sex;  
    int sex_choice;  
    int race;  
    int occupation;  
    int race_choice;  
public:  
    void getBase();  
    friend class Output;    //友元类,输出角色信息   
    void getRace();  
};  

//输入性别并对其处理
int getSex()  
{
	int sex;
	cout<<"请选择您游戏角色的性别(0男性,1女性):";
	cin>>sex;
	while(1)
	{
		if (sex==0||sex==1)  
			break;           
		else
			cout<<"输入错误,请重新输入!\n";
		    break;
	}
	return sex;
}

//种族
int getRace()  
{
	int race;
	cout<<"请选择您游戏角色的种族(0人类,1精灵,2兽人,3矮人,4元素):";
	cin>>race;
	while(1)
	{
	if (race>=0&&race<=4) 
			break;			   
		else
			cout<<"输入错误,请重新输入!";   
		    break;
	}
	return race;
}

//职业
int getOccupation(int race)   
{
	int occupation;
	switch (race)
	{
	case 0:
		while (1)
		{
		cout<<"请选择您的职业(0狂战士,1圣骑士,2刺客,3猎手,4祭司,5巫师)"; 
		cin>>occupation;
		if (occupation>=0&&occupation<=5)
			break;
		else
		    cout<<"输入错误,请重新输入!\n";
		}break;
	case 1:
		while (1)
		{
		cout<<"请选择您的职业(2刺客,3猎手,4祭司,5巫师)"; 
		cin>>occupation;
		if (occupation>=2&&occupation<=5)
			break;
		else
			cout<<"输入错误,请重新输入!\n";
		}break;
	case 2:
		while (1)
		{
		cout<<"请选择您的职业(0狂战士,3猎手,4祭司,)";  
		cin>>occupation;
		if (occupation==0||occupation==3||occupation==4)
			break;
		else
			cout<<"输入错误,请重新输入!\n";
		}break;
	case 3:
		while (1)
		{
		cout<<"请选择您的职业(0狂战士,1圣骑士,4祭司,)";  
		cin>>occupation;
		if (occupation==0||occupation==1||occupation==4)
			break;
		else
			cout<<"输入错误,请重新输入!\n";
		}break;
	case 4:while (1)
		{
		cout<<"请选择您的职业(4祭司,5巫师)";  
		cin>>occupation;
		if (occupation>=4&&occupation<=5)
			break;
		else
			cout<<"输入错误,请重新输入!\n";
		}break;
	default: ;
	}
	return occupation;
}

 //属性
void Attribute(int occupation) 
{
	int rand1=rand()%11+25;//生成一个25到35的随机数
	int rand2=rand()%11+0;//生成一个0到10的随机数
	int rand3=rand()%11+15;//生成一个15到25的随机数
	int rand4=rand()%11+5;//生成一个5到15的随机数
	int rand5=rand()%11+10;//生成一个10到20的随机数
	int rand6=rand()%11+30;//生成一个30到40的随机数  
	int rand7=rand()%11+35;//生成一个35到45的随机数
	switch (occupation)
	{
	case 0:cout<<"力量:"<<"        "<<rand()%11+35<<endl;//生成一个35到45的随机数
		   cout<<"===================================="<<endl;
		   cout<<"敏捷:"<<"        "<<rand()%11+15<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"体力:"<<"        "<<rand1<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智力:"<<"         "<<rand2<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智慧:"<<"         "<<rand4<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"生命值:"<<"        "<<20*rand1<<endl;//生命值=体力*20。
		   cout<<"===================================="<<endl;
		   cout<<"魔法值:"<<"         "<<10*(rand2+rand2)<<endl;//魔法值=(智力+智慧)*10。
		   cout<<"===================================="<<endl;
		break;
	case 1:cout<<"力量"<<"        "<<rand()%11+20<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"敏捷"<<"        "<<rand()%11+10<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"体力"<<"         "<<rand1<<endl<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智力"<<"         "<<rand3<<endl<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智慧"<<"         "<<rand4<<endl<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"生命值"<<"        "<<20*rand1<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"魔法值"<<"        "<<10*(rand3+rand4)<<endl;
           cout<<"===================================="<<endl;
           break;
	case 2:cout<<"力量"<<"        "<<rand1<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"敏捷"<<"        "<<rand()%11+30<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"体力"<<"        "<<rand3<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智力"<<"        "<<rand5<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智慧"<<"        "<<rand4<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"生命值"<<"        "<<20*rand3<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"魔法值"<<"        "<<10*(rand5+rand4)<<endl;
		   cout<<"===================================="<<endl;
		break;
	case 3:cout<<"力量"<<rand5<endl;
		   cout<<"===================================="<<endl;
		   cout<<"敏捷"<<rand()%11+35<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"体力"<<rand5<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智力"<<rand4<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智慧"<<rand3<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"生命值"<<20*rand5<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"魔法值"<<10*(rand4+rand3)<<endl;
		   cout<<"===================================="<<endl;
		break;
	case 4:cout<<"力量"<<rand5<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"敏捷"<<rand3<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"体力"<<rand5<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智力"<<rand6<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智慧"<<rand5<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"生命值"<<20*rand5<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"魔法值"<<10*(rand5+rand6)<<endl;
		   cout<<"===================================="<<endl;
		break;
	case 5:cout<<"力量"<<"         "<<rand4<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"敏捷"<<"         "<<rand()%11+15<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"体力"<<"         "rand4<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智力"<<"         "<<rand3<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"智慧"<<"         "<<rand7<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"生命值"<<"        "<<20*rand4<<endl;
		   cout<<"===================================="<<endl;
		   cout<<"魔法值"<<"        "<<10*(rand3+rand7)<<endl;
		   cout<<"===================================="<<endl;
		break;
		default:;
	}
}



 //主函数,输入角色姓名和性别

void main()     
{
	while(1)
	{
	Base b;
	char name[50];
	cout<<"请输入您游戏角色的姓名:";
	cin>>name;
    b.judge_name(name);
    int sex;
	sex=getSex();
	int race;
	race=getRace();
	int occupation;
	srand((unsigned)time(NULL));  //随机数
	occupation=getOccupation(race);   //职业
	cout << "===================================" << endl;
	cout<<"姓名"<<"        "<<name<<endl;
		 cout<<"===================================="<<endl;
	cout<<"性别"<<"        "<<Isex[sex]<<endl;
		 cout<<"===================================="<<endl;
	cout<<"种族"<<"        "<<Irace[race]<<endl;
	 cout<<"===================================="<<endl;
	cout<<"职业"<<"        "<<Ioccupation[occupation]<<endl;
	 cout<<"===================================="<<endl;

	 Attribute(occupation);  //输出属性
	 int a;
	 cout<<"如您对此次生成角色满意,请输入0,不满意请输入1重新选择:";
	 cin>>a;
	 if (a==0)
		 break;
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值