RPG角色游戏的创建

来源:互联网 发布:台州公务员网络学堂 编辑:程序博客网 时间:2024/04/26 14:32
//程序:RPG游戏角色创建//功能:简单的创建游戏角色的程序//作者:软三1508010301王敏//时间:2017.4.30//本题目要求的游戏角色应有以下属性:名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。//名字:不超过50个字符。//性别:可以选择男性和女性。//种族:一共可选五个种族,人类、精灵、兽人、矮人和元素。//职业:可选六种职业,狂战士、圣骑士、刺客、猎手、祭司和巫师。其余属性均为整数。//本题目要求首先用户输入角色姓名,然后由用户选择角色性别,然后由用户选择种族,然后选择职业,然后自动分配力量、敏捷、体力、智力和智慧属性,并计算生命值和魔法值。//生命值=体力*20。//魔法值=(智力+智慧)*10。  #include "iostream"#include "string"#include "ctime"#include "fstream"using namespace std;  int profession_choice; //玩家所选择的职业的序号  class Base  //基础类,保存角色的姓名,性别{  protected:  char name[50];//记录角色名字  string sex; //记录性别  int sex_choice;//记录性别选择  public:  void getBase();//功能实现  friend class Output;  //友元类,用于输出角色信息  friend class File;    //友元类,将角色信息保存到文档中};  void Base::getBase()//输入角色名和性别{int i;cout <<endl;  cout << "输入角色姓名:";  cin >> name;do{  cout << "选择角色性别:";  cout << "1.男    2.女" << endl;  cin >> sex_choice;  switch (sex_choice){    case 1:sex = "男"; i=0;break;  case 2:sex = "女"; i=0;break;default:cout<<"输入错误,请重新输入"<<endl;break;}}while (i=0);}class Race :public Base  //派生类,记录角色的种族、职业{  protected:  string race;  string profession;  int race_choice;    public:  void getRace();  friend class Output;  friend class File;};    //选择种族和职业void Race::getRace(){  int i = 1;  while (i)  {  cout << "请选择种族:" << endl;  cout << "1.人类  2.精灵  3.兽人  4.矮人  5.元素" << endl;  cin >> race_choice;    switch (race_choice)  {  case 1:race = "人类"; i = 0; break;  case 2:race = "精灵"; i = 0; break;  case 3:race = "兽人"; i = 0; break;  case 4:race = "矮人"; i = 0; break;  case 5:race = "元素"; i = 0; break;  default:cout << "输入错误,请重新输入!" << endl; break;  }  }  while (1)  {  cout << "可以使用的职业:" << endl;  switch (race_choice)  {  case 1: cout << "1.狂战士   2.圣骑士   3.刺客    4.猎手   5.祭司   6.巫师" << endl; break;  case 2: cout << "3.刺客     4.猎手     5.祭司    6.巫师" << endl; break;  case 3: cout << "1.狂战士   4.猎手     5.祭司  " << endl; break;  case 4: cout << "1.狂战士   2.圣骑士   5.祭司 " << endl; break;  case 5: cout << "5.祭司     6.巫师" << endl; break;  }  cin >> profession_choice;  if (race_choice == 1 && (profession_choice >= 1 && profession_choice <= 6)) break;  else if (race_choice == 2 && (profession_choice >=3 && profession_choice <=6)) break;  else if (race_choice == 3 && (profession_choice == 1 || profession_choice == 4 || profession_choice == 5)) break;  else if (race_choice == 4 && (profession_choice == 1 || profession_choice == 2 || profession_choice == 5))  break;  else if (race_choice == 5 && (profession_choice >=5 && profession_choice <=6)) break;  else  cout << "输入错误,请重新输入" << endl;  }  if (profession_choice == 1)   profession = "狂战士";  if (profession_choice == 2)   profession = "圣骑士";  if (profession_choice == 3)  profession = "刺客";  if (profession_choice == 4)   profession = "猎手";  if (profession_choice == 5)   profession = "祭司";  if (profession_choice == 6)   profession = "巫师";}    class Attribute :public Race  //派生类,记录角色的属性{  protected:  int strength;//力量  int agility;//敏捷  int physical;//体力  int intelligence;//智力  int wisdom;//智慧  int HP;//生命值  int MP;//法力值  public:  void getAttribute();  void getRandom(int a, int b, int c, int d, int e);        friend class Output;  friend class File;};    // 随机生成每项属性的值,abcd为该属性的最小值,e为第五个属性的最大值void Attribute::getRandom(int a, int b, int c, int d, int e){  int sum;  //前4项属性之和  srand((unsigned)time(NULL));  do  {  strength = a + rand() % 8;  agility = b + rand() % 8;  physical = c + rand() % 8;  intelligence = d + rand() % 8;  sum = strength + agility + physical + intelligence;  } while (((100 - e) < sum) && (sum < 100));  wisdom = 100 - sum;  HP = physical * 20;  MP = (wisdom + intelligence) * 10;  }    //根据选择的职业,向getRamdom传各职业最小值  void Attribute::getAttribute()  {  if (profession_choice == 1) getRandom(40, 20, 30, 5, 5);//狂战士  if (profession_choice == 2) getRandom(25, 15, 30, 20, 10);//圣骑士  if (profession_choice == 3) getRandom(20, 35, 20, 15, 10);//刺客  if (profession_choice == 4) getRandom(15, 40, 15, 10, 20);//猎手  if (profession_choice == 5)  getRandom(15, 20, 15, 35, 15);//祭司  if (profession_choice == 6)getRandom(10, 20, 10, 20, 40);//巫师}    class Output  //输出角色属性{  public:  void show(Base &, Race &, Attribute &);//访问友元类  };    void Output::show(Base &t1, Race &t2, Attribute &t3)  {  cout << "==================================" << endl;  cout <<"  姓名:      " << t1.name << endl;cout << "==================================" << endl;  cout <<"  性别:      " << t1.sex << endl;cout << "==================================" << endl;  cout <<"  种族:      " << t2.race << endl;cout << "==================================" << endl;  cout <<"  职业:      " << t2.profession << endl;cout << "==================================" << endl;  cout <<"  力量:      " << t3.strength << endl;cout << "==================================" << endl;  cout <<"  敏捷:      " << t3.agility << endl;cout << "==================================" << endl;  cout <<"  体力:      " << t3.physical << endl;cout << "==================================" << endl;  cout <<"  智力:      " << t3.intelligence << endl;cout << "==================================" << endl;  cout <<"  智慧:      " << t3.wisdom << endl;cout << "==================================" << endl;  cout <<"  生命值:    " << t3.HP << endl;cout << "==================================" << endl;  cout <<"  法力值:    " << t3.MP << endl;cout << "==================================" << endl;}  class File  //将角色信息保存到文档{  public:  void file(Base &, Race &, Attribute &);  };    void File::file(Base &t1, Race &t2, Attribute &t3)  {    ofstream outfile;  outfile.open("memory.dat", ios::trunc);  outfile << "姓名:" << t1.name << endl;  outfile << "性别:" << t1.sex << endl;  outfile << "种族:" << t2.race << endl;  outfile << "职业:" << t2.profession << endl;  outfile << "力量:" << t3.strength << endl;  outfile << "敏捷:" << t3.agility << endl;  outfile << "体力:" << t3.physical << endl;  outfile << "智力:" << t3.intelligence << endl;  outfile << "智慧:" << t3.wisdom << endl;  outfile << "生命值:" << t3.HP << endl;  outfile << "法力值:" << t3.MP << endl;  }  int main(){  Base player;  Race player_race;  Attribute player_att;  Output player_show;  File keep;  int player_choice;  do  {  player.getBase();  player_race.getRace();  player_att.getAttribute();  player_show.show(player, player_race, player_att);  cout << endl;  cout << "对生成的角色是否满意?如不满意,则重新生成" << endl;  cout << "0.满意     1.不满意" << endl;  cin >> player_choice;  } while (player_choice);  keep.file(player, player_race, player_att);  return 0;}    

0 0