角色创建

 

  1. 题目分析
  • 这是一个面向对象的程序,题目中的角色要求有姓名、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值、魔法值这11个属性。
  • 可以将这11个属性作为类的成员变量,姓名由用户输入,而性别选择,种族选择,职业选择及其限制,初始属性的随机值,以用四个成员函数来操作。
  • 在职业选择及其限制的函数里,可以在每一个case用一个if,当碰到不与之匹配的种族,则f=1,否则为0,在主函数中用这个标志来判断是否需要重新选择职业。
  • 在设置初始属性的函数里,可以用随机函数rand()来取每个职业的属性值,通过rand()%n+m,来限制每个职业属性值要求的范围,最后再用100-前四个属性值,来确定智慧值,保证了五个属性值的和为100,最后再计算生命值和魔法值。
  • 在显示所有信息后,询问用户是否满意,若满意,将信息写入文件myrole里,若不满意,则重新创建角色。

2、类图设计

角色创建

3、程序实现

 

#include<iostream>

#include<fstream>

#include<iomanip>

using namespace std;

#include<time.h>

#include<stdlib.h>

int f=1;//职业限制标志

class Role

{

public:

    char name[50];//名字、性别、种族、职业

   char *sex;

   char *race;

   char *profe;

   int power;//力量、敏捷、体力、智力、智慧

   int flexible;

   int strength;

   int intell;

   int intelh;

   int life;//生命值和魔法值

   int magic;

public:

   //性别

   void dosex(int n)

   {

      if(n==1)

         sex="男";

       else

         sex="女";

 

   }

   //种族

   void dorace(int a)//种族:人类、精灵、兽人、矮人和元素

   {

      switch(a)

      {

      case 1:{race="人类";break;}

      case 2:{race="精灵";break;}

      case 3:{race="兽人";break;}

      case 4:{race="矮人";break;}

      case 5:{race="元素";break;}

      }

   }

   //职业及其限制

   void dopro(Role& r,int b)//职业:狂战士、圣骑士、刺客、猎手、祭司和巫师

   {

     

      switch(b)

      {

      case 1:{

                if(r.race=="精灵"||r.race=="元素")

                        cout<<"无法匹配"<<endl;

               else

               {profe="狂战士";f=0;}//若匹配,更改f值,使调用职业时不循环

                break;}

      case 2:{

                 if(r.race=="精灵"||r.race=="兽人"||r.race=="元素")

                       cout<<"无法匹配"<<endl;

               else

               {profe="圣骑士";f=0;}

               break;}

      case 3:{

                if(r.race=="兽人"||r.race=="矮人"||r.race=="元素")

                   cout<<"无法匹配"<<endl;

               else

               {profe="刺客";f=0;}

               break;}

      case 4:{

                if(r.race=="矮人"||r.race=="元素")

                        cout<<"无法匹配"<<endl;

               else

               {profe="猎手";f=0;}

               break;}

      case 5:{profe="祭司";f=0;break;}

      case 6:{

                if(r.race=="兽人"||r.race=="矮人")

                        cout<<"无法匹配"<<endl;

               else

               {profe="巫师";f=0;}

               break;}

      }

   }

  //初始属性

 void shuxing(Role& r)//力量、敏捷、体力、智力、智慧

 {                  //power,flexible,strength,intell,intelh

    srand((unsigned)time(0));//随机取值          

    if(r.profe=="狂战士")

    {  

      r.power=rand()%4+37;

      r.flexible=rand()%4+18;

      r.strength=rand()%4+27;

      r.intell=rand()%3+3;

    }

    else if(r.profe=="圣骑士")

    {  

      r.power=rand()%4+21;

      r.flexible=rand()%4+12;

      r.strength=rand()%4+28;

      r.intell=rand()%3+18;

    }

    else if(r.profe=="刺客")

    {  

      r.power=rand()%4+17;

      r.flexible=rand()%4+33;

      r.strength=rand()%3+19;

      r.intell=rand()%3+13;

    }

    else if(r.profe=="猎手")

    {  

      r.power=rand()%4+13;

      r.flexible=rand()%4+37;

      r.strength=rand()%4+14;

      r.intell=rand()%3+8;

    }

    else if(r.profe=="祭司")

    {  

      r.power=rand()%3+14;

      r.flexible=rand()%4+17;

      r.strength=rand()%3+13;

      r.intell=rand()%4+33;

    }

    else if(r.profe=="巫师")

    {  

      r.power=rand()%4+8;

      r.flexible=rand()%4+17;

      r.strength=rand()%4+8;

      r.intell=rand()%3+18;

    }

 

     r.intelh=100-r.power-r.flexible-r.strength-r.intell;//智慧

    r.life=r.strength*20;//计算生命值

    r.magic=(r.intell+r.intelh)*10;//计算魔法值

 }

 

};

 

int main()

{

   Role r1;

   int n;

   cout<<"请输入您游戏角色的姓名:"<<endl;

   cin>>r1.name;

   cout<<"请选择您游戏角色的性别(1、男  2、女):"<<endl;

   cin>>n;

   r1.dosex(n);

    cout<<"请选择您游戏角色的种族(1、人类 2、精灵 3、兽人 4、矮人 5、元素):"<<endl;

   cin>>n;

   r1.dorace(n);

   while(f){ //若f=1,则种族与职业不匹配,重新输入,若f=0,匹配,不循环

   cout<<"请选择您的职业(1、狂战士 2、圣骑士 3、刺客 4、猎手 5、祭司 6、巫师):"<<endl;

   cin>>n;

   r1.dopro(r1,n);}

   

    r1.shuxing(r1);//调用设置初始属性函数

   cout<<"================================"<<endl;

   cout<<"姓名          "<<r1.name<<endl;

   cout<<"================================"<<endl;

   cout<<"性别          "<<r1.sex<<endl;

   cout<<"================================"<<endl;

   cout<<"种族          "<<r1.race<<endl;

   cout<<"================================"<<endl;

   cout<<"职业          "<<r1.profe<<endl;

   cout<<"================================"<<endl;

    cout<<"力量          "<<r1.power<<endl;

   cout<<"================================"<<endl;

   cout<<"敏捷          "<<r1.flexible<<endl;

    cout<<"================================"<<endl;

    cout<<"体力          "<<r1.strength<<endl;

   cout<<"================================"<<endl;

    cout<<"智力          "<<r1.intell<<endl;

   cout<<"================================"<<endl;

    cout<<"智慧          "<<r1.intelh<<endl;

    cout<<"================================"<<endl;

    cout<<"生命值        "<<r1.life<<endl;

   cout<<"================================"<<endl;

    cout<<"魔法值        "<<r1.magic<<endl;

   cout<<"================================"<<endl;

    //询问用户是否满意

   cout<<"你对你的角色是否满意?(1、满意  2、不满意)"<<endl;

   cin>>n;

   if(n==1)  //满意,则程序结束,并将角色信息写入文件保存

   {

      ofstream file;

      file.open("myrole.txt");

      file<<r1.name<<" "<<r1.sex<<" "<<r1.race<<" "<<r1.profe<<" "<<r1.power<<" "<<r1.flexible<<" "<<r1.strength<<" "<<r1.intell<<" "<<r1.intelh<<" "<<r1.life<<" "<<r1.magic<<endl;

      cout<<"创建角色完成,已存入文件"<<endl;

   }

   else if(n==2)//不满意,则重新创建角色

   {

      cout<<"重新创建角色"<<endl;

   }

 

}

4、运行结果

角色创建

角色创建

5、

经验归纳

在这次编程中,我学习到了游戏角色的创建,如何使职业限制,使用随机函数设置初始属性,并让其在一定范围内,还有用c++将信息写入文件,在编程过程中,也遇到了些小问题,比如在遇到种族与职业不匹配时,如何让用户重新选择职业,经过思考后,使用了while和一个标志,只需在满足条件时更改标志值,使输入语句跳出while。

上一篇:linux中系统延时任务及定时任务


下一篇:手写Promise.all与Promise.race方法