无界の灵 发表于 2011-9-16 22:42:32

第二节    二维数组
    早先我就说过,在JASS里面没有二维数组,只有一维数组,这在我们进行运用的时候有很大的不方便。但是由于有了GC和RB,让我们进行一个二维数组的摸拟是完全可行的。
由于无论是何种数据,我们都可以使其与整型数据挂够。所以我们只需要将前面所讲的GC相关函数进行一下修改即可。为了方便我们进行后面的讲解,先在此将所需要的函数进行一下修改。
+Shingo Jass Highlighter 0.41 functionH2Itakes handle h returns integer
    return h
    return 0
endfunction
functionI2U takes integer i returns unit
                  return   i
                  return   null
               endfunction
               function I2G takes integer i returns group
                  return i
                  return null
               endfunction
               functionI2T takes integer i returns timer
                  return   i
                  return   null
               endfunction
               functionI2It takes integer i returns item
                  return i
                  return null
               endfunction
               functionI2Ef takes integer i returns effect
                  return i
                  return null
               endfunction
               function I2Li takes integer i returns lightning
                  return i
                  return null
               endfunction
function game takes nothing returns gamecache
    if bj_lastCreatedGameCache==null then
      call FlushGameCache(InitGameCache("Alex.w3v"))
      set bj_lastCreatedGameCache=InitGameCache("Alex.w3v")
    endif
    return bj_lastCreatedGameCache
endfunction
function RealArrayStore takes real i,string name,integer project, integer node returns nothing
    call StoreReal(game(),name+I2S(project),I2S(node),i)
endfunction
function IntegArrayStore takes integer i, string name,integer project, integer node returns nothing
    call StoreInteger(game(),name+I2S(project), I2S(node),i)
endfunction
function IntegArrayRead takes string name,integer project,integer node returns integer
    return GetStoredInteger(game(),name+I2S(project), I2S(node))
endfunction
function RealArrayRead takes string name,integer project,integer node returns real
    return GetStoredReal(game(),name+I2S(project), I2S(node))
endfunction
function FlushData takes string name,integer project returns nothing
    call FlushStoredMission(game(),name+I2S(project))
endfunction
function FlushCache takes nothing returns nothing
    call FlushGameCache(game())
endfunctionj/abc
我们在进行实例讲解的时候仅以整数为例,实数就不用了。也就是说,我们现在只需要用到以下三个函数了:
j/function IntegArrayStore takes integer i, string name,integer project, integer node returns nothing
    call StoreInteger(game(),name+I2S(project), I2S(node),i)
endfunction
function IntegArrayRead takes string name,integer project,integer node returns integer
    return GetStoredInteger(game(),name+I2S(project), I2S(node))
endfunction
function FlushData takes string name,integer project returns nothing
    call FlushStoredMission(game(),name+I2S(project))
endfunction

那么我们就用例子来进行讲解吧。
Eg.1:现有5个英雄ABCDE,分将他们的3围存贮起来,在需要的时候读取出来。
分析:5个英雄;3围。这就是传出中的5行3列2维数组。如果用C语言表示就是这样的Hero,为了顺应编程习惯,下标均从0开始。那么我们就开始进行摸拟了。
+Shingo Jass Highlighter 0.41 //存贮
function StoreHeroAtr takes nothing returns nothing
   local    unit    array      Heros
   local    string             ArrayName
   local    integer            i = 0
   set   Heros = A
   set   Heros = B
   set   Heros = C
   set   Heros = D
   set   Heros = E
   loop
         exitwhen i == 5
         call IntegArrayStore(GetHeroAgi(Heros<i>),ArrayName,i,0)
         call IntegArrayStore(GetHeroStr(Heros<i>),ArrayName,i,1)
         call IntegArrayStore(GetHeroInt(Heros<i>),ArrayName,i,2)
         set i = i + 1
    endloop
endfunction

这样一来,我们就把不同英雄的三围都存入到了一个叫做ArrayName的“二维数组中去了”
当我们需要的时候只需要+Shingo Jass Highlighter 0.41 call IntegHandleRead(ArrayName,x,y)

因为ArrayName是一个变量,表示这个二维数组的名字,就像一维数组名那样。于是在一个地图中可以有多个这样的“二维数组了”。
其实这一节也应该算是“人贱合一”内容,我之所以单独拿出来讲,一方面是为了加强大家对“人贱合一”的理解,另一方面也是为了告诉大家,JASS也可以拥有二维数组,而且要比其他任何一种语言都要灵活。因为Returnbug的存在,我们可以将任意数据转换成整数,在我们需要的时候再转换成对应的数据,这是其他语言所不具备的。
单一例不知道大家是否能够理解“二维数组”。因为为了例子而想问题总归是想不出来那么多例子,因此我也就无法为大家讲解更多的“二维数组”的例子了,但是大家在将来的实际练习过程中也许会碰到这样的问题,到时候只希望你能将所学的运用上去,并且自己有所创新。

无界の灵 发表于 2011-9-16 22:49:58

给你们一个TXT文件,不过好像少了一章,放不进图······



无界の灵 发表于 2011-9-16 22:50:14

J技能上来了~


大家自己下载啊~


DONGGAN 发表于 2011-9-17 02:23:47

{:4_130:}

前往恶趣味俄 发表于 2011-9-17 09:56:07

sddasdas

gan970729 发表于 2011-9-17 12:32:57

.......

346863096 发表于 2011-9-17 14:48:30

好啊楼主辛苦了

爱上对方啊 发表于 2011-9-17 15:27:58

啊啊老高这个干什么

My丶风 发表于 2011-9-17 15:34:45

= = 回复看看 但是看这么多楼 楼主啊 这要多少字呢- -

鬼子 发表于 2011-9-17 15:43:04

不适合新手。。。
页: 1 [2] 3 4 5 6 7 8 9 10 11
查看完整版本: JASS入门到提高教程,想学J的进来!