一個源於地下龍的角色創建角色程序
要求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謝謝