RPG角色生成器c語言程式+截圖
阿新 • • 發佈:2018-12-14
題目: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; } }
除錯與測試: