超过lua上帝的语言
上帝的语言(god)它是基于lua和RPP新一代编程语言
为什么需要它?
1.好多人不喜欢lua语法,god的语法更像C
2.god支持元编程、闭包、协程
3.凡是lua支持的特性god也支持,lua不支持的宏god也支持,因此god比lua强大
4.god能够使用lua库,甚至同意god和lua混合编程
5.god是最快的脚本语言之中的一个,性能与C接近。由于god基于luaJIT
6.god的编译器仅仅有92行代码。这是世界上最简单的编译器,即使是菜鸟也能看懂并改动
7.god全然开源。92行代码想不开源都不行
官网:https://github.com/roundsheep/god
god写的控制台贪食蛇:
ffi=require('ffi')
ffi.cdef[
#pragma pack(1)
typedef struct
{
int dwSize;
int bVisible;
}CONSOLE_CURSOR_INFO;
int SetConsoleCursorInfo(int hConsoleOutput,
CONSOLE_CURSOR_INFO* lpConsoleCursorInfo);
int system(const char* s);
typedef struct
{
unsigned short x;
unsigned short y;
}COORD;
int SetConsoleCursorPosition(int hConsoleOutput,
COORD dwCursorPosition);
int GetStdHandle(int nStdHandle);
int printf(const char* fmt,...);
typedef unsigned short ushort;
int SetConsoleTextAttribute(int h,ushort w);
short GetAsyncKeyState(int vkey);
int GetTickCount();
]
clear=function(v)
{
var i
for(i=1,table.maxn(v))
{
v[i]=null
}
}
exist=function(v,a)
{
var i
for(i=1,table.maxn(v))
{
if(v[i]==a)
{
return true
}
}
return false
}
push=function(v,a)
{
v[table.maxn(v)+1]=a
}
push_front=function(v,a)
{
var count=#v
var i
for(i=count,1,-1)
{
v[i+1]=v[i]
}
v[1]=a
}
food=function()
{
g_food=math.modf(math.random()*10000)%200+1
if(exist(g_arr,g_food))
{
food()
}
}
update=function()
{
var i
for(i=1,200)
{
gotoxy(i%10*2,math.modf(i/10))
if(exist(g_arr,i))
{
out('■')
}
elif(i==g_food)
{
out('★')
}
else
{
out(' ')
}
}
}
gotoxy=function(x,y)
{
var pos=ffi.new('COORD',[])
pos.x=x
pos.y=y
ffi.C.SetConsoleCursorPosition(g_std_out,pos)
}
out=function(s)
{
ffi.C.printf(s)
}
init=function()
{
math.randomseed(os.time())
g_std_out=ffi.C.GetStdHandle(-11)
g_next=10
clear(g_arr)
push(g_arr,105)
food()
var cur_info=ffi.new('CONSOLE_CURSOR_INFO',[])
cur_info.dwSize=1
cur_info.bVisible=0
ffi.C.SetConsoleCursorInfo(g_std_out,cur_info)
ffi.C.system('mode con cols=20 lines=22')
ffi.C.SetConsoleTextAttribute(g_std_out,0x0a)
gotoxy(0,20)
out(' ******************')
}
key=function()
{
var temp
if(ffi.C.GetAsyncKeyState(0x26)!=0)
{
temp=-10
}
elif(ffi.C.GetAsyncKeyState(0x28)!=0)
{
temp=10
}
elif(ffi.C.GetAsyncKeyState(0x25)!=0)
{
temp=-1
}
elif(ffi.C.GetAsyncKeyState(0x27)!=0)
{
temp=1
}
else
{
return
}
if(table.maxn(g_arr)<2||g_arr[2]!=g_arr[1]+temp)
{
g_next=temp
}
}
check=function()
{
var temp=g_arr[1]+g_next
if(temp<1||temp>200||math.abs(temp%10-g_arr[1]%10)>1||exist(g_arr,temp))
{
return false
}
return true
}
g_arr=[]
init()
var start=ffi.C.GetTickCount()
while(true)
{
key()
if(ffi.C.GetTickCount()-start<100)
{
goto continue
}
start=ffi.C.GetTickCount()
if(!check())
{
break
}
push_front(g_arr,g_arr[1]+g_next)
if(g_food!=g_arr[1])
{
g_arr[#g_arr]=null
}
else
{
food()
}
update()
::continue::
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
超过lua上帝的语言的更多相关文章
- Lua和C语言的交互——C API
Lua可作为扩展性语言(Lua可以作为程序库用来扩展应用的功能),同时也是个可扩展的语言(Lua程序中可以注册由其他语言实现的函数). C和Lua交互的部分称为C API.C API是一个C代码与Lu ...
- Lua游戏脚本语言入门(一)
作者: 沐枫 (第二人生成员) 原文地址:http://job.17173.com/content/2009-01-22/20090122143452606,1.shtml 在这篇文章中,我想向大家介 ...
- lua调用C语言
在上一篇文章(C调用lua函数)中,讲述了如何用c语言调用lua函数,通常,A语言能调用B语言,反过来也是成立的.正如Java 与c语言之间使用JNI来互调,Lua与C也可以互调. 当lua调用c ...
- 开源抓包工具PowerSniff(支持lua,c语言作为脚本实时分析)
做这个程序的意图是wireshark插件编写复杂(虽然也支持lua),而轻量级的工具如smartsniff,minisniff不支持插件化数据分析,各种工具用下来或多或少不顺手.以前写的外挂也都是手工 ...
- 三种语言(c++、as、lua)中函数的差异性
对于不同的语言, 尤其是静态语言和动态语言, 对于函数的定义(即如何看待一个函数)和处理截然不同.具体来说可以分为两类: 1.将函数视为第一类型值, 即函数和其他的对象一样, 都是语言中一个普通的对象 ...
- 【quick-cocos2d-x】Lua 语言基础
版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...
- Lua语言的介绍和编程语言的归类
Lua 本条目介绍的是一种编程语言.关于关于Lua在维基百科中的使用,请见"维基百科:Lua".关于"Lua"一词的其他意思,请见"卢阿". ...
- 题外话:Lua脚本语言存在的意义
纯属个人见解. 大致来说:c/c++执行效率高,游戏中一些性能敏感的复杂计算需要用c/c++来实现,防止游戏卡顿和低帧率.这些复杂计算包括战斗逻辑,复杂AI,骨骼动画蒙皮骨骼点的坐标计算等等.但c++ ...
- Lua脚本语言快速入门手册
学了两天Lua语言,感叹其短小精悍,上手极快,语法还很舒服,不错!整理下学习过程中经常用到的基础知识,共勉! Lua用法简述 Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式 ...
随机推荐
- Kafka学习(一)配置及简单命令使用
一. Kafka中的相关概念的介绍 Kafka是一个scala实现的分布式消息中间件,当中涉及到的相关概念例如以下: Kafka中传递的内容称为message(消息),message 是通过topic ...
- iOS Dev (59) 高度自适应的UITextView
iOS Dev (59) 高度自适应的UITextView 作者:阿锐 地址:http://blog.csdn.net/prevention - 例如以下 _inputTextView 为一个 UIT ...
- firefox os 2.1版本号UI接口方面有了质的飞跃
由Mozilla新的移动设备操作系统开发Firefox os 经过多次迭代,我们看到的版本号Mozilla进步和艰辛,在充满当然,任何Android设备的情况下,坚持一个新的操作系统的移动设备,后1. ...
- Google Maps Android API v2 (2)- 地图对象
地图对象 Android的谷歌地图API允许你在你的Android应用程序中显示谷歌地图.在谷歌地图移动(GMM)的应用程序,你看到的地图,这些地图具有相同的外观和API暴露出许多相同的功能.GM ...
- java.net.SocketException: Unconnected sockets not implemented 解
JDK 这一问题的版本号,至Oracle公司JDK版本号bug.于6u12-rev号修复了该问题 请将JDK版本号升级到 1.6.0_12-b05 以上.推荐1.6.0_37 http://b ...
- FileStream:The process cannot access the file because it is being used by another process
先看下面一段代码(先以共享的方式打开文件读写,然后以只读的方式打开相同文件): FileStream fs = new FileStream(filePath, FileMode.Open, Fil ...
- [Windows Phone] 在 Windows Phone 8 控制闪光灯
原文:[Windows Phone] 在 Windows Phone 8 控制闪光灯 ? 前言 在 Windows Phone 如果想要控制闪光灯,该怎麽做?在 Windows Phone 8 提供类 ...
- Memcached FAQ
这篇FAQ包含了大家普遍关心的问题.非常值得一看. 原文:http://blog.csdn.net/jarfield/archive/2009/07/05/4322953.aspx 最后更新时间 20 ...
- atitit.设计模式(2) -----查询方式/ command 总结
atitit.设计模式(2) -----查询方式/ command 总结 1. 应用场景: 1 1. 代替一瓦if else 1 2. 建设api rpc风格的时候儿. 1 3. 菜单是Command ...
- js你真的了解offsetWidth吗
offsetWidth是什么? 答:它可以获取物体宽度的数值 那么就只是这样吗! html部分 <div id="div1"></div> <styl ...