尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

暗黑类游戏属性系统程序设计思路3.0

暗黑类游戏属性系统程序设计思路3.0
📅 发布时间:2026/6/20 11:46:57

没错,又是暗黑类游戏属性系统(我最近才没有玩暗黑类游戏!)

简述

github地址:https://github.com/hggzhang/PythonTest/tree/main/Attr
这是一个为暗黑Like游戏设计的属性计算系统,支持复杂的属性修饰和依赖关系管理。系统能够处理加法、乘法、额外乘区和覆盖等多种属性修饰方式,并能自动处理属性间的依赖关系,确保属性变化的正确传播

暗黑like游戏属性系统的特点

暗黑类游戏属性系统主要有两大要素,属性计算和依赖处理。

  • 属性计算:暗黑类的游戏基本都采用基础加值 * 基础乘区 * 独立乘区1 * 独立乘区2 . . .的属性计算方式,通过边际效用的约束,让玩家尽量在有限的词条资源中进行组合,以获取更高的数值。
  • 依赖处理:有大量类似你的攻击附加相当于10%HP的基础点伤,你的攻击力永远等于防御力,相关加成不再生效的等相互依赖的效果,这些效果往往是一个构筑策略的灵魂,比如攻击力=防御力这样玩家的构筑只需要拼命堆防御力即可而不需要关心堆叠攻击力,构筑玩法是颠覆性的。

程序设计思路

需求分析

  1. 多种修饰类型:支持加法、乘法、额外乘区和覆盖等属性计算方式
  2. 依赖关系管理:属性之间可以建立依赖关系,当依赖属性变化时自动更新相关属性
  3. 循环依赖检测:防止属性间形成循环依赖导致无限循环
  4. 高效更新机制:使用脏标记和延迟更新策略优化性能
  5. 观察者模式:支持属性值变化的通知机制

核心架构

AttrMgr (管理器)
├── Attr (属性实例)
├── AttrMod (修饰器基类)
│ ├── AttrModAdd (加法修饰)
│ ├── AttrModMul (乘法修饰)
│ ├── AttrModExMul (额外乘区修饰)
│ └── AttrModWithDepc (带依赖的修饰器)
│ └── AttrModSync (同步修饰器)
└── DAG (有向无环图,处理依赖关系)

系统采用分层设计,主要包含以下几个核心组件:

  1. AttrMgr:属性管理器,负责管理所有属性和它们的修饰器
  2. Attr:属性类,封装属性值和计算逻辑
  3. AttrMod:属性修饰器基类,定义不同修饰类型的接口
  4. DAG:有向无环图,用于管理属性间的依赖关系

属性计算流程

  1. 收集所有修饰器对属性的影响
  2. 按照公式计算最终属性值:(add * mul) * ∏(1 + exMuls)
  3. 如果有覆盖值,直接使用覆盖值
  4. 通知所有观察者属性值变化

依赖管理

通过DAG(有向无环图)管理属性间的依赖关系,确保:

  • 不会形成循环依赖
  • 依赖属性变化时正确传播到所有相关属性
  • 支持动态添加和移除依赖关系

程序设计细节

属性修饰系统

class AttrMod(ABC):def __init__(self, attrName, value):self.AttrName = attrNameself._value = value@abstractmethoddef Modify(self, info):pass

系统定义了多种修饰器类型:

  • AttrModAdd:加法修饰器
  • AttrModMul:乘法修饰器
  • AttrModExMul:额外乘区修饰器
  • AttrModWithDepc:带依赖的修饰器
  • AttrModSync:同步修饰器(特殊覆盖类型)
  • ... 可以根据需求拓展

依赖关系与观察者模式

class AttrModWithDepc(AttrMod, AttrObserverInf):def Apply(self, mgr):mgr.RegObserver(self.AttrName, self._depcAttrName, self)self._mgr = weakref.ref(mgr)  # 弱引用防止内存泄漏

带依赖的修饰器实现了观察者接口,当依赖属性变化时:

  • 更新自身的值
  • 标记自己修饰的属性为脏
  • 触发属性重新计算

循环依赖检测

class DAG:def add_edge(self, u, v):if u == v:raise CycleError("Self-loop detected")# 使用DFS检测是否会形成环visited = set()stack = [v]while stack:node = stack.pop()if node == u:raise CycleError("Cycle detected")# ...

DAG类在添加边时进行环检测,防止属性间形成循环依赖。(策划设计侧,也需要工具支持策划的配置检查,防止循环依赖)

高效的更新策略

def GetAttrValue(self, name):self.UpdAttr(name)  # 按需更新return self._attrs.get(name).Get()def CollectAndUpdAttr(self):# 批量更新所有脏属性lcDirtys = self._dirtyAttrs.copy()self._dirtyAttrs.clear()# ...

系统提供了两种更新策略:

  • 按需更新:在获取属性值时检查并更新脏属性
  • 批量更新:通过CollectAndUpdAttr方法批量更新所有脏属性

内存安全设计

self._observers[targetAttrName] = WeakSet()

使用WeakSet存储观察者,避免循环引用导致的内存泄漏。

相关新闻

  • 完整教程:毕设课题:基于Node.js+Express框架+Mysql数据库的助农农产品销售商城设计与实现
  • 经典的混合加密传输协议—PGP
  • cache redis

最新新闻

  • 常年出差无法线下上课,2026 电大中专线上结业毕业政策公示 - cc江江
  • Qwen3.5多模态大模型在ncnn上的端到端部署实战
  • LTX-2音视频生成革命:一站式掌握AI视频创作的完整解决方案
  • 知乎/zhihu接口x-zse-96,__zse_ck签名的代码环境补,算法全流程分析
  • 2026无保卡表盒无需担心,青岛本地甄选名表回收门店实测变现技巧 - 讯息早知道
  • 2026 杭州奢侈品回收实测:5家门店综合评级榜单 - 讯息早知道

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号