第一個函數(shù)是生成 16 個隨機列表的函數(shù) generatelist。
它的具體代碼如下:
on generatelist
global gempty,randomlist
set randomlist = []
repeat with x = 1 to 16
addat(randomlist,random(x),x)
end repeat
end
因為 lingo 沒有提供對列表隨機排列的功能,所以這里使用了來自 tab julius 先生的《lingo !高級指南》中的一段代碼,它非常巧妙地通過循環(huán)語句中使用 addat(),random()函數(shù)生成隨機列表。它在循環(huán)中先隨機產(chǎn)生列表位置,并將其賦予 1-16 中的值,當 addat()函數(shù)向列表中相同位置添加值時,它會將位置推后,這種特殊的工作方式將不會出現(xiàn)重復(fù)現(xiàn)象。
第二個函數(shù)也是最重要的一個函數(shù) exchange()。 它有一個參數(shù), . 此參數(shù)為通道號。當在一個與空白垂直或水平相鄰的拼圖上單擊時,應(yīng)將二者的角色對換,即,空白所在的通道將角色換為被單擊的通道的角色,而單擊的通道的角色換為空白。并將被單擊的通道號賦予標識空白所在通道的變量 gempty。函數(shù)中的變量 x 為臨時變量,用于作替換時暫存數(shù)據(jù)。
on exchange n
global gempty
set x to the membernum of sprite gempty
set the membernum of sprite gempty to the membernum of sprite n
set the membernum of sprite n to x
updatestage
set gempty = n
end
此函數(shù)用在每個循環(huán)幀中 1-16 號通道,用法如下:
on mouseup
if inlist(1) then
exchange 1
puppetsound "click"
end if
end
這里用到了另一個編寫的函數(shù) inlist(),此函數(shù)用于判別當前被單擊的通道是否在可移動列表 m 中,如果是在列表 m 中,則返回 true。
函數(shù) inlist() 代碼如下:
on inlist cnt
set countnum = count(m)
repeat with x = 1 to countnum
if cnt = getat(m,x) then
return true
exit repeat
end if
end repeat
end
其中m 為當前可移動通道號列表,首先函數(shù)使用count()函數(shù)計算列表 m 中成員的個數(shù),并將其賦予變量 countnum,變量 countnum 為循環(huán)檢測的終止變量。循環(huán)語句中,判定 inlist() 的參數(shù) cnt 是否在列表 m 中。如果在其中,則返回 true,并退出循環(huán)。
另外一個函數(shù)是 move(),它將返回當前可移動通道列表。
on move sth
return getat(mlist,sth)
end
它根據(jù)空白所在通道號來返回當前可移動拼圖通道號列表。這里我使用了一個二維列表 mlist = [m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16],其中 m1,m2,m3, ……為空白在 1,2,3,4,5, …..時,可移動通道號列表。舉例,如第一張圖,當空白處為 16 號通道,可以移動的通道為 12 和 15 ,即,m16 = [12,15]。所有這些列表將在on startmovie 事件句柄中初始化。具體代碼如下:
on startmovie
global gempty,randomlist,first,finish,tmp,m1,m2,m3,m4,m5,
m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,mlist,m
set m = []
set tmp = []
set finish = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
set m1 = [2,5]
set m2 = [1,3,6]
set m3 = [2,4,7]
set m4 = [3,8]
set m5 = [1,6,9]
set m6 = [2,5,7,10]
set m7 = [3,6,8,11]
set m8 = [4,7,12]
set m9 = [5,10,13]
set m10 = [6,9,11,14]
set m11 = [7,10,12,15]
[1] [2] 下一頁
新聞熱點
疑難解答