You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

222 lines
5.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <string>
#include <fstream>
using namespace std;
//先建立基类,记录姓名性别
class game {
public:
char name[100]; //定义姓名
string sex; //定义性别
int sex_choice; //整型数据对性别进行选择
void show();
};
void game::show() {
cout << "请输入您所要创建的角色姓名:";
cin >> name;
int tag = 1;
while (tag) {
cout << "请选择角色性别:(0.男 1.女)" << endl;;
cin >> sex_choice;
switch (sex_choice) {
case 0:
sex = "";
tag = 0;
break;
case 1:
sex = "";
tag = 0;
break;
default:
cout << "输入错误,请重新输入" << endl;
break;
}
}
}
//game2类记录种族和职业
class game2: public game {
public:
string race; //定义种族
string occupation; //定义职业
int race_choice; //种族选择
int occupation_choice; //职业选择
void Rrace();
};
void game2::Rrace() { //成员函数选择种族和职业
int tag = 1;
while (tag) {
cout << "请选择种族0.人类 1.精灵 2.兽人 3.矮人 4.元素" << endl;
cin >> race_choice;
switch (race_choice) {
case 0:
race = "人类";
tag = 0;
break;
case 1:
race = "精灵";
tag = 0;
break;
case 2:
race = "兽人";
tag = 0;
break;
case 3:
race = "矮人";
tag = 0;
break;
case 4:
race = "元素";
tag = 0;
break;
default:
cout << "输入错误,请重新输入!" << endl;
break;
}
}
while (1) {
switch (race_choice) {
case 1:
cout << "选择您的职业0.狂战士 1.圣骑士 2.刺客 3.猎手 4.祭司 5.巫师" << endl;
break;
case 2:
cout << "选择您的职业2.刺客 3.猎手 4.祭司 5.巫师" << endl;
break;
case 3:
cout << "选择您的职业0.狂战士 3.猎手 4.祭司 " << endl;
break;
case 4:
cout << "选择您的职业0.狂战士 1.圣骑士 4.祭司 " << endl;
break;
case 5:
cout << "选择您的职业4.祭司 5.巫师" << endl;
break;
}
cin >> occupation_choice;
if (race_choice == 0 && (occupation_choice >= 0 && occupation_choice <= 5))
break;
else if (race_choice == 1 && (occupation_choice > 1 && occupation_choice < 6))
break;
else if (race_choice == 2 && (occupation_choice == 0 || occupation_choice == 3 || occupation_choice == 4))
break;
else if (race_choice == 3 && (occupation_choice == 0 || occupation_choice == 1 || occupation_choice == 4))
break;
else if (race_choice == 4 && (occupation_choice > 3 && occupation_choice < 6))
break;
else
cout << "输入错误,请重新输入" << endl;
}
if (occupation_choice == 0)
occupation = "狂战士";
if (occupation_choice == 1)
occupation = "圣骑士";
if (occupation_choice == 2)
occupation = "刺客";
if (occupation_choice == 3)
occupation = "猎手";
if (occupation_choice == 4)
occupation = "祭司";
if (occupation_choice == 5)
occupation = "巫师";
}
class Attribute : public game2 { //定义种族类的派生类,生成随机属性
public:
int strength;//力量
int agility;//敏捷
int physical;//体力
int intelligence;//智力
int wisdom;//智慧
int HP;//生命值
int MP;//魔法值
void output_attribute();//取决于职业的属性确定函数
void rad(int rand1, int rand2, int rand3, int rand4, int rand5);//随机生成数函数
};
void Attribute::rad(int rand1, int rand2, int rand3, int rand4, int rand5) {
int sum;
srand((unsigned)time(NULL)); //随机属性值
do {
strength = rand() % 10 + rand1;
agility = rand() % 10 + rand2;
physical = rand() % 10 + rand3;
intelligence = rand() % 10 + rand4;
wisdom = rand() % 10 + rand5;
sum = strength + agility + physical + intelligence + wisdom;
} while (sum != 100);//5项属性总值为100
HP = physical * 20;//生命值为体力的20倍
MP = (wisdom + intelligence) * 10;//魔法值为智力与智慧的10倍
}
void Attribute::output_attribute() { //初始属性
if (occupation == "狂战士")
rad(35, 15, 25, 5, 5);
if (occupation == "圣骑士")
rad(20, 10, 25, 15, 15);
if (occupation == "刺客")
rad(15, 30, 15, 10, 15);
if (occupation == "猎手")
rad(10, 35, 10, 5, 25);
if (occupation == "祭司")
rad(10, 25, 10, 30, 20);
if (occupation == "巫师")
rad(5, 15, 5, 15, 45);
}
class Battle : public Attribute {
public:
void fight(Attribute &me, Attribute &opponent);
};
void Battle::fight(Attribute &me, Attribute &opponent) {
cout << "战斗开始!" << endl;
while (me.HP > 0 && opponent.HP > 0) {
int attack = rand() % me.strength;
int defense = rand() % opponent.agility;
int damage = max(0, attack - defense);
opponent.HP -= damage;
cout << me.name << " 攻击 " << opponent.name << " 造成 " << damage << " 点伤害!" << endl;
if (opponent.HP <= 0) {
cout << opponent.name << " 被击败了!" << endl;
break;
}
// 反击
attack = rand() % opponent.strength;
defense = rand() % me.agility;
damage = max(0, attack - defense);
me.HP -= damage;
cout << opponent.name << " 反击 " << me.name << " 造成 " << damage << " 点伤害!" << endl;
if (me.HP <= 0) {
cout << me.name << " 被击败了!" << endl;
break;
}
}
}
int main() {
srand((unsigned)time(NULL)); // 初始化随机数种子
Attribute player1, player2;
player1.show(); // 创建第一个角色
player1.Rrace();
player1.output_attribute();
player2.show(); // 创建第二个角色
player2.Rrace();
player2.output_attribute();
Battle battle;
battle.fight(player1, player2); // 两个角色对战
return 0;
}