控制台游戏引擎CGE——贪吃蛇
今天我也来发一个控制台游戏。先看图:
缘起
LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园。
这不前几天,看到了魏大师《使用Lua脚本语言开发出高扩展性的系统...》。
LZ对不了解的东西有强迫症,Lua是什么东西,自然是不能放过,要了解一番的。
一番了解下来,好东西啊。最近又比较闲,做个什么东西来练练手吧。
于是又在博客园中,翻到这么一篇《一个控制台小游戏(求点评)》,于是又勾起了我对那个控制台游戏的回忆。点击这里看前辈的作品。
动手
说做就做,总体框架很简单:
用 C#做游戏引擎,用lua开发游戏,C#与Lua之间的交互,则用LuaInterface。
游戏引擎:
解决渲染问题(在控制台上画点、画线、画框等)
响应用户的键盘输入(用户要按键控制游戏)
也是Lua的一个宿主(Lua只是一种语言,不能生成exe一样的宿主)
渲染
通过导出lua函数,使得lua可以调用C#中的函数
1 | 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作为入口
1 | lua.DoFile( "entry.lua" ); |
重点有以下几个函数
1 | function gameInit() |
gameInit 游戏开始后,C#回调这个函数
1 | function gameLoop() |
gameLoop 这是一个定时刷新界面的游戏,所以当时间到了之后,C#回调gameLoop,实现重新绘制等操作
感悟
大概花了2天时间写的,lua是入门,C#的控制台部分则主要参考了《控制台小游戏》的实现。
主要目的是学习了C#和lua交互,将来也可以这样,把灵活多变的地方放到lua脚本里来实现。
下载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库