一个源于地下龙的角色创建角色程序
要求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; } 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<<"欢迎来到角色创建!"<
希望大家提出宝贵意见!!!!! O(∩_∩)O谢谢