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

缘起

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

下载

代码以及可执行文件

控制台游戏引擎CGE——贪吃蛇的更多相关文章

  1. Love2D游戏引擎制作贪吃蛇游戏

    代码地址如下:http://www.demodashi.com/demo/15051.html Love2D游戏引擎制作贪吃蛇游戏 内附有linux下的makefile,windows下的生成方法请查 ...

  2. [C入门 - 游戏编程系列] 贪吃蛇篇(一) - 世界定义

    每个游戏都有一个很明确的目的或者说游戏主题,贪吃蛇的目的很明确:蛇找到并吃掉食物.只有目的是很无聊的,算不上一个好游戏.所以设计者增加了创意:1. 吃掉食物后蛇会增长:2. 吃掉食物后分数会增加.有些 ...

  3. 使用Love2D引擎开发贪吃蛇游戏

    今天来介绍博主近期捣腾的一个小游戏[贪吃蛇],贪吃蛇这个游戏相信大家都不会感到陌生吧.今天博主将通过Love2D这款游戏引擎来为大家实现一个简单的贪吃蛇游戏,在本篇文章其中我们将会涉及到贪吃蛇的基本算 ...

  4. H5游戏开发:贪吃蛇

    贪吃蛇的经典玩法有两种: 积分闯关 一吃到底 第一种是笔者小时候在掌上游戏机最先体验到的(不小心暴露了年龄),具体玩法是蛇吃完一定数量的食物后就通关,通关后速度会加快:第二种是诺基亚在1997年在其自 ...

  5. C++控制台应用程序之贪吃蛇(改进版)

    #include<iostream> #include<stdio.h> #include<stdlib.h> #include<time.h> #in ...

  6. [C入门 - 游戏编程系列] 贪吃蛇篇(六) - 蛇实现

    这一篇是关于设置蛇的属性的,接上一篇(五). 设置蛇的速度,很简单,只要不是负数就行了. void SNK_SetSnakeSpeed(Snake *snake, int speed) { ) sna ...

  7. [C入门 - 游戏编程系列] 贪吃蛇篇(四) - 食物实现

    由于食物是贪吃蛇游戏中最简单的一部分,而且和其他部分关联性不强,基本上是一个独立的部分,所以我打算先实现它. 我的想法是食物必须在世界中才能被创造出来,也就是说,先有世界再有食物,所以我得先判断世界是 ...

  8. [C入门 - 游戏编程系列] 贪吃蛇篇(三) - 蛇定义

    蛇是这个游戏的主角,要实现的功能也是最复杂的一个.因为蛇不止有属性,还有行为.它会动,还会吃东西,还会长大!而且还会死!这是很要命的.我一向看不懂复杂的代码,也写不出复杂的代码.所以对于蛇,我很纠结, ...

  9. [C入门 - 游戏编程系列] 贪吃蛇篇(二) - 食物定义

    游戏中的食物没有那么多复杂属性,特别是贪吃蛇游戏中,我把食物看待的很简单: 1. 它必须属于世界,才能出现在世界.不可能一个不属于世界的食物,出现在世界中:但是可能存在着一个食物,它属于世界,但是却没 ...

随机推荐

  1. 《JavaScript高级程序设计(第3版)》笔记-第1章-JavaScript 简介

    PS:第一章内容实在不多,就把前些日子看过的记录整理了一下,先发上来. 1.1 JavaScript 简史 1.JavaScript诞生前期目的主要是为了处理这种简单的表单验证. 1.2 JavaSc ...

  2. jquery select操作大全

    添加option $("#ID option").each(function(){ if($(this).val() == 111){ $(this).remove(); } }) ...

  3. JavaScript原型

    prototype与_proto_ 对象的 prototype 属性的方法.属性为对象所属的那一"类"所共有.对象原型链通过 proto 属性向上寻找. 为 proto 指定 nu ...

  4. EST

    表达序列标签(expressed sequence tags,ESTs)是指从不同组织来源的cDNA序列.这一概念首次由Adams 等于1991年提出.近年来由此形成的技术路线被广泛应用于基因识别.绘 ...

  5. 3D游戏编程大师技巧──环境搭建

    刚开微博,想借助这个平台与大家交流,写下自己的学习记录,希望得到大家的批评指正. 好了,进入主题.这段时间对游戏编程很感兴趣,于是在网友的推荐下开始学习<3D游戏编程大师技巧>这本书.今天 ...

  6. Javascript设计模式学习一

    学习Javascript设计模式之前,需要先了解一些相关知识,面向对象的基础知识.this等重要概念,以及掌握一些函数式编程的技巧. Js多态 多态的思想:实际上是把“做什么”和“谁去做”分离开来.例 ...

  7. PV、EV、AC、BAC、EAC、ETC等计算公式含义

    PV.EV.AC.BAC.EAC.ETC等计算公式含义 PV Planned Value:计划值 应该完成多少工作, (按照计划截止目前应该花费的预算) AC Actual Cost:实际成本, 完成 ...

  8. 查找Linux中内存和CPU使用率最高的进程

    下面的命令会查看到按照RAM和CPU降序方式的前最高几名进程的列表: [root@iZ25pvjcsyhZ ~]# ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem ...

  9. 深入理解android:id以及@+id/name和@id/name的区别联系

    今天为了好好研究了下@+id/name和@id/name的区别以及联系,又翻了翻文档/guide/topics/resources/layout-resource.html中关于 android:id ...

  10. POJ1753(位操作和枚举)

    题目:http://poj.org/problem?id=1753 题意:一块4*4的棋盘,黑白块不规律分布,翻动一个色块,其上下左右,都会被翻动,知道全黑全白为止.输出最小次数,达不到则输出“Imp ...