第二节 二维数组
早先我就说过,在JASS里面没有二维数组,只有一维数组,这在我们进行运用的时候有很大的不方便。但是由于有了GC和RB,让我们进行一个二维数组的摸拟是完全可行的。
由于无论是何种数据,我们都可以使其与整型数据挂够。所以我们只需要将前面所讲的GC相关函数进行一下修改即可。为了方便我们进行后面的讲解,先在此将所需要的函数进行一下修改。
+ Shingo Jass Highlighter 0.41 function H2I takes handle h returns integer
return h
return 0
endfunction
function I2U takes integer i returns unit
return i
return null
endfunction
function I2G takes integer i returns group
return i
return null
endfunction
function I2T takes integer i returns timer
return i
return null
endfunction
function I2It takes integer i returns item
return i
return null
endfunction
function I2Ef 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[4][2],为了顺应编程习惯,下标均从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[0] = A
set Heros[1] = B
set Heros[2] = C
set Heros[3] = D
set Heros[4] = 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的存在,我们可以将任意数据转换成整数,在我们需要的时候再转换成对应的数据,这是其他语言所不具备的。
单一例不知道大家是否能够理解“二维数组”。因为为了例子而想问题总归是想不出来那么多例子,因此我也就无法为大家讲解更多的“二维数组”的例子了,但是大家在将来的实际练习过程中也许会碰到这样的问题,到时候只希望你能将所学的运用上去,并且自己有所创新。
|