一个源于地下龙的角色创建角色程序
要求1:用户可以输入自己想要的游戏角色的名称:;
2.选择角色的性别,只能选择男女,当然,这世界的性别怎么可能有别的呢!!!!
3.用户可以选择角色的种族;
4.用户可以选择角色的职业,但是前提是它得参靠用户刚才选择的种族,例如,兽人就不曾选择圣骑士等;
5.系统自动分配角色的属性,包含力量,智慧等等。
6.当角色资料创建完成之后用户可以选择是否重新创建,如果创建,那么自动清屏,重新创建角色,反之,游戏角色创建成功;
7.将人物角色信息可以打印到一个文档中去,其中记录了打印的时间;
8.界面友好
为了游戏角色创建的程序的便于扩展性,我将人物角色的信息分为了三部分
基类:Gamer();
Basic():public Gamer
Nature():public Basic()
/*
*******************************************************************************************
project:游戏人物角色创建
Author:侯苗苗
Date:2014/4/16
function:
1.基类:Gamer()
{
成员: string character[2]包含的信息:(姓名: name->character[0] 性别: sex->character[1])
函数: add() 用于用户输入名称和选择性别,其中对于用户输入性别会有所限制,只能是男或女,别的会出现提示,用户必须重新输入选项,直至输入正确
display() 用来输出游戏角色基本信息,包含姓名,性别
print() 用来打印用户创建的人物角色的基本信息到文档中去
}
2.Basic为Gamer的派生类
{
成员: string str[M] M为游戏者基本信息的个数,这里我定义的是2,它包含的信息是(种族:nation->str[0],职业:job->str[1] )
函数:add_1() 用来用户选择自己想要游戏角色的种族和职业,其中选择有一定的约束条件,例如兽人不允许就职圣骑士等,对于用户的输入也有一定范围
display_1() 用来输出用户信息,包含种族,职业
print_1() 用来打印用户创建的游戏角色的信息到文档中去(已去除)
}
3.Narure为Basic的派生类
{
成员:int other[X] X是游戏者人物角色的属性个数,它的值是有随机函数得到的,这里我定义的是7,它包含的信息(力量,敏捷,体力,智力,智慧,生命,魔法)
函数:suiji() 用来给游戏者的游戏角色随机分配属性值
display_2() 用来输出创建的游戏角色所具有的属性值,包含的信息力量,敏捷,体力,智力,智慧,生命,魔法
print_2() 用来打印用户创建的游戏角色的所有信息到charactre.txt文档中去,而且记录用户每一次的打印时间到文档中
}
4.非成员函数:
void time() 记录游戏角色创建成功的时间
void menu() 一个界面设计
5. character.txt文档是用来记录用户游戏角色创建的信息
**********************************************************************************************
*/
//所使用到的头文件
#include
#include//产生随机数rand()%100
#include
#include //对于字符串的使用string
#include
#include//ofstream outfile文件流类的使用
using namespace std;
// 对于所使用的数组大小进行宏定义,便于程序的扩建
#define X 7//对于游戏者属性值个数的定义
#define M 2//对于人物信息个数的定义
string nation[5]={"人类","精灵","兽人","矮人","元素"};
string job[6]={"狂骑士","圣骑士","刺客","猎手","祭司","巫师"};
string sex[2]={"male","female"};
//程序中所使用的类
class Gamer;//基类
class Basic;//派生于Gamer
class Natur;//派生于Basic
////////////////////////
//
//用户的基本信息类
//
///////////////////////
int select=1;//标记位
class Gamer
{
protected:
/*
char name; //角色姓名
char sex;//角色性别
*/
string character[2];
public:
//构造函数
//Gamer(char n,char s);/*设置玩家姓名*/
void add();//用户角色的创建函数
//void print();//用户信息的打印函数
void display();//用户信息的显示函数
};
/*
Gamer:: Gamer(char n,char s)/
{
name=n;
sex=s;
}
*/
////////////////////////////////
//
//用户的信息类
//
////////////////////////////////
class Basic:public Gamer //Basic的基类是Gamer
{
protected:
// char nation;//角色的种族
// char job;//角色的职业
string str[M];//定义的一个字符串型的数组,它的长度为游戏者信息的个数,其中包含种族和职业
public:
//Basic(char n,char s,char c,char j);//派生类构造函数
void add_1();//用户信息的创建函数
//void print_1();//用户信息的打印函数
void display_1();//用户信息的显示函数
};
/*
Basic::Basic(char n,char s,char c,char j):Gamer(n,s)//派生类构造函数
{
nation=c;
job=j;
}
*/
//////////////////////////
//
//用户的属性类
//
//////////////////////////
class Nature:public Basic//Nature的基类是Basic
{
protected:
/*
int strength;//角色的力量
int quick;//角色的敏捷
int power;//角色的体力
int telligent;//角色的智力
int intelligence;//角色的智慧
int life;//生命值
int magic;//魔法值
*/
int other[X];//定义一个整型的数组,它的长度为人物属性值的个数
public:
//Nature(char n,char s,char c,char j,int i,int l,int m,int p,int q,int s1,int t);
void print_2();//用户信息的打印函数
void display_2();//用户信息的显示函数
void suiji();//产生随机种子数
};
Nature n;//定义一个指向Nature类的全局对象,通过这个对象可以访问所有的公有的成员函数
/*
初始化构造函数
Nature::Nature(char n,char s,char c,char j,int i,int l,int m,int p,int q,int s1,int t):
Basic(n,s,c,j)
{
strength=s1;
quick=q;
power=p;
telligent=t;
intelligence=i;
life=p*20;
magic=(t+i)*10;
}
*/
/////////////////////////////
//
//时间显示
//
/////////////////////////////
void time()
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( " \14 \14 The current date/time is : %s", asctime (timeinfo) );
}
////////////////////////////////////////
//
//对于Gamer基类中的成员(name,sex)赋值函数
//
////////////////////////////////////////
void Gamer::add()
{
string name;//用户姓名
int choose;//用户选项
int i;
cout<<"请输入创建名称:"<>name;
character[0]=name;
cout<<"请选择你要创建的角色性别:"<>choose;
while(choose!=1&&choose!=2)
{
cout<<"输入错误!请您重新输入!"<>choose;
}
for(i=0;i<2;i++)
{
character[1]=sex[choose-1];
}
// Gamer gamer(name,sex);//传值
}
///////////////////////////////////////////////////////////
//
//对于给由Gamer基类派生的Basic类中的成员(nation,job)赋值函数
//
///////////////////////////////////////////////////////////
void Basic::add_1()
{
int choose1;
int choose2;
cout<<"-------------------------"<>choose1;//输入种族选择
//对于用户的输入有限制
while(choose1!=1&&choose1!=2&&choose1!=3&&choose1!=4&&choose1!=5)
{
cout<<"输入错误,请重新输入!"<>choose1;//用户重新输入选项
}
int i;
for(i=0;i<4;i++)
{
str[0]=nation[choose1-1];//若用户输入正确,就将选项所对应的字符串赋给Basic第一个成员变量
}
cout<>choose2;//输入职业选择
//对于用户的选择限制
/*
while(choose2!=1&&choose2!=2&&choose2!=3&&choose2!=4&&choose2!=5&&choose2!=6)
{
cout<<"输入错误,请重新输入!"<>choose2;
}
*/
if(choose2>=1&&choose2<=6)
{
if(str[0]==nation[1]&&(choose2==1||choose2==2))
{
cout<<"您不能选择该人物属性!请重新选择!"<>choose2;
while(choose2==1||choose2==2)
{
cout<<"您不能选择该权限,请重新输入!"<>choose2;
}
}
else if(str[0]==nation[2]&&(choose2==2||choose2==3||choose2==6))
{
cout<<"您不能选择该属性!请重新选择!"<>choose2;
while(choose2==2||choose2==3||choose2==6)
{
cout<<"您不能选择该权限,请重新输入!"<>choose2;
}
}
else if(str[0]==nation[3]&&(choose2==3||choose2==4||choose2==6))
{
cout<<"您不能选择该属性!请重新选择!"<>choose2;
while(choose2==3||choose2==4||choose2==6)
{
cout<<"您不能选择该权限,请重新输入!"<>choose2;
}
}
else if(str[0]==nation[4]&&(choose2==1||choose2==2||choose2==3||choose2==4))
{
cout<<"您不能选择该属性!请重新选择!"<>choose2;
while(choose2==1||choose2==2||choose2==3||choose2==4)
{
cout<<"您不能选择该权限,请重新输入!"<>choose2;
}
}
}
else
{
cout<<"亲,当前没有那么多的职业哦,请亲重新选择!(*^__^*) 嘻嘻……"<>choose2;//用户重新输入选项
}
for(i=0;i<4;i++)
{
str[1]=job[choose2-1];//将职业数组中的对应的一项赋给Basic的第二个成员变量
}
}
////////////////////////////////////////
//
//随机函数产生随机种子数,赋值于人物属性
//
////////////////////////////////////////
void Nature::suiji()
{
int i;
int choose;//用户的选择,若是用户不满意,可以重新创建角色
srand((unsigned)time(NULL));//产生随机种子数
for(i=0;i<5;i++)
{
other[i]=rand()%100;//产生随机数
}
other[5]=other[2]*20;//角色生命值的计算
other[6]=(other[3]+other[4])*10;//角色魔法值的计算
cout<<"分配的随机属性是:"<>choose;
if(choose==1)//用户创建游戏角色成功
{
cout<<"╭(╯3╰)╮ "<>choose;//用户重新选择
}
}
///////////////////////////
//
//游戏帮助
//
///////////////////////////
void help()
{
cout<<"欢迎来到角色创建!"<>item;//用户输入选项
printf("\n");
switch(item)
{
case 1:help();break;
case 2:n.add();n.add_1();n.suiji();break;
case 3:n.display();n.display_1();n.display_2();break;
case 4:n.print_2();break;
case 5:select=0;break;
default :cout<<"请在(0-5)之间选择,按回车结束"<
希望大家提出宝贵意见!!!!!
O(∩_∩)O谢谢