从零开始实现放置游戏(十六)——道具系统(1)道具字典

简介: 道具系统是游戏的核心系统之一,常见的业务功能包括 “角色背包”, “道具商店”, “怪物掉落” 等,都依赖道具系统。    在实现这些功能之前,首先要解决的问题就是要定义我们的游戏世界中,到底会有哪些道具, 以及这些道具是如何分类的?    这就是我们这期要做的“道具字典“。首先必须要有一个“字典”来说明这个道具是什么,接下来才能有“背包”系统,来表示角色的背包里有些什么道具,数量有多少。

  道具系统是游戏的核心系统之一,常见的业务功能包括 “角色背包”, “道具商店”, “怪物掉落” 等,都依赖道具系统。


    在实现这些功能之前,首先要解决的问题就是要定义我们的游戏世界中,到底会有哪些道具, 以及这些道具是如何分类的?


    这就是我们这期要做的“道具字典“。首先必须要有一个“字典”来说明这个道具是什么,接下来才能有“背包”系统,来表示角色的背包里有些什么道具,数量有多少。


一、道具分类


1.概念设计


    我们先参照魔兽世界的道具分类,整理出分类大致如下(见脑图)。


502227-20210315010657468-1581050006.png                                            

                                                    图1.道具分类图


 502227-20210315010712099-351466945.png


                                        图2.装备分类图


 从图中可以看出,整个分类是一个树形结构。


      “道具“大类下,目前是一个二层的树形结构,里面包括“雕文”,“坐骑”,“食物”等,这些分类和现有系统联系不紧密,需要额外开发使用这些道具的玩法系统,可以暂时先不过多考虑。


  “装备”大类下,是一个三层的树形结构。装备系统和战斗结算,人物战斗属性关系紧密,我们接下来将前主要设计装备字典。


2.数据库设计


  前几章,实现了系统的数据字典,但那个字典主要适用于枚举选项,是一个平面型的数据结构,对装备类型就不适用了。


  比如,在分类选择时,想要选择 “武器” -> “单手武器” -> "单手剑",这样一级一级往下选择,就难以实现了。


  因此,需要额外设计一张能够处理树形结构的“道具类型表”。在数据字典表的基础上,加两个字段 level(当前层级), rootCode(根节点编码)即可。


  建表语句如下:


item_type.sql


3.内容管理


  表结构有了,参照前面的章节,只要建好对应的实体类,在RMS系统中,添加对应的菜单,实现相应的逻辑即可。


  注意启动时,把道具分类也加载到缓存中(在StartUpListener类中)。


  (可参照源码,就不展开了。具体类型编码在源代码里的策划文档中,也可自行定义)


二、道具字典


    有了分类,接下来就可以定义道具字典了(即定义游戏中所有可能出现的道具)。


1.道具编码


    为了区分道具的类型,我们有必要制定一套编码规范,来唯一标识一个道具。格式如下:


    道具类型标识 = 类型编码(5位) + 序列号(5位),比如:单手剑 = 61101, 钝剑是此类型中的第一个道具,编码为6110100001。


    背包道具ID = 道具类型标识(10位)+ 时间戳(12位)+ 序列号(4位),比如:打怪掉落的钝剑,在玩家背包里的道具ID为 61101000012103151200360001。


    即,系统中同类型的装备,最多可以定义10万种。同一种装备,1秒钟最多可以产生1万个。


    这里类型编码是在策划文档中定义好,序列号是在Redis中做incr操作获取,具体可参见源码。


2.数据表结构设计


    在设计数据表的时候,考虑到不管是普通道具,还是装备道具,都有一些通用的属性,比如:名称、描述、品质、是否可交易、是否唯一、是否可丢弃等等。


    对此,可以设计一张道具基础表,item_common,来记录所有道具的基本信息。


    而装备表特有的属性,比如:伤害值,护甲值,生命值,力量,敏捷,等等,则存到装备表里 item_equipmen。


    等后面设计普通道具表时,比如烹饪,卷轴,坐骑等,则可以扩展到 item_normal 等表中。


    这样设计,可以防止单表的字段过多。


 item_common


item_equipment


具体到代码中建模的类图,大致如下:


502227-20210315024420754-1290679589.png


三、效果演示


微信图片_20220423223521.gif


四、小结


    本章主要实现的道具分类和道具字典的基本配置。


    道具种类繁多,需要策划一个个配,这里我只配了十几个单手剑的属性,用作演示。


    预计下一章会在游戏模块简单实现下角色背包

相关文章
|
7月前
|
计算机视觉 索引
扫雷-包含空白展开,标记功能,游戏界面优化-控制台全力复刻
扫雷-包含空白展开,标记功能,游戏界面优化-控制台全力复刻
|
3月前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
159 3
|
6月前
|
图形学 索引
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱4(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱4(附带项目源码)
113 2
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱9(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱9(附带项目源码)
31 1
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱10(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱10(附带项目源码)
58 1
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱8(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱8(附带项目源码)
47 1
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱7(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱7(附带项目源码)
34 0
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱2(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱2(附带项目源码)
41 0
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱11(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱11(附带项目源码)
33 0
|
6月前
|
存储 图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱6(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱6(附带项目源码)
39 0