天工维度魔兽争霸开发者社区-全国最大的TJ集中营-原提百万联盟

标题: 【通用】哈希表的应用实例(三) [打印本页]

作者: Seago    时间: 2020-8-29 18:38
标题: 【通用】哈希表的应用实例(三)
本帖最后由 Seago 于 2020-8-29 18:39 编辑

哈希表的应用实例(三)——面向接口编程
“面向接口编程”可以说是面向对象的一种实现方式。
Jass并不能实现狭义概念上的“接口”,这里说的是广义上的接口思想。通俗来说,“接口”可以理解为双方达成共识的一种交互规则。
比如插头和插座。对插座而言,只要插头的型号和它匹配就可以插进去通电,至于插头所连接的到底是什么电器他并不关心。对于插头而言,只要有和它匹配的插座他就可以插上去通电供电器使用,而并不在乎到底是哪里的插座。
不难发现,“接口”使得数据与功能得以分离,让我们的系统搭建更加灵活。我们可以专注于功能的开发,而不在乎数据的获取形式——因为彼此已经达成了统一的数据交互方式。换言之,我们可以脱离地图独立完成功能的编码,具体的数值可以后续再进行补充而不影响我们已经开发好的功能。

以(二)中的实例练功房刷兵来说。
核心功能是刷兵,刷兵需要两个核心属性:“怪物类型”、“刷兵数量”。所以我们抽象出了一个虚拟的“练功房”对象,每次刷兵时只需要去获取对应对象的相应属性即可。刷兵的功能是独立的触发,对象数据的填充可以再别处进行,即:初始化时预置默认数据、变更怪物类型、数量时直接修改“练功房”的属性。
第一部分:
预置数据。lgf这个哈希表变量可以看作是我们设计的对象,也可以看作是这个功能的接口。
(, 下载次数: 56)
(, 下载次数: 72)
用不同的整数来分别作为怪物类型(typeKey)、怪物数量(numKey)在哈希表中的索引。主索引上的1用来代表是玩家1,其他玩家数据依次类推。
向哈希表中填入数据的过程就是进行接口的实例化。
(这里要说明一点,在jass中,单位类型、物品类型其实都是整数,所以哈希表存数据时只能保存整数,而没有单位类型的选项。这也是我说用T不方便的原因。T对于哈希表的处理确实不太友好。)

第二部分:
刷兵功能
(, 下载次数: 65)
这里只是简单处理。根据不同的玩家来获取到刷兵的数量进行循环,创建单位时获取怪物类型。创建的位置、面向角度等,也可以考虑作为练功房的属性。

第三部分:
修改数据
(, 下载次数: 61)
这一部分是以购买物品的形式进行怪物的切换。自定义值的设置部分被我省略了,和第一部分一起进行即可。
直接将物品的自定义值赋予练功房的相关属性。避免了繁琐的if判断。

我们借鉴了“接口”的概念并进行了简化——根据功能的需求来设计对象的属性,这一设计就可以看作是这个功能对外的接口,而哈希表中记录的对象的不同数据就可以看作是对接口的不同实现方式。示例中只是进行了简化的形式展示,具体应用时自行完善。




作者: jzclikeyz21    时间: 2020-8-30 11:39
感谢楼主的分享!
作者: mpdf1995    时间: 2020-8-30 17:29
厉害了我的楼主
作者: 雨散云飞    时间: 2020-8-30 23:29
大佬,讲解不错,下次讲下自定义值
作者: Seago    时间: 2020-8-31 02:06
雨散云飞 发表于 2020-8-30 23:29
大佬,讲解不错,下次讲下自定义值

自定义值其实没啥好讲的,就是YDWE封装好的一套哈希表用法。主要我平时是用J的,几乎没用过T,所以对【逆天】的很多功能只是知道他的原理,但具体用法我讲不出太多细节。
作者: CNWorth    时间: 2020-9-1 09:31
崔更崔更~继续学习~
作者: Sun丶包子    时间: 2020-9-1 22:39
学习了学习了。。。。。
作者: chance125    时间: 2020-9-2 09:43
学习了学习了
作者: q345895843    时间: 2020-9-3 16:39
支持一下
作者: sanyangzhihuo    时间: 2020-9-3 16:55
秒啊 方便好多
作者: 3429    时间: 2020-9-4 12:19
楼主试试使用自定义值,因为自定义值是用哈希表实现的,解决了哈希表可读性差的问题,所以用自定义值可能会好用一点。
以下是用哈希表实现自定义值的方法:
单位自定义值:
主索引:转换单位句柄为整数(h2i)
子索引:转换字符串为整数,例如,这个字符可能是“暴击率”、“暴击伤害”、“法术强度”。

除了自定义值,你也可以使用struct结构,例如你可以创建单位的struct结构,里面直接记录了单位的十几个、任意个数据,使用起来也很方便。

作者: Seago    时间: 2020-9-4 18:26
3429 发表于 2020-9-4 12:19
楼主试试使用自定义值,因为自定义值是用哈希表实现的,解决了哈希表可读性差的问题,所以用自定义值可能会 ...

谢谢。自定义值和struct我在别的文章里有提过。因为我本身是用J的, 所以基本不会用自定义值,也给不出太详细的建议。struct的底层也是用数组和哈希表实现的。我个人是不太建议太过依赖struct,因为Jass调试起来非常麻烦,而且排泄方便也容易产生问题。相比struct我更倾向用文本宏去封装一层哈希表的读取,虽然多点代码,但是出问题的时候比较好定位。
作者: xiangnan88    时间: 2020-9-5 17:08
看看啊啊啊啊啊啊啊啊啊
作者: 347780682    时间: 2020-9-23 14:59
终于等到实操了
作者: han6991833    时间: 2020-9-23 22:37
大佬 每期都看,求讲讲ui
作者: Seago    时间: 2020-9-24 00:52
han6991833 发表于 2020-9-23 22:37
大佬 每期都看,求讲讲ui

UI我也属于新手阶段,很多东西还在摸索,不确定的东西不能拿出来误导别人。后面有一定经验了再写UI的。
作者: Phantom丶    时间: 2020-9-28 17:12
感谢大佬~
作者: q7357776    时间: 2020-11-12 23:56
看看,很棒的教程!!
作者: FrostKing    时间: 2020-12-9 13:00
大佬牛逼
作者: demonsung    时间: 2020-12-16 14:19
继续学习
作者: yo梦    时间: 2020-12-20 14:57

感谢楼主的分享!
作者: yangxinlin    时间: 2021-1-17 00:19
谢谢楼主教程
作者: nkjvxdaf    时间: 2021-1-23 16:45
感谢楼主的分享!
作者: yrtpestu    时间: 2021-2-4 00:43
感谢分享
作者: gandi2019    时间: 2021-2-16 16:31
学习一下
作者: somehandgm    时间: 2021-3-19 09:54
非常棒的教程,感谢
作者: cxkj1288    时间: 2021-4-28 09:22
学习学习!谢谢!
作者: 天轮    时间: 2021-5-10 16:30
支持一波
作者: 稻草刀    时间: 2021-8-2 18:55
继续学习哈希表
作者: jin2827    时间: 2021-9-17 21:24
正好需要 感谢 可以学习一波
作者: 小脑薯胖了胖    时间: 2021-12-17 12:45
继续学习
作者: 口与川    时间: 2021-12-31 19:15
看帖回帖
作者: 根本停不下来    时间: 2022-4-11 06:19
谢谢分享
作者: raxfal    时间: 2022-7-14 10:25
感谢楼主分享
作者: 3142088298    时间: 2022-11-24 22:09
前来学习一下!!!!
作者: andyy106    时间: 2022-11-25 20:43
还需要继续学习,很有用
作者: gxmy2012    时间: 2022-12-13 11:40
感谢分享前来学习
作者: 观茶员    时间: 2023-1-18 13:58
厉害,把东西给说明白了
作者: qqwwee147159    时间: 2023-3-14 06:38
学了一晚上的哈希表 太牛了
作者: 学技术哪家强    时间: 2023-3-16 06:07
看看,很棒的教程!!
作者: 是我是我    时间: 2023-3-16 06:54
秒啊 方便好多
作者: xphxgroo    时间: 2023-5-19 17:49
学习学习
作者: GMs2484990328    时间: 2023-5-23 11:58
揭秘看下隐藏
作者: eevvok    时间: 2024-2-24 15:46
支持一下,辛苦了,祝愿天工越来越好




欢迎光临 天工维度魔兽争霸开发者社区-全国最大的TJ集中营-原提百万联盟 (http://bbs.mvprpg.com/) Powered by Discuz! X3.4