ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

角色创建

2019-04-18 20:54:55  阅读:341  来源: 互联网

标签:rand cout 角色 int 创建 else race profe


 

  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。

标签:rand,cout,角色,int,创建,else,race,profe
来源: https://blog.csdn.net/qq_41101024/article/details/89387491

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有