控制台游戏引擎CGE——贪吃蛇

时间:2023-11-22 12:56:38

今天我也来发一个控制台游戏。先看图:

控制台游戏引擎CGE——贪吃蛇

控制台游戏引擎CGE——贪吃蛇

缘起

LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园。

这不前几天,看到了魏大师《使用Lua脚本语言开发出高扩展性的系统...》。

LZ对不了解的东西有强迫症,Lua是什么东西,自然是不能放过,要了解一番的。

一番了解下来,好东西啊。最近又比较闲,做个什么东西来练练手吧。

于是又在博客园中,翻到这么一篇《一个控制台小游戏(求点评)》,于是又勾起了我对那个控制台游戏的回忆。点击这里看前辈的作品。

动手

说做就做,总体框架很简单:

用 C#做游戏引擎,用lua开发游戏,C#与Lua之间的交互,则用LuaInterface。

游戏引擎:

  解决渲染问题(在控制台上画点、画线、画框等)

  响应用户的键盘输入(用户要按键控制游戏)

也是Lua的一个宿主(Lua只是一种语言,不能生成exe一样的宿主)

渲染

通过导出lua函数,使得lua可以调用C#中的函数

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

实现了如下函数:

控制台游戏引擎CGE——贪吃蛇

可以在控制台指定的位置、使用指定的颜色,进行画点、画矩形、画文字、填充矩形

响应用户输入

用户输入,主要响应了按键输入,鼠标输入暂时不支持

        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脚本里来实现。

下载

代码以及可执行文件