超过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年由巴西一个大学研究小组发明,其设计目标是作为嵌入式 ...
随机推荐
- orcl 删除重复的行
delete from FOODDETAIL t where t.id in (select t.id from FOODDETAIL where t.sendtime>=to_date(' ...
- Cordova CLI源码分析(三)——初始化
本部分主要涉及以下三个文件 1 cli.js 2 cordova.js 3 events.js 通过前一篇package.json的分析,可以知道,当命令行执行cordova相关命令时,首先调用mai ...
- a标签的背景图在ie8下不显示的问题
突然发现临下班时候问题就多, 马上下班了被头头告知线上已经上线很久的活动现在有个兼容性问题, a标签的背景图在ie8下会有不显示的情况. 我自己找了台ie8的机器实验了一下, 发现一切正常, 但是在另 ...
- Nginx安装手冊以及图片server部署
1. 安装gcc yum install gcc 2. 安装pcre,pcre-devel 在zhoulh文件夹下建立source build文件夹 mkdir source bu ...
- centos6.5安装nodejs
Preface(前言) 一次偶然的机会知道有nodejs这个东西,确实对它还是非常感兴趣的.刚開始仅仅知道它能让javascript写后台,然后前后台都由javascript来写,确实认为真的挺爽,毕 ...
- Linux内核源代码的学习过程转换完成细节
linux中的进程是个最主要的概念,进程从执行队列到開始执行有两个開始的地方, 一个就是switch_to宏中的标号1:"1:/t",//仅仅要不是新创建的进程,差点儿都是从上面的 ...
- Android在浏览器启动APP
要想在浏览器启动APP的方法例如以下: 在须要跳转的ACTIVITY中加入intent-filter的相关信息: <intent-filter> <data android: ...
- 建立Hibernate二级Cache
建立Hibernate二级Cache它需要两个步骤:首先,一定要使用什么样的数据并发策略,然后配置缓存过期时间,并设置Cache提供器. 有4种内置的Hibernate数据并发冲突策略,代表数据库隔离 ...
- uva 11427 - Expect the Expected(概率)
题目链接:uva 11427 - Expect the Expected 题目大意:你每天晚上都会玩纸牌,每天固定最多玩n盘,每盘胜利的概率为p,你是一个固执的人,每天一定要保证胜局的比例大于p才会结 ...
- JQuery Easy Ui (Tree树)详解(转)
第一讲:JQuery Easy Ui到底是什么呢? 首先咱们知道JQuery是对Java Script的封装,是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等.. JQuery ui是在j ...