• <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

            低調(diào)做技術(shù)__歡迎移步我的獨(dú)立博客 codemaro.com 微博 kevinlynx

            kl sample:貪食蛇

             

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


                這個(gè)kl腳本例子,是一個(gè)具有基本功能的貪食蛇游戲。這個(gè)例子中使用了兩個(gè)插件:
            HGE引擎、以及一個(gè)撇腳的二維數(shù)組插件。因?yàn)閗l對(duì)于數(shù)組的實(shí)現(xiàn)不是那么漂亮,而我實(shí)在
            不想因?yàn)榧尤攵S數(shù)組的支持而讓代碼看起來更亂,所以直接不支持這個(gè)特性。考慮到二維
            數(shù)組的應(yīng)用在一些小游戲中還是比較重要(例如這個(gè)貪食蛇,總需要個(gè)容器去保存游戲區(qū)域
            的屬性),所以撇腳地加了個(gè)支持number的二維數(shù)組插件。

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

                不知道有沒必要提供貪食蛇的實(shí)現(xiàn)算法,這似乎說出來有點(diǎn)弱智。- - 不過為了方便別
            人閱讀kl腳本代碼,我還是稍微講一下。游戲中使用一個(gè)二維數(shù)組保存整個(gè)游戲區(qū)域,所謂
            的游戲區(qū)域就是蛇可以活動(dòng)到的地方。每一個(gè)二維數(shù)組元素對(duì)應(yīng)游戲區(qū)域中的一個(gè)格子,姑
            且稱為tile。每個(gè)tile有一個(gè)整數(shù)值表示其屬性,如BODY、WALL、FOOD、NONE。蛇體的移動(dòng)
            歸根結(jié)底就是蛇頭和蛇尾的移動(dòng)。蛇頭和蛇尾屬性一樣,但是蛇頭負(fù)責(zé)把所經(jīng)過的tile設(shè)置
            為BODY,而蛇尾則把經(jīng)過的tile設(shè)置為NONE。蛇頭的移動(dòng)方向靠玩家控制,每次蛇頭轉(zhuǎn)彎時(shí)
            ,都會(huì)記錄一個(gè)轉(zhuǎn)彎點(diǎn)到一個(gè)隊(duì)列。轉(zhuǎn)彎點(diǎn)包括轉(zhuǎn)彎XY坐標(biāo)以及轉(zhuǎn)向的方向。蛇尾每次移動(dòng)
            時(shí)都會(huì)檢查是否到達(dá)了一個(gè)轉(zhuǎn)彎點(diǎn),是的話就設(shè)置自己的移動(dòng)方向?yàn)樵撧D(zhuǎn)彎點(diǎn)記錄的方向。

                雖然我寫了kl這個(gè)腳本語言,但是語言特性并不是我設(shè)計(jì)的。我只是取了C語言的一些
            特性。所以在寫這個(gè)sample的時(shí)候,我對(duì)于kl這個(gè)腳本語言的感覺,就是一個(gè)像basic的C。
            因?yàn)樗珕我唬拖馚ASIC一樣只擁有語言的一些基本功能,不能定義復(fù)雜的結(jié)構(gòu),沒有天
            生的對(duì)各種數(shù)據(jù)結(jié)構(gòu)的支持(例如某些語言直接有l(wèi)ist, tuple之類)。

                以前中學(xué)的時(shí)候在電子詞典上用GVBASIC寫小游戲,當(dāng)時(shí)除了BASIC什么也不知道。今天
            寫這個(gè)貪食蛇例子,感覺就像以前用BASIC。

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

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

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

            snake_screenshot

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

                如果要獲取kl實(shí)現(xiàn)代碼,建議從我在google的SVN獲取:
            http://code.google.com/p/klcommon/

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

            評(píng)論

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

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

            武侠古典久久婷婷狼人伊人| 九九精品99久久久香蕉| 久久夜色撩人精品国产小说| 国内精品久久久久久麻豆| 久久婷婷午色综合夜啪| 97久久精品无码一区二区天美| 夜夜亚洲天天久久| 18禁黄久久久AAA片| 久久综合久久综合久久综合| 免费久久人人爽人人爽av| 99久久无码一区人妻a黑| 久久成人小视频| 国产精品99久久久久久猫咪| 久久免费的精品国产V∧| 亚洲欧美日韩久久精品| 国产精品日韩深夜福利久久| 久久综合给久久狠狠97色| 亚洲精品成人网久久久久久| 亚洲欧美日韩精品久久| 国产精品99久久99久久久| 亚洲女久久久噜噜噜熟女| 久久婷婷色综合一区二区| 久久国产成人| 久久精品中文字幕一区| 91精品婷婷国产综合久久| AV狠狠色丁香婷婷综合久久| 亚洲精品无码久久久久sm| 中文字幕精品久久| 伊人色综合九久久天天蜜桃| 久久夜色精品国产亚洲av| 久久久久国产| 亚洲国产一成久久精品国产成人综合| 办公室久久精品| 久久综合日本熟妇| 日韩久久无码免费毛片软件| 久久亚洲精品无码观看不卡| 99久久无码一区人妻| 久久精品国产WWW456C0M| 精品无码久久久久久久动漫| 久久国产综合精品五月天| 欧美一级久久久久久久大片|