1. 程式人生 > >RPG角色生成器c語言程式+截圖

RPG角色生成器c語言程式+截圖

題目:RPG角色生成器 1.功能描述 幾乎所有的RPG遊戲(一種源自《龍與地下城》的遊戲型別)在進入遊戲時都會讓使用者自己來建立自己喜歡的角色。本次上機要求編寫一個簡化的建立遊戲角色的程式。 2.遊戲角色應有的屬性 本題目要求的遊戲角色應有以下屬性:名字、性別、種族、職業、力量、敏捷、體力、智力、智慧、生命值和魔法值。 名字:不超過50個字元。 性別:可以選擇男性和女性。 種族:一共可選五個種族,人類、精靈、獸人、矮人和元素。 職業:可選六種職業,狂戰士、聖騎士、刺客、獵手、祭司和巫師。 其餘屬性均為整數。 本題目要求首先使用者輸入角色姓名,然後由使用者選擇角色性別,然後由使用者選擇種族,然後選擇職業,然後自動分配力量、敏捷、體力、智力和智慧屬性,並計算生命值和魔法值。 生命值=體力*20。 魔法值=(智力+智慧)*10。 3.職業限制 很多職業會限制某些種族選擇,例如獸人不能就職聖騎士等等,種族和職業的限制表如下: 在這裡插入圖片描述

所以在要求使用者選擇職業時,輸出資訊裡面只能有使用者所選擇種族可以就職的職業。 4.初始屬性 本題目要求力量、敏捷、體力、智力和智慧要求是隨機值(利用隨機數函式來取得隨機數),但是五項屬性的總和應該是100,並且應該和職業相關。例如狂戰士的體力和力量就要比較高,而巫師需要較高的智力,而祭司則需要較高的智慧。各職業初始屬性的大致比例應遵從下表:

在這裡插入圖片描述 例如,前面示意圖中的祭司的初始屬性,大致滿足該比例,但是應該是隨機的。 然後利用屬性值計算生命值和魔法值。 5.顯示資訊 最後向用戶顯示該角色的所有資訊,然後詢問使用者是否滿意,如使用者不滿意則重新建立,若使用者滿意則程式結束,並將使用者建立角色的相關資訊寫入檔案儲存。

c語言程式如下:

#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]={"狂戰士","聖騎士","刺客","獵手","祭司","巫師"};

//基本資訊 
class Base   
{  
protected:  
    char name[50];  
    int sex;  
    int sex_choice;  
public:  
    void getBase();  
    friend class Output;    //友元類,輸出角色資訊  
}; 

//角色的種族、職業  
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";
	}
	return sex;
}

//種族
int getRace()  
{
	int race;
	cout<<"請選擇您遊戲角色的種族(0人類,1精靈,2獸人,3矮人,4元素):";
	cin>>race;
	while(1)
	{
	if (race>=0&&race<=4) 
			break;			   
		else
			cout<<"輸入錯誤,請重新輸入!\n";   
	}
	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<<"力量\t\t\t"<<rand()%11+35<<endl<<endl;//生成一個35到45的隨機數
		   cout<<"敏捷\t\t\t"<<rand()%11+15<<endl<<endl;
		   cout<<"體力\t\t\t"<<rand1<<endl<<endl;
		   cout<<"智力\t\t\t"<<rand2<<endl<<endl;
		   cout<<"智慧\t\t\t"<<rand4<<endl<<endl;
		   cout<<"生命值\t\t\t"<<20*rand1<<endl<<endl;//生命值=體力*20。
		   cout<<"魔法值\t\t\t"<<10*(rand2+rand2)<<endl<<endl;//魔法值=(智力+智慧)*10。
		   cout << "************************************" << endl;
		break;
	case 1:cout<<"力量\t\t\t"<<rand()%11+20<<endl<<endl;
		   cout<<"敏捷\t\t\t"<<rand()%11+10<<endl<<endl;
		   cout<<"體力\t\t\t"<<rand1<<endl<<endl;
		   cout<<"智力\t\t\t"<<rand3<<endl<<endl;
		   cout<<"智慧\t\t\t"<<rand4<<endl<<endl;
		   cout<<"生命值\t\t\t"<<20*rand1<<endl<<endl;
		   cout<<"魔法值\t\t\t"<<10*(rand3+rand4)<<endl<<endl;
		   cout << "************************************" << endl;
		break;
	case 2:cout<<"力量\t\t\t"<<rand1<<endl<<endl;
		   cout<<"敏捷\t\t\t"<<rand()%11+30<<endl<<endl;
		   cout<<"體力\t\t\t"<<rand3<<endl<<endl;
		   cout<<"智力\t\t\t"<<rand5<<endl<<endl;
		   cout<<"智慧\t\t\t"<<rand4<<endl<<endl;
		   cout<<"生命值\t\t\t"<<20*rand3<<endl<<endl;
		   cout<<"魔法值\t\t\t"<<10*(rand5+rand4)<<endl<<endl;
		   cout << "************************************" << endl;
		break;
	case 3:cout<<"力量\t\t\t"<<rand5<<endl<<endl;
		   cout<<"敏捷\t\t\t"<<rand()%11+35<<endl<<endl;
		   cout<<"體力\t\t\t"<<rand5<<endl<<endl;
		   cout<<"智力\t\t\t"<<rand4<<endl<<endl;
		   cout<<"智慧\t\t\t"<<rand3<<endl<<endl;
		   cout<<"生命值\t\t\t"<<20*rand5<<endl<<endl;
		   cout<<"魔法值\t\t\t"<<10*(rand4+rand3)<<endl<<endl;
		   cout << "************************************" << endl;
		break;
	case 4:cout<<"力量\t\t\t"<<rand5<<endl<<endl;
		   cout<<"敏捷\t\t\t"<<rand3<<endl<<endl;
		   cout<<"體力\t\t\t"<<rand5<<endl<<endl;
		   cout<<"智力\t\t\t"<<rand6<<endl<<endl;
		   cout<<"智慧\t\t\t"<<rand5<<endl<<endl;
		   cout<<"生命值\t\t\t"<<20*rand5<<endl<<endl;
		   cout<<"魔法值\t\t\t"<<10*(rand5+rand6)<<endl<<endl;
		   cout << "************************************" << endl;
		break;
	case 5:cout<<"力量\t\t\t"<<rand4<<endl<<endl;
		   cout<<"敏捷\t\t\t"<<rand()%11+15<<endl<<endl;
		   cout<<"體力\t\t\t"<<rand4<<endl<<endl;
		   cout<<"智力\t\t\t"<<rand3<<endl<<endl;
		   cout<<"智慧\t\t\t"<<rand7<<endl<<endl;
		   cout<<"生命值\t\t\t"<<20*rand4<<endl<<endl;
		   cout<<"魔法值\t\t\t"<<10*(rand3+rand7)<<endl<<endl;
		   cout << "************************************" << endl;
		break;
		default:;
	}
}

//主函式,輸入角色姓名和性別
void main()     
{
	while(1)
	{
	srand((unsigned)time(NULL));  //隨機數
	char name[50];
	int sex,race,occupation;
	cout<<"請輸入您遊戲角色的姓名:";
	cin>>name;
	sex=getSex();
	race=getRace();
	occupation=getOccupation(race);   //職業
	cout << "************************************" << endl;
	cout<<"姓名\t\t\t"<<name<<endl;
	cout<<endl;
	cout<<"性別\t\t\t"<<Isex[sex]<<endl;
	cout<<endl;
	cout<<"種族\t\t\t"<<Irace[race]<<endl;
	cout<<endl;
	cout<<"職業\t\t\t"<<Ioccupation[occupation]<<endl;
	cout<<endl;

	 Attribute(occupation);  //輸出屬性
	 int a;
	 cout<<"如您對此次生成角色滿意,請輸入0,不滿意請輸入1重新選擇:";
	 cin>>a;
	 if (a==0)
		 break;
	}
}

除錯與測試:

在這裡插入圖片描述