马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 松坂砂糖/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值
演示地图是楼主把上面的内容封装成库,有兴趣的可以下来看看
演示地图:
演示-哈希表.w3x
(29.34 KB, 下载次数: 9)
|