• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            loop_in_codes

            低調做技術__歡迎移步我的獨立博客 codemaro.com 微博 kevinlynx

            kl sample:貪食蛇

             

                貌似最近CPPBLOG寫一門腳本語言比較流行,連我這種山寨程序員都搞出一個像C又像
            BASIC的所謂腳本語言,可見其流行程度。


                這個kl腳本例子,是一個具有基本功能的貪食蛇游戲。這個例子中使用了兩個插件:
            HGE引擎、以及一個撇腳的二維數組插件。因為kl對于數組的實現不是那么漂亮,而我實在
            不想因為加入二維數組的支持而讓代碼看起來更亂,所以直接不支持這個特性。考慮到二維
            數組的應用在一些小游戲中還是比較重要(例如這個貪食蛇,總需要個容器去保存游戲區域
            的屬性),所以撇腳地加了個支持number的二維數組插件。

                HGE插件我只port了部分接口,也就是注冊了一部分函數到腳本里,提供基本的貼圖功
            能。(port--我實在找不到一個合適的詞語來形容這種行為---HGE到一門腳本語言里,我似
            乎做過幾次)

                不知道有沒必要提供貪食蛇的實現算法,這似乎說出來有點弱智。- - 不過為了方便別
            人閱讀kl腳本代碼,我還是稍微講一下。游戲中使用一個二維數組保存整個游戲區域,所謂
            的游戲區域就是蛇可以活動到的地方。每一個二維數組元素對應游戲區域中的一個格子,姑
            且稱為tile。每個tile有一個整數值表示其屬性,如BODY、WALL、FOOD、NONE。蛇體的移動
            歸根結底就是蛇頭和蛇尾的移動。蛇頭和蛇尾屬性一樣,但是蛇頭負責把所經過的tile設置
            為BODY,而蛇尾則把經過的tile設置為NONE。蛇頭的移動方向靠玩家控制,每次蛇頭轉彎時
            ,都會記錄一個轉彎點到一個隊列。轉彎點包括轉彎XY坐標以及轉向的方向。蛇尾每次移動
            時都會檢查是否到達了一個轉彎點,是的話就設置自己的移動方向為該轉彎點記錄的方向。

                雖然我寫了kl這個腳本語言,但是語言特性并不是我設計的。我只是取了C語言的一些
            特性。所以在寫這個sample的時候,我對于kl這個腳本語言的感覺,就是一個像basic的C。
            因為它太單一,就像BASIC一樣只擁有語言的一些基本功能,不能定義復雜的結構,沒有天
            生的對各種數據結構的支持(例如某些語言直接有list, tuple之類)。

                以前中學的時候在電子詞典上用GVBASIC寫小游戲,當時除了BASIC什么也不知道。今天
            寫這個貪食蛇例子,感覺就像以前用BASIC。

                回頭說說一些kl腳本里的特性。從這個例子里(見下載包里的snake.kl),諸如while,
            for,if...else if...被支持(之前發布的版本里還不支持for和else if)。全局變量支持
            賦初值(上個版本不支持)。當然,還演示了如何使用插件函數。

                但是,仍有一些特性在我的懶惰之下被置之不理。例如return后必須跟一個表達式,這
            意味著單純的return;將被視為語法錯誤。對于if( a && b ),kl會計算所有的表達式,而
            別的語言也許會在a會false后不計算b,這也許不算個問題,但起碼我還沒修正。還有,kl
            內部對于錯誤的報告依然沒被修復,少打一個分號你會得到一系列錯誤的報告,但是卻沒有
            準確的行號。甚至,你會看到解釋器崩掉。不要緊,在我心里,它作為當年電子詞典上那個
            GVBASIC而言,已經很強大的了。:DD

                最近接觸了很多UNIX和GNU之類的東西,發覺沒有提供版權說明的‘開源’,原來都是偽
            開源。雖然我也想按照GNU編碼標準里所說為kl的發布包里附加Changelog之類的說明,但是
            出于懶惰,還是以后再說吧。同樣,這次提供的下載里包含了一些編譯好的東西,所以我不
            保證它在你的機器上依然可以運行。我使用了MingW來編譯這些,并且提供有點丑陋的Makefile。
            HGE使用了1.81版本。
                貼張圖給懶得下載的人:

            snake_screenshot

                下載例子,包含腳本代碼。

                如果要獲取kl實現代碼,建議從我在google的SVN獲取:
            http://code.google.com/p/klcommon/

            posted on 2009-03-25 21:17 Kevin Lynx 閱讀(4386) 評論(1)  編輯 收藏 引用 所屬分類: kl腳本實現編譯原理

            評論

            # re: kl sample:貪食蛇 2012-02-26 17:23 Wudy

            不知可否把增加了for、else if等語言特性的版本源代碼公布出來?  回復  更多評論   

            欧美亚洲日本久久精品| 91精品国产高清久久久久久io | 狠狠色丁香久久综合五月| 国产成人精品久久亚洲| 午夜人妻久久久久久久久| 久久人人爽人人爽AV片| 97久久超碰成人精品网站| 国产三级观看久久| 一本色道久久88—综合亚洲精品 | 性欧美大战久久久久久久| 精产国品久久一二三产区区别| 国产激情久久久久影院小草| 中文字幕精品无码久久久久久3D日动漫 | 国产毛片久久久久久国产毛片| 色99久久久久高潮综合影院 | 国产99久久久国产精品小说| 久久精品国产亚洲av瑜伽| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久久久99精品成人片牛牛影视| 亚洲欧美日韩久久精品第一区| 国产精品免费久久久久久久久| 蜜臀av性久久久久蜜臀aⅴ| 欧美黑人又粗又大久久久| 久久中文精品无码中文字幕| 亚洲精品高清国产一久久| 久久强奷乱码老熟女网站| 久久久91精品国产一区二区三区| 大美女久久久久久j久久| 99久久超碰中文字幕伊人| AAA级久久久精品无码区| 91视频国产91久久久| 久久久久久久亚洲Av无码| 国产成人精品久久| 大香网伊人久久综合网2020| 嫩草影院久久国产精品| 日本久久久精品中文字幕| 91精品国产91热久久久久福利| 91久久精品国产成人久久| 久久精品国产99久久久香蕉| 国内精品久久久久影院网站 | 亚洲国产成人精品91久久久|