貌似最近CPPBLOG寫一門腳本語言比較流行,連我這種山寨程序員都搞出一個像C又像
BASIC的所謂腳本語言,可見其流行程度。
這個kl腳本例子,是一個具有基本功能的貪食蛇游戲。這個例子中使用了兩個插件:
HGE引擎、以及一個撇腳的二維數(shù)組插件。因為kl對于數(shù)組的實現(xiàn)不是那么漂亮,而我實在
不想因為加入二維數(shù)組的支持而讓代碼看起來更亂,所以直接不支持這個特性??紤]到二維
數(shù)組的應(yīng)用在一些小游戲中還是比較重要(例如這個貪食蛇,總需要個容器去保存游戲區(qū)域
的屬性),所以撇腳地加了個支持number的二維數(shù)組插件。
HGE插件我只port了部分接口,也就是注冊了一部分函數(shù)到腳本里,提供基本的貼圖功
能。(port--我實在找不到一個合適的詞語來形容這種行為---HGE到一門腳本語言里,我似
乎做過幾次)
不知道有沒必要提供貪食蛇的實現(xiàn)算法,這似乎說出來有點弱智。- - 不過為了方便別
人閱讀kl腳本代碼,我還是稍微講一下。游戲中使用一個二維數(shù)組保存整個游戲區(qū)域,所謂
的游戲區(qū)域就是蛇可以活動到的地方。每一個二維數(shù)組元素對應(yīng)游戲區(qū)域中的一個格子,姑
且稱為tile。每個tile有一個整數(shù)值表示其屬性,如BODY、WALL、FOOD、NONE。蛇體的移動
歸根結(jié)底就是蛇頭和蛇尾的移動。蛇頭和蛇尾屬性一樣,但是蛇頭負責(zé)把所經(jīng)過的tile設(shè)置
為BODY,而蛇尾則把經(jīng)過的tile設(shè)置為NONE。蛇頭的移動方向靠玩家控制,每次蛇頭轉(zhuǎn)彎時
,都會記錄一個轉(zhuǎn)彎點到一個隊列。轉(zhuǎn)彎點包括轉(zhuǎn)彎XY坐標以及轉(zhuǎn)向的方向。蛇尾每次移動
時都會檢查是否到達了一個轉(zhuǎn)彎點,是的話就設(shè)置自己的移動方向為該轉(zhuǎn)彎點記錄的方向。
雖然我寫了kl這個腳本語言,但是語言特性并不是我設(shè)計的。我只是取了C語言的一些
特性。所以在寫這個sample的時候,我對于kl這個腳本語言的感覺,就是一個像basic的C。
因為它太單一,就像BASIC一樣只擁有語言的一些基本功能,不能定義復(fù)雜的結(jié)構(gòu),沒有天
生的對各種數(shù)據(jù)結(jié)構(gòu)的支持(例如某些語言直接有l(wèi)ist, tuple之類)。
以前中學(xué)的時候在電子詞典上用GVBASIC寫小游戲,當(dāng)時除了BASIC什么也不知道。今天
寫這個貪食蛇例子,感覺就像以前用BASIC。
回頭說說一些kl腳本里的特性。從這個例子里(見下載包里的snake.kl),諸如while,
for,if...else if...被支持(之前發(fā)布的版本里還不支持for和else if)。全局變量支持
賦初值(上個版本不支持)。當(dāng)然,還演示了如何使用插件函數(shù)。
但是,仍有一些特性在我的懶惰之下被置之不理。例如return后必須跟一個表達式,這
意味著單純的return;將被視為語法錯誤。對于if( a && b ),kl會計算所有的表達式,而
別的語言也許會在a會false后不計算b,這也許不算個問題,但起碼我還沒修正。還有,kl
內(nèi)部對于錯誤的報告依然沒被修復(fù),少打一個分號你會得到一系列錯誤的報告,但是卻沒有
準確的行號。甚至,你會看到解釋器崩掉。不要緊,在我心里,它作為當(dāng)年電子詞典上那個
GVBASIC而言,已經(jīng)很強大的了。:DD
最近接觸了很多UNIX和GNU之類的東西,發(fā)覺沒有提供版權(quán)說明的‘開源’,原來都是偽
開源。雖然我也想按照GNU編碼標準里所說為kl的發(fā)布包里附加Changelog之類的說明,但是
出于懶惰,還是以后再說吧。同樣,這次提供的下載里包含了一些編譯好的東西,所以我不
保證它在你的機器上依然可以運行。我使用了MingW來編譯這些,并且提供有點丑陋的Makefile。
HGE使用了1.81版本。
貼張圖給懶得下載的人:
下載例子,包含腳本代碼。
如果要獲取kl實現(xiàn)代碼,建議從我在google的SVN獲?。?br>http://code.google.com/p/klcommon/