模拟原神圣遗物系统-小森设计项目,设计圣遗物(生之花,死之羽,时之沙,空之杯,理之冠)抽象类

news2024/10/23 2:39:30

分析圣遗物

在圣遗物系统,玩家操控的是圣遗物的部分
在这里插入图片描述

因此我们应该 物以类聚 人与群分把每个圣遗物的部分,抽象出来 拿 生之花,死之羽为例 若是抽象 类很好的扩展 添加冒险家的生之花 时候继承生之花 并且名称冒险者- 生之花 当然圣遗物包含(生之花,死之羽,时之沙 空之杯 理之冠)组合而成若装备它
2件套效果:生命值上限提高1000点。
4件套效果 开启各类宝箱后的5秒内,持续恢复30%生命值。
在这里插入图片描述

当然前期为了稳定就不要这种效果
废话说了这么多,你有没有领悟到设计?

设计圣遗物(生之花,死之羽,时之沙)抽象类 代码实例

// 生之花抽象类
class flowerOfLife {
public:
    // 默认构造函数
    flowerOfLife() {}

    // 带参数的构造函数
    flowerOfLife(int id, string name, int Level, int HealthPoints) : id(id), name(name), level(Level), healthPoints(HealthPoints) {}

    // 虚析构函数,确保派生类的析构函数被调用
    virtual ~flowerOfLife() {}

    // 纯虚函数,用于获取圣遗物的ID
    virtual int Id() const = 0;

    // 纯虚函数,用于获取圣遗物的名称
    virtual string Name() const = 0;

    // 虚函数,用于获取圣遗物的等级
    virtual int level() const { return level; }

    // 虚函数,用于获取圣遗物的生命值
    virtual int HealthPoints() const { return healthPoints; }

    // 纯虚函数,用于获取圣遗物的子条目信息
    virtual string SubEntry() const = 0;

    // 纯虚函数,用于更新圣遗物的子条目信息
    virtual void updateSubEntry() = 0;

protected:
    int id; // 圣遗物的唯一标识符
    string name; // 圣遗物的名称
    int level; // 圣遗物的等级
    int healthPoints; // 圣遗物的生命值
};

// 死之羽抽象类
class Plumeofdeath {
public:
    // 默认构造函数
    Plumeofdeath() {}

    // 带参数的构造函数
    Plumeofdeath(int id, string name, int Level, int atk) : id(id), name(name), level(Level), atk(atk) {}

    // 虚析构函数,确保派生类的析构函数被调用
    virtual ~Plumeofdeath() {}

    // 纯虚函数,用于获取圣遗物的ID
    virtual int Id() const = 0;

    // 纯虚函数,用于获取圣遗物的名称
    virtual string Name() const = 0;

    // 虚函数,用于获取圣遗物的等级
    virtual int Level() const { return level; }

    // 纯虚函数,用于获取圣遗物的攻击力
    virtual int ATK() const = 0;

    // 纯虚函数,用于获取圣遗物的子条目信息
    virtual string SubEntry() const = 0;

    // 纯虚函数,用于更新圣遗物的子条目信息
    virtual void updateSubEntry() = 0;

protected:
    int id; // 圣遗物的唯一标识符
    string name; // 圣遗物的名称
    int level; // 圣遗物的等级
    int atk; // 圣遗物的攻击力
};

// 时之沙抽象类
class sandsofTime {
public:
    // 默认构造函数
    sandsofTime() {}

    // 带参数的构造函数
    sandsofTime(int id, string name, int Level) : id(id), name(name), level(Level) {}

    // 虚析构函数,确保派生类的析构函数被调用
    virtual ~sandsofTime() {}

    // 纯虚函数,用于获取圣遗物的ID
    virtual int Id() const = 0;

    // 纯虚函数,用于获取圣遗物的名称
    virtual string Name() const = 0;

    // 纯虚函数,用于获取圣遗物的等级
    virtual int Level() const = 0;

    // 设置攻击力沙
    virtual void setATK(float atk) {}

    // 获取攻击力
    virtual float atk() const { return 0.0; }

    // 设置防御力沙
    virtual void setDefense(float defense) {}

    // 获取防御力
    virtual float Defense() const { return 0.0; }

    // 设置生命值沙
    virtual void setHealthPoints(float healthPoints) {}

    // 获取生命值
    virtual float healthPoints() const { return 0.0; }

    // 设置元素充能沙
    virtual void setEnergyRecharge(float energyRecharge) {}

    // 获取元素充能
    virtual float EnergyRecharge() const { return 0.0; }

    // 设置元素精通沙
    virtual void setElementalMastery(int mastery) {}

    // 获取元素精通
    virtual int ElementalMastery() const { return 0; }

    // 纯虚函数,用于获取圣遗物的子条目信息
    virtual string SubEntry() const = 0;

    // 纯虚函数,用于更新圣遗物的子条目信息
    virtual void updateSubEntry() = 0;

protected:
    int id; // 圣遗物的唯一标识符
    string name; // 圣遗物的名称
    int level; // 圣遗物的等级
};

设计圣遗物(空之杯,理之冠)设计实例

class emptyCup {

    emptyCup();
    emptyCup(int id, string name, int Level);

    virtual ~emptyCup() {};
    virtual int Id() = 0;
    virtual string Name() = 0;
    virtual int Level() = 0;

    // 设置火伤属性 主词条
    virtual void setFireinjury(float fireInjury) {}

    // 获取火伤属性 主词条
    virtual float Fireinjury() { return 0.0; }

    // 设置水伤属性 主词条
    virtual void setWaterinjury(float waterInjury) {}

    // 获取水伤属性 
    virtual float Waterinjury() { return 0.0; }

    // 设置草伤属性 主词条
    virtual void setGrassinjury(float grassInjury) {}

    // 获取草伤属性主词条
    virtual float Grassinjury() { return 0.0; }

    // 设置雷伤属性主词条
    virtual void setthunderinjury(float thunderInjury) {}

    // 获取雷伤属性主词条
    virtual float thunderinjury() { return 0.0; }

    // 设置风伤属性主词条
    virtual void setWindinjury(float windInjury) {}

    // 获取风伤属性主词条
    virtual float Windinjury() { return 0.0; }

    // 设置冰伤属性主词条
    virtual void setIceinjury(float iceInjury) {}

    // 获取冰伤属性主词条
    virtual float Iceinjury() { return 0.0; }

    // 设置岩伤属性 主词条
    virtual void setRockinjury(float rockInjury) {}

    // 获取岩伤属性 主词条
    virtual float Rockinjury() { return 0.0; }

    // 设置物伤属性 主词条
    virtual void setPhysicalinjury(float physicalInjury) {}

    // 获取物伤属性 主词条
    virtual float Physicalinjury() { return 0.0; }

    // 设置攻击力 主词条
    virtual void setAttack(float attack) {}

    // 获取攻击力 主词条
    virtual float Attack() { return 0.0; }

    // 设置防御力 主词条
    virtual void setDefense(float defense) {}

    // 获取防御力 主词条
    virtual float Defense() { return 0.0; }

    // 设置生命 主词条
    virtual void setLife(float life) {}

    // 获取生命 主词条
    virtual float Life() { return 0.0; }

    // 设置元素精通主词条
    virtual void setElementsMastery(int mastery) {}

    // 获取元素精通主词条
    virtual int elementsMastery() { return 0; }


protected:
    int id;
    string name;
    int level;
};

class CrownOfReason {

public:
    CrownOfReason();
    CrownOfReason(int id, string name, int Level);

    virtual ~CrownOfReason() {};
    virtual int Id() = 0;
    virtual string Name() = 0;
    virtual int Level() = 0;
    // 设置攻击力主词条
    virtual void setAttack(float attack) {}
    // 获取攻击力冠
    virtual float Attack() { return 0.0; }

    // 设置防御主词条
    virtual void setDefense(float defense) {}

    // 获取防御主词条
    virtual float Defense() { return 0.0; }

    // 设置生命主词条
    virtual void setLife(float life) {}

    // 获取生命主词条
    virtual float Life() { return 0.0; }

    // 设置元素精通主词条
    virtual void setElementsMastery(int mastery) {}

    // 获取元素精通主词条
    virtual int elementsMastery() { return 0; }

protected:
    int id;
    string name;
    int level;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1843705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ECharts 雷达图案例002 - 诈骗性质分析

ECharts 雷达图案例002 - 诈骗性质分析 📊 ECharts 雷达图案例002 - 诈骗性质分析 深入挖掘数据背后的故事,用可视化手段揭示诈骗行为的模式和趋势。 🔍 案例亮点 创新的数据展示方式,让复杂的诈骗数据一目了然。定制化的雷达图…

Redis分片集群搭建

主从模式可以解决高可用、高并发读的问题。但依然有两个问题没有解决: 海量数据存储高并发写 要解决这两个问题就需要用到分片集群了。分片的意思,就是把数据拆分存储到不同节点,这样整个集群的存储数据量就更大了。 Redis分片集群的结构如…

[leetcode hot 150]第十五题,三数之和

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…

Opencv学习项目3——pytesseract

上一次我们使用pytesseract.image_to_data(img)来检测文本,这次我们来只检测数字 项目演示 可以看到,我们只检测了数字其他的并没有检测出来 代码实现 前面两次介绍了opencv的画矩形和设置文本,这次就直接用了,不太明白的可以看…

Unity和UE免费领恐怖书本头怪兽角色模型恐怖或奇幻游戏monster适合FPS类型PBR202406202143

Unity和UE免费领恐怖书本头怪兽角色模型恐怖或奇幻游戏monster适合FPS类型PBR202406202143 Unity恐怖书本头怪兽角色模型:https://prf.hn/l/zpBqgVl UE恐怖书本头怪兽角色模型:https://prf.hn/l/4PzY1Qy 作者其他资产:https://prf.hn/l/0…

(创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据

目录 一、主要内容: 二、运行效果: 三、VMD-BiLSTM负荷预测理论: 四、代码数据下载: 一、主要内容: 本代码结合变分模态分解( Variational Mode Decomposition,VMD) 和卷积神经网络(Convolutional neu…

C++学习(23)

#学习自用# union 共用体和结构体相似&#xff0c;但是共用体一次只能占用一个成员的内存&#xff0c;所有成员共用同一地址。 #include<iostream> using namespace std; union A {int int_val;float float_val; }a; int main() {a.float_val 2.0f;cout << a.f…

Sping源码(九)—— Bean的初始化(非懒加载)— Bean的创建方式(factoryMethod)

序言 前面文章介绍了在Spring中多种创建Bean实例的方式&#xff0c;包括采用FactoryBean的方式创建对象、使用反射创建对象、自定义BeanFactoryPostProcessor。 这篇文章继续介绍Spring中创建Bean的形式之一——factoryMethod。方法用的不多&#xff0c;感兴趣可以当扩展了解。…

电子书(chm)-加载JS--CS上线

免责声明: 本文仅做技术交流与学习... 目录 cs--web投递 html(js)代码 html生成chm工具--EasyCHM 1-选择powershell 模式 生成 2-选择bitsadmin模式生成 chm反编译成html cs--web投递 cs配置监听器--->攻击---->web投递---> 端口选择没占用的, URL路径到时候会在…

HALCON-从入门到入门-霍夫识别直线

1.废话 霍夫变换是一种特征检测&#xff0c;被广泛应用在图像分析、计算机视觉以及数位影像处理。霍夫变换是用来辨别找出物件中的特征&#xff0c;例如&#xff1a;线条。他的算法流程大致如下&#xff0c;给定一个物件、要辨别的形状的种类&#xff0c;算法会在参数空间中执…

【JavaEE】Spring Boot MyBatis详解(二)

一.解决数据库字段名和对象属性名冲突的问题. 产生这个问题的本质原因就是Java 属性名和数据库字段的命名规范不同. 这个问题的本质就是查询数据库返回了字段,但是不知道和Java对象的哪个属性相对应 1.注解的解决方法 注解的解决方式有三种: 方式一:给数据库字段起别名. 本质…

Zookeeper 一、Zookeeper简介

1.分布式系统定义及面临的问题 分布式系统是同时跨越多给物理主机&#xff0c;独立运行的多个软件所组成的系统。类比一下&#xff0c;分布式系统就是一群人一起干活。人多力量大&#xff0c;每个服务器的算力是有限的&#xff0c;但是通过分布式系统&#xff0c;由n个服务器组…

Linux环境如何彻底卸载感干净RabbitMQ并重新安装

Linux&#xff08;Centos7&#xff09;环境如何彻底卸载感干净RabbitMQ并重新安装 我这个是超级简单的&#xff0c;如果安装不好&#xff0c;顺着网线来找我 一、卸载RabbitMq相关的软件包 1. 先停止RabbitMq服务 systemctl stop rabbitmq-server2. 查看rabbitmq安装的相关…

Microsoft Edge浏览器安装crx拓展插件教程

1、首先打开edge浏览器&#xff0c;点击顶部地址栏。 2、在地址栏中输入"edge://flags/#extensions-on-edge-urls"并按下回车。2、在地址栏中输入"edge://flags/#extensions-on-edge-urls"并按下回车。 3、进入后&#xff0c;将图示选项改为“已禁用”。 …

Redis缓存的一些概念性问题

目录 缓存模型和思路 缓存更新策略 数据库和缓存不一致 缓存与数据库双写一致 缓存穿透 缓存雪崩 缓存击穿 速度快,好用&#xff0c;内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力 缓存模型和思路 标准的操作方式就是查询数据库之前先…

多线程下JVM内存模型 和 volatile关键字

1、线程的概念 线程&#xff08;thread&#xff09;是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流&#xff0c;一个进程中可以并发多个线程&#xff0c;每条线程并行执行不同的任务…

从复用性角度阐述中台建设

目录 复用性中台定义深思中台建设产品线形态何时演变中台能力落地中台 业务中台架构总结 技术学习永不止步&#xff0c;最近也是看了很多关于架构设计相关的专栏&#xff0c;慢慢总结出来一部分知识&#xff0c;代入自己的思考与理解&#xff0c;以及结合并反思自己之前公司的架…

开源!在goview中实现cesium的低代码可视化编辑

大家好&#xff0c;我是日拱一卒的攻城师不浪&#xff0c;专注可视化、数字孪生、前端、nodejs、AI学习、GIS等学习沉淀&#xff0c;这是2024年输出的第19/100篇文章&#xff1b; 前言 前阵子写了一篇goview二开的文章教程&#xff0c;很多小伙伴留言对goview嵌套cesium并实现…

【Python日志模块全面指南】:记录每一行代码的呼吸,掌握应用程序的脉搏

文章目录 &#x1f680;一、了解日志&#x1f308;二、日志作用&#x1f308;三、了解日志模块⭐四、日志级别&#x1f4a5;五、记录日志-基础❤️六、记录日志-处理器handler&#x1f3ac;七、记录日志-格式化记录☔八、记录日志-配置logger&#x1f44a;九、流程梳理 &#x…

基于Windows API DialogBox的对话框

在C中&#xff0c;DialogBox函数是Windows API的一部分&#xff0c;它用于在Win32应用程序中创建并显示一个模态对话框。DialogBox函数是USER32.DLL中的一个导出函数&#xff0c;因此你需要在你的C Win32应用程序中链接到这个库。 #include "framework.h" #include …