游戏算法中lua脚本详解
此外,函数本身也是一个变量,比如:
dp@dp:~ % cat test.lua
local mylen={}
mylen.len3=function (x,y,z)
return math.sqrt(x*x+y*y+z*z)
end
mylen.len2=function (x,y)
return math.sqrt(x*x+y*y)
end
print(mylen.len2(10,9))
print(mylen.len3(10,9,-9))
dp@dp:~ %
dp@dp:~ % lua test.lua
13.453624047074
16.186414056239
dp@dp:~ %
可以定义闭包,将一个函数写在另一个函数之内,定义在内部的函数可以访问外部函数的局部变量,lua中称之为closure:
dp@dp:~ % cat test1.lua
function mysum(i)
local sums=0
return function()
sums=sums+i
return sums
end
end
my_sum=mysum(2)
print(my_sum())
print(my_sum())
print(my_sum())
my_sum=mysum(9)
print(my_sum())
print(my_sum())
print(my_sum())
dp@dp:~ % lua test1.lua
2
4
6
9
18
27
dp@dp:~ %
可以使用loadfile与dofile将整个lua代码做为函数来执行:
> dofile("test1.lua")
2
4
6
9
18
27
> dofile("test.lua")
13.453624047074
16.186414056239
> myf=loadfile("test.lua")
> myf()
13.453624047
074
16.186414056239
也可以通过loadstring定义一段语句
然后将这段语句做为一个函数执行
> myf=loadstring("x=x*2")
> x=10
> myf()
> print(x)
20
> myff=loadstring("x=io.read();x=x+2;print(x)")
> myff() www.tygj123.com
234
236
检查条件,触发错误
dp@dp:~ % cat mysum.lua
mysum=0
while true do
print("请输入一个数(输入0退出计算)")
num=assert(io.read("*number"),"非数字输入")
print(num)
if num==0 then break end
end
dp@dp:~ %
dp@dp:~ % lua mysum.lua
请输入一个数(输入0退出计算)
asdf
lua: mysum.lua:4: 非数字输入
stack traceback:
[C]: in function 'assert'
mysum.lua:4: in main chunk
[C]: in ?
dp@dp:~ %
或
mysum=0
while true do
print("请输入一个数(输入0退出计算)")
num=io.read("*number")
if not num then error("非数字输入") end
print(num)
if num==0 then break end
End
运行后,输入非数字会触发错误而退出
dp@dp:~ % lua mysum1.lua
请输入一个数(输入0退出计算)
1342
1342
请输入一个数(输入0退出计算)
asf
lua: mynum1.lua:5: 非数字输入
stack traceback:
[C]: in function 'error'
mynum1.lua:5: in main chunk
[C]: in ?
dp@dp:~ %
也可使用pcall调用可能发生错误的函数,然后进一步处理错误
my_sum=0 www.yztrans.com
function mysum()
while true do
print("请输入一个数(输入0退出计算)")
num=io.read("*number")
if not num then error("非数字输入") end
if num==0 then break end
my_sum=my_sum+num
end
end
if pcall(mysum) then
print("计算完毕,累加结果:"..my_sum)
else
print("只能输入数字,程序异常退出!")
print("累加结果:"..my_sum)
end
dp@dp:~ % lua mysum.lua
请输入一个数(输入0退出计算)
234
请输入一个数(输入0退出计算)
-324
请输入一个数(输入0退出计算)
88
请输入一个数(输入0退出计算)
123
请输入一个数(输入0退出计算)
0
计算完毕,累加结果:121
dp@dp:~ % lua mysum.lua
请输入一个数(输入0退出计算)
234
请输入一个数(输入0退出计算)
-11
请输入一个数(输入0退出计算)
233
请输入一个数(输入0退出计算)
88
请输入一个数(输入0退出计算)
asdf
只能输入数字,程序异常退出!
累加结果:544
游戏算法中lua脚本详解的更多相关文章
- SVD在推荐系统中的应用详解以及算法推导
SVD在推荐系统中的应用详解以及算法推导 出处http://blog.csdn.net/zhongkejingwang/article/details/43083603 前面文章SVD原理及推 ...
- FLASH动作脚本详解
FLASH动作脚本详解 一.FLASH脚本基础入门讲解 二.按钮AS的编写 三.影片剪辑的AS编写 四.动态文本框 五.影片剪辑的拖拽 六.流程控制与循环语句 七.绘图及颜色的AS的编写 八.声音 A ...
- 「翻译」Unity中的AssetBundle详解(一)
AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...
- [翻译]Unity中的AssetBundle详解(三)
构建AssetBundles 在AssetBundle工作流程的文档中,我们有一个示例代码,它将三个参数传递给BuildPipeline.BuildAssetBundles函数.让我们更深入地了解我们 ...
- 「翻译」Unity中的AssetBundle详解(二)
为AssetBundles准备资源 使用AssetBundles时,您可以随意将任何Asset分配给所需的任何Bundle.但是,在设置Bundles时,需要考虑一些策略.这些分组策略可以使用到任何你 ...
- oracle中imp命令详解 .
转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...
- 转:LoadRunner中参数化技术详解
LoadRunner中参数化技术详解 LoadRunner在录制脚本的时候,只是忠实的记录了所有从客户端发送到服务器的数据,而在进行性能测试的时候,为了更接近真实的模拟现实应用,对于某些信息需要每次提 ...
- 【转】linux中inittab文件详解
原文网址:http://www.2cto.com/os/201108/98426.html linux中inittab文件详解 init的进程号是1(ps -aux | less),从这一点就能看出, ...
- DIV css中cursor属性详解-鼠标移到图片变换鼠标形状 (转)
css中cursor属性详解-鼠标移到图片变换鼠标形状 语法: cursor : auto | all-scroll | col-resize| crosshair | default | han ...
随机推荐
- intel集成显卡linux驱动安装
https://01.org/linuxgraphics/documentation/build-guide-0 https://01.org/linuxgraphics/community/mesa ...
- 酷派D530刷机指引
酷派D530是我的第一台智能手机,刚入手的时候是挺激动的,什么Root啦,精简系统删官方应用啦,app2sd啦,杂七杂八的应用装了一堆,折腾得不亦乐乎.但过了那个热度之后,现在我对于智能手机的要求还是 ...
- 什么是MBS,ABS和CDO
1. 都是资产证券化产品 华尔街有句名言“如果要增加未来的现金流,就把它做成证券.如果想经营风险,就把它做成证券”.从本质上来讲,MBS,ABS和 CDO都是资产证券化产品.根据美国证券交易委员会(S ...
- web前端面试试题总结---css篇
CSS 介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的? (1)有两种, IE 盒子模型.W3C 盒子模型: (2)盒模型: 内容(content).填充(padding).边界(m ...
- 经典C面试题
12个有趣的C语言面试题 面试题C 摘要:12个C语言面试题,涉及指针.进程.运算.结构体.函数.内存,看看你能做出几个! 1.gets()函数 问:请找出以下代码里的问题: #include< ...
- Tomcat: IllegalStateException: No output folder --reference
Today, I started to create a couple of JSP pages for the server-side part of my MSc thesis project i ...
- Android(java)学习笔记255:JNI之JNI概念
1. JNI是什么? java native interface (java本机接口) 比如方法声明: public final native Class<?> getClass(): ...
- Python基础----函数
1.作用域: 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'wupeiqi' print name 下面的结论对吗? 外层变量,可以被内 ...
- codevs 4650 破损的键盘(链表)
/* 之前一直不重视链表 (好吧说实话主要是看着板子都是指针就怂了T.T) 这道题比较基础 应用了链表的思想 数组模拟指针 遇到的问题就是跑着跑着光标跳到前面或者跳到后面 我们用next储存每个点下一 ...
- FFMPEG 视频旋转设置
fmpeg -i inputfile.mp4 -vf "transpose=1" outputfile.mp4 0=90CounterCLockwise and Vertical ...