天工维度魔兽争霸开发者社区-全国最大的TJ集中营-原提百万联盟
标题:
【JASS】纯JASS的哈希表的使用教程AND哈希表的自定义值扩展
[打印本页]
作者:
松坂砂糖/7
时间:
2021-5-12 18:01
标题:
【JASS】纯JASS的哈希表的使用教程AND哈希表的自定义值扩展
本帖最后由 松坂砂糖/7 于 2021-6-9 11:27 编辑
研究jass的副产物,虽然没什么人用。
后续还有一些纯Jass的系统,伤害系统副本系统之类的,看心情写
哈希表的定义直接略过
在JASS中,哈希表的类型为hashtable,使用
InitHashtable()创建一个新的哈希表.(通常情况下会在全局变量中定义哈希表)
globals
hashtable A =
InitHashtable()
endglobals
使用哈希表一般用到4种方法
1.SaveXXX(哈希表,索引1,索引2,储存的值)
往哈希表中存数据
2.LoadXXX(
哈希表,索引1,索引2
)
从哈希表中取出数据
3.RemoveXXX(
哈希表,索引1,索引2
)
删除哈希表中的数据
4.HaveSavedXXXX(
哈希表,索引1,索引2
)
哈希表是否有存某项数据
哈希表:你创建的一张哈希表
索引12,任意的整数
XXX对应的是一种数据类型,如integer,real,boolean,unit等等
具体函数名可在WE 触发编辑器-TESH-Function list中查询
代码示例
local hashtable
h
=
InitHashtable() // 创建一个哈希表
call
SaveInteger(h, 123, 456, 9) // 在哈希表中的(123, 456)位置处存放了一个整数9
set
i = LoadInteger(h, 123, 456) // 读取上面存的整数9 现在i=9
使用哈希表实现面向对象储存自定义值:
别问为什么会有这个东西,问就是不想用逆天自定义变量
思路是用StringHash()函数把字符串转换成整数,
而Handle变量可以用GetHandleId()函数转换成整数,成为哈希表的坐标
代码示例:
local
unit u = GetTriggerUnit()
local
inetger k1 =
GetHandleId(u)
local
integer k2 =
StringHash("maxAttack")
call
SaveInteger(h, k1, k2,
GetUnitState(u, ConvertUnitState(
0x15
))
)
set
maxAttack =
LoadInteger(h, k1, k2)
以上代码设置了u的maxAttack值,可以在任何能获取到单位u的地方得到
u的maxAttack值
演示地图是楼主把上面的内容封装成库,有兴趣的可以下来看看
演示地图:
(, 下载次数: 9)
上传
点击文件名下载附件
作者:
Oo破破oO
时间:
2021-5-13 00:58
StringHash()是这个函数吧
作者:
松坂砂糖/7
时间:
2021-5-15 15:07
Oo破破oO 发表于 2021-5-13 00:58
StringHash()是这个函数吧
啊对,是我弄混了
欢迎光临 天工维度魔兽争霸开发者社区-全国最大的TJ集中营-原提百万联盟 (http://bbs.mvprpg.com/)
Powered by Discuz! X3.4