网页游戏BUFF系统的实现

BUFF是很多游戏都在采用的一种临时增益机制。本文讲述如何在基于关系型数据库的网页游戏中实现这一系统;如何扩展该系统;以及如何提高该系统的性能。

BUFF是很多游戏都在采用的一种临时增益机制。本文讲述如何在基于关系型数据库的网页游戏中实现这一系统;如何扩展该系统;以及如何提高该系统的性能。

引言

BUFF是很多游戏都在采用的一种临时增益机制;与之对应,还有用于减益的DEBUFF;部分游戏还引入了不限制持续时间的永久性BUFF。

对于游戏的开发人员来说,BUFF和DEBUFF的差别只是正数和负数的差别,永久性BUFF也只是持续时间很长(超出游戏寿命)的普通BUFF。所以,用统一的系统来实现所有这些机制是完全可行的。

1. 这个BUFF有什么作用

1.1. BUFF的效果

BUFF的效果是BUFF的本质,也是玩家和开发人员真正关心的内容。所以这里我们先来讨论BUFF的效果,并约定用BUFF_KEY来称呼它。

在demo中,我们只提供一种BUFF效果

BUFF_KEY 描述
ATK 增加指定点数的攻击力

1.2. BUFF的强度

有了BUFF的效果,还需要一个数值来描述BUFF的强度,我们称其为BUFF_VALUE。

通过两者的组合,我们已经可以提供多个BUFF了

BUFF BUFF_KEY BUFF_VALUE 描述
ATK1 ATK 1 增加1点攻击力
ATK2 ATK 2 增加2点攻击力
ATK3 ATK -1 降低1点攻击力

这里我们提供了ATK1、ATK2、ATK3三个BUFF,ATK1、ATK2分别可以增加1、2点攻击力,ATK3则是一个DEBUFF,可以降低1点攻击力。

2. 赐予我力量吧——给某个单位加BUFF

BUFF只有加在特定的单位上才有意义,我们用UNIT来表示某个单位,用TIME表示BUFF的过期时间(UNIX时间戳)

UNIT BUFF_KEY BUFF_VALUE TIME 描述
U001 ATK 1 1356105599 单位U001拥有增加1点攻击力的BUFF,持续到1356105599
U001 ATK 2 1318774750 单位U001拥有增加2点攻击力的BUFF,持续到1318774750
U001 ATK -1 1318774760 单位U001拥有降低1点攻击力的DEBUFF,持续到1318774760

如此一来,我们想要知道当前时刻单位U001上ATK类型BUFF的总值,只要找出TIME大于当前时间戳,且BUFF_KEY为ATK的所有记录,并对BUFF_VALUE求和便能得到想要的数值:

SELECT SUM(BUFF_KEY) WHERE UNIT = 'U001' AND TIME > NOW() AND BUFF_KEY = 'ATK'

在时刻1318774745,单位U001有3个有效的ATK类型BUFF,数值为1+2-1=2

在时刻1318774655,单位U001有2个有效的ATK类型BUFF,数值为1-1=0

在时刻1318774765,单位U001有1个有效的ATK类型BUFF,数值为1,事实上,这个BUFF会持续到世界末日。:)


Version 0.1

Last updated 2011-10-17 07:33:16 CST

更多

我的第一个MCP,以及开发过程中的经验感悟

起心动念 上周开发完 sheetex 后,发了条朋友圈。有小伙伴建议搞个 MCP 玩,正好我本来也想学,于是这周就花了一天完成了 sheetex-mcp-server,一个将对话中生成的表格保存成 Excel 的 MCP 服务。 做之前快速调查了一下 smithery 和 modelscope ,发现已经有好几个 Excel 相关的:实现上既有调用本机上的 Office 软件进行操作的,也有用库读写文件的;功能就更加眼花缭乱,从简单读写数据,到插入图表,甚至可以截图保存。 看来是打不过了,好在只是做个练习,开搞。 一天下来,学到不少东西,也填了好几个坑,本文以坑为主。 那么下面就按顺序来了。 新手上路 Build an MCP Server 是官方的教程,新手入门刚刚好,它通过调用天气相关的接口演示了 MCP Server 的开发过程。

By 熊立丁

12KB的Excel导出库sheetex是怎么来的

这是一个关于前端 Excel 导出库 sheetex 的故事:我为什么要做这个库,它为什么会这么小,以及你是否值得一试。 如过你问我“为什么非要在前端导出”,那将是另一个故事。 我的数据导出史 不知道你是否还记得自己是从什么时候开始接触数据导出的? 我对自己的“数据导出史”还算有些印象:在还没有正式工作的时候,如果有人问我要数据,我会在数据库管理工具里写个查询语句,然后视对方的用途,导出成SQL 语句、CSV 文件或者Excel 等;待到工作了,需要开发面向最终用户的系统,就不能再这么手工处理,导出功能成为系统标配,用户点击一个按钮,就要下载到相应的文件。 最早是 CSV 格式,因为其生成相对容易,而且也可以通过 Excel 软件进行查看,加上主要是内部用户,偶有无法打开也只要简单培训就能解决。 但随着用户类型变得广泛起来,这种“偶尔”也逐渐变成无法忍受,那么干脆直接导出 Excel 文件吧,反正开源库也已经成熟,于是使用 SheetJS

By 熊立丁
浙ICP备15043004号-1