控制台游戲引擎CGE——貪吃蛇


今天我也來發一個控制台游戲。先看圖:

 

緣起

LZ是一個有嚴重拖延症的人,表現的形式就是隔一段時間就要刷一刷博客園。

這不前幾天,看到了魏大師《使用Lua腳本語言開發出高擴展性的系統...》。

LZ對不了解的東西有強迫症,Lua是什么東西,自然是不能放過,要了解一番的。

一番了解下來,好東西啊。最近又比較閑,做個什么東西來練練手吧。

於是又在博客園中,翻到這么一篇《一個控制台小游戲(求點評)》,於是又勾起了我對那個控制台游戲的回憶。點擊這里看前輩的作品。

 

動手

說做就做,總體框架很簡單:

用 C#做游戲引擎,用lua開發游戲,C#與Lua之間的交互,則用LuaInterface。

游戲引擎:

  解決渲染問題(在控制台上畫點、畫線、畫框等)

  響應用戶的鍵盤輸入(用戶要按鍵控制游戲)      

      也是Lua的一個宿主(Lua只是一種語言,不能生成exe一樣的宿主)

 渲染

通過導出lua函數,使得lua可以調用C#中的函數

lua.RegisterFunction(m.Name, null, m);

實現了如下函數:

可以在控制台指定的位置、使用指定的顏色,進行畫點、畫矩形、畫文字、填充矩形

響應用戶輸入

用戶輸入,主要響應了按鍵輸入,鼠標輸入暫時不支持

        public static void keypress(string key){
            if(lua==null) return;            
            LuaFunction func = lua.GetFunction("keypress");
            if(func != null)
            {
                func.Call(key);
            }
                
        }

需要在lua中定義一個"keypress"的函數,當捕獲到用戶有按鍵輸入之后,回調該函數

 

Lua部分

就是實現貪吃蛇,見entry.lua,因為在Program.cs中是調用entry.lua作為入口

lua.DoFile("entry.lua");

重點有以下幾個函數

function gameInit()	

gameInit 游戲開始后,C#回調這個函數

function gameLoop()

gameLoop 這是一個定時刷新界面的游戲,所以當時間到了之后,C#回調gameLoop,實現重新繪制等操作

 

感悟

大概花了2天時間寫的,lua是入門,C#的控制台部分則主要參考了《控制台小游戲》的實現。

主要目的是學習了C#和lua交互,將來也可以這樣,把靈活多變的地方放到lua腳本里來實現。

 

 

下載

代碼以及可執行文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM