[关闭]
@alone330921 2018-07-11T12:17:26.000000Z 字数 2181 阅读 91

Lesson2.5 Hello, Lua

RoboCup rbk lua

Organized by Z.Y.L.

0.学习目标

  1. 了解lua脚本语言
  2. 会写一个简单的战术脚本,并学会使用decoda
  3. 了解lua文件之间的关系
  4. 了解C++与lua之间的通信

1.了解lua脚本语言

Lua 是一个小巧的脚本语言,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。 一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。

  1. --注释符号: --单行注释;--[[]]多行注释;sublime快捷键Ctrl + '/'
  2. print("hello world")
  3. local posX = 50
  4. b = 10 --在默认情况下,变量总是认为是全局的
  5. b = nil --delete b
  6. -- false = nil
  7. -- 0 = 1 = true = ...
  8. local tbl2 = {"apple", "pear", "orange", "grape"} --初始化一个“表”
  9. a = {}
  10. a["key"] = "value"
  11. key = 10
  12. a[key] = 22
  13. a[key] = a[key] + 11
  14. for k, v in pairs(a) do
  15. print(k .. " : " .. v)
  16. end
  17. optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
  18. function_body
  19. return result_params_comma_separated
  20. end
  21. -- optional_function_scope: 该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local
  22. -- function_name: 指定函数名称。
  23. -- argument1, argument2, argument3..., argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。
  24. -- function_body: 函数体,函数中需要执行的代码语句块。
  25. -- result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。
  26. --在函数参数列表中使用三点 ... 表示函数有可变的参数。
  27. function add(...)
  28. local s = 0
  29. for i, v in ipairs{...} do --> {...} 表示一个由所有变长参数构成的数组
  30. s = s + v
  31. end
  32. return s
  33. end
  34. print(add(3,4,5,6,7)) --->25
  35. -- [[泛型for迭代器
  36. 泛型 for 在自己内部保存迭代函数,实际上它保存三个值:迭代函数、状态常量、控制变量。
  37. 泛型 for 迭代器提供了集合的 key/value 对,语法格式如下:
  38. for k, v in pairs(t) do
  39. print(k, v)
  40. end
  41. 上面代码中,k, v为变量列表;pairs(t)为表达式列表。]]
  42. --Lua模块与包
  43. ---创建一个模块就是创建一个table
  44. -- 文件名为 module.lua
  45. -- 定义一个名为 module 的模块
  46. module = {}
  47. module.constant = "这是一个常量" -- 定义一个常量
  48. function module.func1() -- 定义一个函数
  49. io.write("这是一个公有函数!\n")
  50. end
  51. local function func2()
  52. print("这是一个私有函数!")
  53. end
  54. function module.func3()
  55. func2()
  56. end
  57. return module
  58. -- Lua提供了一个名为require的函数用来加载模块。要加载一个模块,只需要简单地调用就可以了。
  59. require("<模块名>")
  60. require "<模块名>"
  61. --执行 require 后会返回一个由模块常量或函数组成的 table,并且还会定义一个包含该 table 的全局变量。
  62. --

参考教程:Lua教程

2. 会写一个简单的战术脚本,并学会使用decoda

详见教学视频!

3.了解lua文件之间的关系

3.1 rbk、zeus中的lua战术脚本结构与分类

比赛中最常改动的lua脚本位于目录:rbk\robokit_ssl2017\bin\lua_scripts\ssl之下

FolderName Description
opponent 针对世界强队和特殊情况的战术脚本
play 定位球(Ref)和普通(Nor)情况下的进攻(Kick)和防守(Def)的战术脚本
skill 具体动作的战术脚本
utils 工具类脚本
worldmodel 物理世界的反馈判断(Judge)
ZeusLua 未知
Config.lua 整场比赛的配置文件
... ...
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注