一、问题描述
几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。本次上机要求编写一个简化的创建游戏角色的程序。
二、问题分析
角色应该有姓名、性别、生命值、魔法值、力量、敏捷、体质、智慧、智力、种族和职业等属性。将角色抽象为一个类,种族职业分别抽象为一个类。同时为了满足面向父类编程的原则,再由种族和职业类派生出具体的每个种族和职业对应的类。
三、算法设计
UML类图
四、程序实现
头文件
#pragma once
#include<iostream>
#include<string>
#include<stdlib.h>
#include<time.h>
#include<fstream>
using namespace std;
class Career {
public:
string name = "None";//职业名
virtual int* Generater(int*) {
return 0;}//分配主属性
virtual string write_name() {
return name; }//保存职业名
};
class Berserker :public Career {
public:
string name = "Berserker";
virtual int* Generater(int*);
virtual string write_name() {
return name; }
};
class Paladin :public Career {
public:
string name = "Paladin";
virtual int* Generater(int*);
virtual string write_name() {
return name; }
};
class Assassin :public Career {
public:
string name = "Assassin";
virtual int* Generater(int*);
virtual string write_name() {
return name; }
};
class Hunter :public Career {
public:
string name = "Hunter";
virtual int* Generater(int*);
virtual string write_name() {
return name; }
};
class Flamen :public Career {
public:
string name = "Flamen";
virtual int* Generater(int*);
virtual string write_name() {
return name; }
};
class Warlock :public Career {
public:
string name = "Warlock";
virtual int* Generater(int*);
virtual string write_name() {
return name; }
};
class Race {
public:
string name = "无" ;;//种族名
virtual int choose_career()//选择职业
{
cout << "种族选择失败" << endl;
return 0;
}
virtual string write_name() {
return name; }//里氏替换无法直接使用子类成员变量,通过调用函数来返回子类变量
};
class Human :public Race {
public:
string name = "human";
virtual int choose_career();
virtual string write_name() {
return name; }
};
class Elf :public Race {
public:
string name = "Elf";
virtual int choose_career();
virtual string write_name() {
return name; }
};
class Orc :public Race {
public:
string name = "Orc";
virtual int choose_career();
virtual string write_name() {
return name; }
};
class Dwarves :public Race {
public:
string name = "Dwarves";
virtual int choose_career();
virtual string write_name() {
return name; }
};
class Element :public Race {
public:
string name = "Element";
virtual int choose_career();
virtual string write_name() {
return name; }
};
class Character {
public:
string name;
string sex;
int HP;
int MP;
int strength;
int agility;
int physique;
int intelligence;
int wisdom;
class Race* race;
class Career* career;
void set_attribute();//设置属性
void choose_race();//选择职业
void display();//显示属性
void save();