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

分析圣遗物

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

因此我们应该 物以类聚 人与群分把每个圣遗物的部分,抽象出来 拿 生之花,死之羽为例 若是抽象 类很好的扩展 添加冒险家的生之花 时候继承生之花 并且名称冒险者- 生之花 当然圣遗物包含(生之花,死之羽,时之沙 空之杯 理之冠)组合而成若装备它
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;
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

返回给前端数据的封装

返回格式如下: { "code": 200/400, "msg": "成功"/"失败", "total": n, "data": [ {},{}]} 1.在common中新增Result 类,代码如下 package com.xxx0523.common; import lombo…

【全网最全最详细】RabbitMQ面试题

一、说下RabbitMQ的架构大致是什么样的? RabbitMQ是一个开源的消息中间件,用于在应用程序之间传递消息。它实现了AMQP(高级消息队列协议)并支持其它消息传递协议,例如STOMP(简单文本定向消息协议&#xff…

【机器学习】机器学习重要方法—— 半监督学习:理论、算法与实践

文章目录 引言第一章 半监督学习的基本概念1.1 什么是半监督学习1.2 半监督学习的优势 第二章 半监督学习的核心算法2.1 自训练(Self-Training)2.2 协同训练(Co-Training)2.3 图半监督学习(Graph-Based Semi-Supervise…

蓝鹏测控公司全长直线度算法项目多部门现场组织验收

关键字:全场直线度算法,直线度测量仪,直线度检测,直线度测量设备, 6月18日上午,蓝鹏测控公司全长直线度算法项目顺利通过多部门现场验收。该项目由公司技术部、开发部、生产部等多个部门共同参与,旨在提高直线度测量精度,满足高精度制造领域需…

[SAP ABAP] 数据类型

1.基本数据类型 示例1 默认定义的基本数据类型是CHAR数据类型 输出结果: 示例2 STRING数据类型用于存储任何长度可变的字符串 输出结果: 示例3 DATE数据类型用于存储日期信息,并且可以存储8位数字 输出结果 提示Tips:日期和时间类型的变量可以直接进…

【数学建模】——【新手小白到国奖选手】——【学习路线】

专栏:数学建模学习笔记 目录 ​编辑 第一阶段:基础知识和工具 1.Python基础 1.学习内容 1.基本语法 2.函数和模块 3.面向对象编程 4.文件操作 2.推荐资源 书籍: 在线课程: 在线教程: 2.数学基础 1.学习内…

视频智能分析平台LntonAIServer安防监控视频平台行人入侵检测算法核心特点及其应用价值

LntonAIServer行人入侵检测算法是一种基于深度学习和计算机视觉技术的先进解决方案,旨在提高监控系统的智能化水平,有效预防未经授权的人员进入重要场所,保障安全生产和管理。以下是关于该算法的主要特点和应用的详细介绍: 核心特…

海外小米上架规则

一、应用创建 第1步:打开小米国际应用商店开发者站 ,点击【分发】,登陆/注册开发者 1.1点击开发者站,点击【分发】 小米国际应用商店开发者站 地址:Mi Developer 1.2使用注册邮箱/手机号码/小米ID登录开发者账号 使…

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

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

AWR1843BOOST上的TM4C1294NCPDT是干啥用的?

摘要:AWR1843BOOST上面有2个体积较大的芯片,一片是雷达,另一片是什么呢? 答案:它就是XDS110仿真器。 有了它,就不用再买一个仿真器了。 从AWR1843BOOST的原理图中可以看到整个 BOOST板子上只有2个比较大的…

java环境变量配置以及“‘javac‘ 不是内部或外部命令”问题的解决方法(2024年6月姆级最新)

😀前言 有很多小伙伴提问这个所以就单独出一个解决教程 java环境变量配置以及“‘javac’ 不是内部或外部命令”问题的解决方法(2024年6月姆级最新) 安装的话可以参考这个 java 安装和环境配置(2024-4月保姆级最新版) 🏠个人主页…

计网课设-发送TCP数据包

一、效果展示 二、代码实现 import nmap import socket import tkinter as tk from tkinter import messagebox,Listbox from threading import Thread#获取自身IP,从而确定当前局域网范围 def get_ip_address():#创建了一个socket对象,socket.AF_INET表…

win10 安装PowerShell

总结: 直接下一步,下一步… 下载链接 https://download.csdn.net/download/qq_43071699/89462517

解读代理 IP差异:ISP 代理与住宅代理

独立IP作为跨境必备工具,代理类型五花八门,今天IPFoxy全球代理将为搭建科普:ISP代理与住宅代理在理论上与使用上的区别。代理充当用户和互联网之间的中介,提供各种功能以增强安全性、隐私性和可访问性。在众多代理类型中&#xff…

大模型应用开发实践:RAG与Agent

RAG planning是任务拆解的一些方法。 Agent RAG现在基本上推荐LangChain开发框架。而Agent目前没有一个通用的好的开发框架/范式。 学习路径

首个AI高考评测结果出炉,GPT-4o排名第二

近日,上海人工智能实验室利用其自主研发的“司南”评测体系OpenCompass,对国内外多个知名大模型进行了一场特殊的“高考”。这些来自阿里巴巴、智谱AI、Mistral等机构,以及OpenAI的GPT-4o等“考生”,接受了新课标I卷“语数外”的全…

RTC实时时钟

一、Unix时间戳 1、Unix 时间戳 (1)Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒 (2)时间戳存储在一个秒计数器中,秒计数器为…

Java按照GBK拼音顺序对汉字排序

最近遇到一个需求,需要对一个列表数据的特定字段,比如姓名,初看应该不难,但是有什么比较快速便捷的方法,因为是Java的项目,所以想到比较火的工具框架Hutool,在Hutool官网 找到一个比较器类Pinyi…

Redis-数据类型-String

文章目录 1、通过客户端连接redis2、查看当前数据库的key的数量3、切换数据库3.1、切换到1数据库3.2、切换到2数据库3.3、切换到默认的数据库,0数据库 4、当前数据库没有数据5、添加键值对6、查看当前库所有key7、清空当前库8、设置存活的秒数(例如验证码…

适配器模式(大话设计模式)C/C++版本

适配器模式 C #include <iostream> using namespace std; // 球员 class Player { protected:string name;public:Player(string name) : name(name) {}virtual void Attack() 0;virtual void Defense() 0;virtual ~Player() {} }; // 前锋 class Forwards : public P…