zoukankan      html  css  js  c++  java
  • 控制台游戏引擎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脚本里来实现。

    下载

    代码以及可执行文件

  • 相关阅读:
    Memcached源码分析之memcached.h
    Memcached源码分析之请求处理(状态机)
    Memcached源码分析之线程模型
    Memcached源码分析之从SET命令开始说起
    Memcached源码分析
    jqgrid 获取当前页码
    CSS 居中大全【转】
    判断浏览器是否IE10
    jQuery.validate的this.optional(element)作用
    Java中static、final用法小结
  • 原文地址:https://www.cnblogs.com/binblog/p/3528735.html
Copyright © 2011-2022 走看看