游戏高度可配置化(二)用“模型抽象”化解游戏策划和程序员的江湖恩怨

news2024/11/25 2:33:20

游戏高度可配置化(二)用“模型抽象”化解游戏策划和程序员的江湖恩怨

码客 卢益贵 ygluu

关键词:模型抽象、功能抽象、抽象工厂模式、游戏服务端引擎、高度可配置化、恩怨情仇、游戏策划、数据引擎、生产消费模型、订阅-通知模型

一、前言

众所周知,由于游戏策划的丰富想象力导致游戏服务端引擎实现起来非常艰难。因为紧迫的工期和不断变化的需求,在策划和程序之间还上演了不少江湖恩怨。

本文主要介绍模型抽象在游戏服务端引擎开发中的应用。确切的说本文是上篇的补充(游戏高度可配置化(一)[1])。

二、程序员的脾气和宿命

一般程序员都有者对技术执着的宿命通病,如执着地用技术解决性能问题、执着地用技术解决功能问题。在策划一而再、再而三的改变需求时,多数程序只能“疲于奔命”,所以“没有脾气的程序员不是好程序员”。

图1 RD和PM打起来了(图片来源于网络)

图2 被逼疯的程序员(图片来源于网络)

三、策划的抱怨和冤屈

“你按我说的做就得了,配置要简单要灵活。”

“这个功能很简单啊,什么时候完成?”

“我Kao,这么一个小案子花这么多时间还有这么多Bug。”

“不好意思案子改了,你再改下程序”。(不改案子的策划不是好策划

图3 被喷的策划(图片来源于网络)

图4 这么多Bug(图片来源于网络)

四、主策和主程的共同目标

主策:案子什么时候出?

策划:#%¥*&#……

   

主程:这个案子什么时候完成?

程序:&@*@#!*&#¥*......

在短期KPI使然下,开发初期欠下的债都会在运营后慢慢地还。游戏是否成功与代码好坏无关,但与开发效率和质量有关。

主策和主程是优秀的管理者,应该联手着重解决开发效率问题,过程优化是决定效率的关键因素。

图5 主策和主程的共同目标

五、什么是模型抽象

抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。抽象的意义在于通过抽象能透过事物的表面现象抓住事物的本质。[2]

【真正的高手,都具备高度抽象能力】高级开发者,能够根据业务的特点,抽象出软件最合理的设计,使得程序具有良好的可读性和扩展性,通常一开始写出的逻辑就为了以后的重用。许多开发框架就是一步步抽象/埋坑/优化而来的。[3]

1、功能抽象

功能抽象在文本定义为:以系统功能特征为基础的低度抽象。

“人”的功能抽象:头、眼、鼻、手、脚......

2、模型抽象

模型抽象在本文定义为:以实现系统功能的模式为基础的高度抽象。

“人”的模型抽象:大脑、神经中枢、感应组织、行动组织,以此形成一个“感知-思维-传导-执行”的模型,它能以“更加广泛的方式”解决“更加广泛的问题”。

3、抽象高度

模型抽象和功能抽象的抽象高度如图6所示。

图6 模型抽象和功能抽象的高度

图6中有3种抽象应用流(箭头流)。第1种比第3种具有更高的抽象高度,相比第3种能更灵活地解决多数需求。众所周知,抽象是不能100%解决问题的,所以第2种是以第1种(模型抽象)为基础的,相比第3种具有更加便捷和高效的特点,用于解决少数特殊的需求问题。

六、ON-DO模型

1、生产-消费模型

人类活动都是一个生产-消费的过程,游戏也不例外(但对游戏数据的处理以生产-消费模型[5]出现的甚少)。

图7 生产-消费模型

2、ON-DO模型

由于在数字信息世界里,消费不等于消耗,如我们从数据仓库里获得(消费)一个数据,仅是这个数据副本而已并没有产生实际消耗,另外生产结果也不一定是正值。所以综合游戏数据特征,将消费-生产模型演进为ON-DO模型,即当什么条件满足时做什么事情(条件对象和执行对象)。如8所示,

图8 ON-DO模型的可配置化

3、模型抽象比功能抽象更有优势

由图9可知,功能抽象的编码工作量远大于模型抽象。

图9 模型抽象和功能抽象的开发工作量

引用本人之前文章的插图(可配置化数学建模的应用案例图解[5]):

 图10 模型抽象和功能抽象的可配置化对比

如图10所示,模型抽象比功能抽象的可配置化程度更高,应对需求变化更灵活。

4、数据引擎

如前所述,配置层所依赖的数据从哪里来?在消费-生产模型中都会依赖一个数据缓冲的中间件[4],在本人做科研时依赖一个数据交换机的中间件[5],本文把这个中间件称作“数据引擎”[1](下称:数据引擎或de),如图11所示。

图11 数据引擎

每一款游戏都它特定的基础数据和基础行为,只要将他们进行高度信息化后统一纳入到数据引擎的管理范畴中[1],就可以满足在配置层的数据所需,并且还可以在配置层衍生出多维度的数据信息[1]。

 图12 游戏基础数据和基础行为的高度信息化

数据引擎源码下载见[6]

七、游戏数据形态的模型抽象

依据游戏数据形态抽象出两种管理模型:1、递进式模型,2、并列式模型。依据数据变化的响应模式抽象出两种模式:1、观察者模式(监听,订阅-通知模型),2、探测者模式(查询)。管理模型和响应模式可以俩俩组合的。

图13 递进式模型的配置实现

图14 递进式模型观察者模式的伪代码实现

图15 并列式模型的配置实现

图16 并列式模型探测者模式的伪代码实现

图17 其他数据配置样例

由图13、图15、图17可知,在ON-DO模型下,各种数据统一了配置格式,减少了配置样式和Load代码的开发成本。由图14、图16可知,在ON-DO模型下,无论是哪种数据管理模式和哪种数据响应模式,编码的成本是非常低的。

八、游戏行为模式的模型抽象(维度空间模型抽象)

每种游戏都它既定的行为模式,每一种行为都可以产生不同维度的数据,把行为模式抽象成维度空间模型[5],每个维度空间执行不同的配置项,如图18所示。


图18 维度空间模型

图19 维度空间模型的配置实现

图20 维度空间模型的伪代码实现

由图19可知,ExeObj对象支持txt格式的流程控制表达文件(txt)和脚本对象,也可以支持和图13、图15、图17一样的数据运算表达式。由图20可知,维度空间模型的编码成本依然还是非常低。

流程控制表达式样例如图21所示(脚本就不再举例):

图21 流程控制表达式样例

九、留给策划更广阔的想象空间(游戏服务端引擎)

如前所述,ON-DO模型抽象(数据引擎)有以下特点:1、极大的降低编码成本,2、高度实现可配置化,3、在配置层可衍生数据,4、在配置层可实现游戏场景布置(流程控制,时间原因暂无样例说明)。

综上所述,游戏服务端引擎应该具备两个特点:1、高度可配置化:能够易用灵活地应对多数策划需求;2、模块化编码:可以便捷高效地编码以满足少数策划需求。

当然,高度可配置化必须建立在“广泛和易用”的原则之上,不要盲目为了可配置化而可配置化。

所以,基于模型抽象的游戏服务端引擎,能留给策划更广阔的想象空间(减少策划和程序的冲突概率)。

十、相关链接

[1] 游戏高度可配置化——通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解:

https://blog.csdn.net/guestcode/article/details/129214458

[2]、抽象的概念:

冯回祥,第100页.思维方法与数学教学 思维方法在小学数学教学中的应用:华中科技大学出版社,2018.01:100-101

抽象(科学学概念)_百度百科

https://baike.baidu.com/item/%E6%8A%BD%E8%B1%A1/9021828?fr=aladdin

[3]、真正的高手,都具备高度抽象能力:

https://blog.csdn.net/weixin_45719624/article/details/102482305

[4] 消费-生产模型参考:

https://www.cnblogs.com/chentingk/p/6497107.html

[5] 可配置化数学建模的应用案例图解:

https://blog.csdn.net/guestcode/article/details/127469191
[6] 数据引擎(data-e)下载链接:

https://github.com/ygluu/data-e
 

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

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

相关文章

Go语言之基础入门

网站:http://hardyfish.top/ 免费书籍分享: 免费专栏分享: Go语言优势 语法简洁,相比其他语言更容易上手,开发效率更高; 自带垃圾回收(GC),不用再手动申请释放内存&…

管综 之 逻辑

1.复言命题 1.1假言推理 1.命题模型识别:当题干中出现如果那么,只有才,当且仅当等典型关联词时此题考的是简单假言推理问题 2.三步解题法:1️⃣:画箭头 2️⃣:递否 3️⃣:找答案 口诀: [口诀1]充分条件前推后 [口诀2]逆否命题等价于原命题 […

第13关:存储过程1、第14关:存储过程2。(2021数据库期末一)

目录 首先需要学习和了解的知识 第13关:存储过程1 任务描述 答案 第14关:存储过程2 任务描述 答案 本篇博客的答案博主是学习别人得来的,敢于借鉴和学习哈哈!! 首先需要学习和了解的知识 了解什么是存储过程以及…

3D开发工具HOOPS为BIM应用提供支持:复杂大模型实现Web端轻量化!

在数字化转型的浪潮中,Tech Soft 3D以其HOOPS SDK工具包,为软件开发人员提供了强大的支持。这一工具包不仅支持Windows、Linux、OSX和移动平台等多样化的操作系统,还使得开发人员能够构建出庞大而复杂的建筑和BIM应用程序。HOOPS SDK的多格式…

现在的Android程序员为什么会感到焦虑?焦虑的源头在哪里?该怎么去缓解焦虑呢?——没有无中生有的贩卖焦虑,只有你的挣扎和不甘。

二、知识为何产生焦虑 先说两个世界,知识的世界和现实的世界。 知识的世界,由承载知识的那些载体组成,比如图书、音视频、报刊、自媒体等。 现实的世界,就是我们每天生活的、做出各种行为的世界。 学习的目的是什么呢&#xff1…

纯js开发在线截图生成器工具,思路和方法在这里

不谈使用转账付款交易截图的用途是什么,我这里只谈怎么通过代码来实现这个功能的思路,以及用到的技术。 最近有个客户找到探奇客需要定制一个截图生成的工具。开发后的效果是这样的 开发这个转账付款交易截图生成器用到了这些组件,这里就直接…

UsersGUI.java用户界面

完成效果图: 点击阅读按钮: 点击删除按钮: 点击新建按钮: Code /* This GUI application allows users to manage their diaries: ​ Read: Users can read existing diaries. Create: Users can create new diaries. Delete: Us…

2024年【N1叉车司机】考试及N1叉车司机考试题库

题库来源:安全生产模拟考试一点通公众号小程序 N1叉车司机考试是安全生产模拟考试一点通总题库中生成的一套N1叉车司机考试题库,安全生产模拟考试一点通上N1叉车司机作业手机同步练习。2024年【N1叉车司机】考试及N1叉车司机考试题库 1、【多选题】《中…

如何与情绪好好相处,真正成为情绪的主人

一、教程描述 若要成为一个聪明的人,就要学会做情绪的主人,而不是被情绪控制自己,为什么要做情绪的主人?至少有以下两个方面原因。 其一,都说,世上还是好人多。可是,为什么你身边没有一个好人…

java基于ssm+jsp 人才公寓管理系统

1管理员功能模块 管理员登录,通过填写用户名、密码进行登录,如图1所示。 图1管理员登录界面图 管理员登录进入人才公寓管理系统可以查看个人中心、住户管理、小区公告管理、停车位管理、安保人员管理、安保值班管理、房屋信息管理、外来登记管理、物品…

知乎客户端跨平台-Hybrid-调试实战

在开发上述功能的过程中,发现了 flipper 这个工具 flipper 提供了一个桌面客户端,然后这个桌面客户端提供了一个和手机客户端通信的机制,免去了 socket 服务的开销,依靠这个通信机制,我们可以把上述的功能复制过来 基…

淦!在外包开发的三年给整废了,备战两个月终拿到Android阿里字节哈啰offer总结,阿里P6+这回稳了!

面试时候就感觉不靠谱,因为面试地点是位于近江附近的望江国际里面的温州银行,面试前网上搜了广电运通的信息,说是国企,所以我就硬着头皮接下 offer 了,没想到面试 Android 结果做的 C,而且也是驻场开发。 …

1.1 数据采集总览

正所谓巧妇难为无米之炊,数据采集是数据处理的第一步。 什么是数据采集 数据采集,也称为数据收集,是将原始数据从各种来源获取并存储起来的过程。这个过程是数据分析和数据仓库建设的第一步,涉及到从不同的数据源中提取数据&…

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解 码客 卢益贵 ygluu 关键词:游戏策划 可配置化 模块化配置 数据引擎 条件系统 红点系统 一、前言 在插件式模块化软件开发当中,既要模块高度独…

MK的前端精华笔记

文章目录 MK的前端精华笔记第一阶段:前端基础入门1、(1)、(2)、 2、3、4、5、6、7、 第二阶段:组件化与移动WebAPP开发1、(1)、(2)、 2、3、4、5、6、7、 第三…

新能源燃气灶用的是什么燃料?无需燃料,电生明火

新能源燃气灶广义的讲就是用电生明火的烹饪灶具,如:电焰灶、电燃灶或电火灶,无需任何燃料和氧气助燃;而狭义上讲是采用出电能以外的一切新燃料烹饪灶具,如:高功率燃气灶、生物合成油灶等。在厨房革命的浪潮…

C++系列-String(一)

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” string是用于字符串,可以增删改查 首先,我们来看一下string的底层 接下来,我们来看一下string的常用接口有哪些: #define _CRT_S…

双非本,3年时间从外包到阿里P6(Android岗),看我是怎么逆袭成功的?

而在小公司,因为我也在小公司呆过,所以我有最直接的感受。整个部门技术人员没几个,我又大学刚毕业,带我的人,问啥啥不会,只有一个大佬,跳槽来的,是我们技术总监,有问题谁…

stm32学习笔记---新建工程步骤和点灯演示

目录 STM32的三种开发方式 基于寄存器的方式 基于库函数的方式 基于Hal库的方式 固件库介绍 新建基于标准库的工程步骤 配置寄存器来完成点灯操作 添加库函数来完成点灯操作 添加库函数 开始点灯操作 第一步:使能时钟 第二步:配置端口模式 …

如何降低MCU系统功耗?

大家在做MCU系统开发的时候,是否也碰到过降低MCU系统功耗的需求? MCU系统整板功耗是个综合的数据,包括MCU功耗以及外部器件功耗,在此我们主要介绍如何降低MCU的功耗: 可以在满足应用的前提下,降低MCU的运…