无界の灵
发表于 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