天工维度魔兽争霸开发者社区-全国最大的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