经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 游戏设计 » 查看文章
从零开始实现放置游戏(十六)——道具系统(1)道具字典
来源:cnblogs  作者:丶谦信  时间:2021/3/24 8:44:37  对本文有异议

 

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

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

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

一、道具分类

1.概念设计

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

图1.道具分类图 

 

图2.装备分类图

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

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

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

2.数据库设计

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

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

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

  建表语句如下:

  1. CREATE TABLE `item_type` (
  2. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',
  3. `code` varchar(20) NOT NULL DEFAULT '' COMMENT '编码',
  4. `parent_code` varchar(20) NOT NULL DEFAULT '' COMMENT '父编码',
  5. `root_code` varchar(20) NOT NULL DEFAULT '' COMMENT '根节点编码',
  6. `level` int NOT NULL DEFAULT '0' COMMENT '层级',
  7. `value` varchar(20) NOT NULL DEFAULT '' COMMENT '',
  8. `remark` varchar(100) NOT NULL DEFAULT '' COMMENT '备注',
  9. `create_user` varchar(20) NOT NULL DEFAULT '' COMMENT '创建人',
  10. `update_user` varchar(20) NOT NULL DEFAULT '' COMMENT '修改人',
  11. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  12. `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  13. `is_delete` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0-否 1-是',
  14. `version` int NOT NULL DEFAULT '0' COMMENT '版本号',
  15. PRIMARY KEY (`id`),
  16. UNIQUE KEY `uidx_code` (`code`),
  17. KEY `idx_parent_code` (`parent_code`)
  18. ) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='道具类型字典表';
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 等表中。

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

  1. CREATE TABLE `item_common` (
  2. `id` varchar(20) NOT NULL COMMENT '唯一编码(类型编码+序号编码)',
  3. `type_code` varchar(10) NOT NULL DEFAULT '' COMMENT '类型编码',
  4. `name` varchar(20) NOT NULL DEFAULT '' COMMENT '物品名称',
  5. `description` varchar(500) NOT NULL DEFAULT '' COMMENT '物品描述',
  6. `quality` varchar(10) NOT NULL DEFAULT '' COMMENT '物品品质',
  7. `item_level` int NOT NULL DEFAULT '1' COMMENT '物品等级',
  8. `required_level` int NOT NULL DEFAULT '1' COMMENT '等级要求',
  9. `required_job` varchar(10) NOT NULL DEFAULT '' COMMENT '职业要求',
  10. `stack_size` int NOT NULL DEFAULT '1' COMMENT '堆叠数量',
  11. `price_buy` int NOT NULL DEFAULT '0' COMMENT '购买价格',
  12. `price_sell` int NOT NULL DEFAULT '0' COMMENT '出售价格',
  13. `can_trade` tinyint NOT NULL DEFAULT '1' COMMENT '是否可交易 0:否 1:是',
  14. `can_drop` tinyint NOT NULL DEFAULT '1' COMMENT '是否可丢弃 0:否 1:是',
  15. `is_unique` tinyint NOT NULL DEFAULT '0' COMMENT '是否唯一 0:否 1:是',
  16. `extend_prop` varchar(8000) NOT NULL DEFAULT '' COMMENT '扩展属性',
  17. `create_user` varchar(20) NOT NULL DEFAULT '' COMMENT '创建人',
  18. `update_user` varchar(20) NOT NULL DEFAULT '' COMMENT '修改人',
  19. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  20. `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  21. `is_delete` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0-否 1-是',
  22. `version` int NOT NULL DEFAULT '0' COMMENT '版本号',
  23. PRIMARY KEY (`id`),
  24. KEY `idx_item_type_code` (`type_code`)
  25. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='道具字典表';
item_common
  1. CREATE TABLE `item_equipment` (
  2. `id` varchar(20) NOT NULL COMMENT '唯一编码(类型编码+序号编码)',
  3. `type_code` varchar(10) NOT NULL DEFAULT '' COMMENT '类型编码',
  4. `name` varchar(20) NOT NULL DEFAULT '' COMMENT '装备名称',
  5. `damage_min` int NOT NULL DEFAULT '0' COMMENT '最小伤害',
  6. `damage_max` int NOT NULL DEFAULT '0' COMMENT '最大伤害',
  7. `armour` int NOT NULL DEFAULT '0' COMMENT '护甲值',
  8. `hp` int NOT NULL DEFAULT '0' COMMENT '生命值',
  9. `strength` int NOT NULL DEFAULT '0' COMMENT '力量',
  10. `agility` int NOT NULL DEFAULT '0' COMMENT '敏捷',
  11. `intellect` int NOT NULL DEFAULT '0' COMMENT '智力',
  12. `stamina` int NOT NULL DEFAULT '0' COMMENT '耐力',
  13. `extend_attr` varchar(8000) NOT NULL DEFAULT '' COMMENT '扩展属性',
  14. `create_user` varchar(20) NOT NULL DEFAULT '' COMMENT '创建人',
  15. `update_user` varchar(20) NOT NULL DEFAULT '' COMMENT '修改人',
  16. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  17. `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  18. `is_delete` tinyint NOT NULL DEFAULT '0' COMMENT '是否删除 0-否 1-是',
  19. `version` int NOT NULL DEFAULT '0' COMMENT '版本号',
  20. PRIMARY KEY (`id`),
  21. KEY `idx_equipment_type_code` (`type_code`)
  22. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='装备字典表';
item_equipment

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

 

 三、效果演示

 

四、小结

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

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

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

    

    本章源码下载地址: https://474b.com/f/14960372-485827531-39583c (访问密码:9502)

    项目交流群:329989095

 

原文链接:http://www.cnblogs.com/lyosaki88/p/idlewow_16.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号