如果您是 Bash、Python 或 Ruby 等脚本语言的爱好者,您可能会对 Lua 感兴趣。Lua 是一种动态类型、轻量级、高效且可嵌入的脚本语言,具有与 C 语言接口的 API。它通过基于寄存器的虚拟机解释字节码来运行,可用于从过程式编程到函数式编程再到数据驱动编程的各种用途。它甚至可以通过巧妙地使用数组或表(用于模拟类)来实现面向对象编程。
熟悉一门语言的好方法是编写一个您已经熟悉的简单应用程序。最近,一些 Opensource.com 的记者演示了如何使用他们最喜欢的语言来创建猜数字游戏。Lua 是我最喜欢的语言之一,所以这是我的 Lua 猜数字游戏版本。
安装 Lua
如果您使用的是 Linux,您可以从发行版的软件仓库安装 Lua。在 macOS 上,您可以从 MacPorts 或 Homebrew 安装 Lua。在 Windows 上,您可以从 Chocolatey 安装 Lua。
安装 Lua 后,打开您喜欢的文本编辑器,准备开始编码。
Lua 代码
首先,您必须设置一个伪随机数生成器,以便您的玩家有一些不可预测的东西可以猜测。这是一个两步过程:首先,您基于当前时间启动一个随机种子,然后您在 1 到 100 的范围内选择一个数字
math.randomseed(os.time())
number = math.random(1,100)
接下来,创建 Lua 所谓的表来表示您的玩家。表就像 Bash 中的数组或 Java 中的 ArrayList。您可以创建一个表,然后分配与该表关联的子变量。在此代码中,player
是表,而 player.guess
是该表中的一个条目
player = {}
player.guess = 0
为了调试目的,打印秘密数字。这对游戏不利,但对测试很有帮助。Lua 中的注释以双破折号开头
print(number) --debug
接下来,设置一个 while
循环,只要分配给 player.guess
的值不等于代码开头建立的随机 number
,该循环就会永远运行。目前,player.guess
设置为 0,因此它不等于 number
。Lua 的不等式数学运算符是 ~=
,这确实很独特,但您会在一段时间后习惯它。
在这个无限循环中发生的第一件事是游戏打印一个提示,以便玩家理解游戏。
接下来,Lua 暂停并等待玩家输入猜测。Lua 使用 io.read
函数从文件和标准输入 (stdin) 读取。您可以将 io.read
的结果分配给在 player
表中动态创建的变量。玩家输入的问题在于,即使它是数字,也会被读取为字符串。您可以使用 tonumber()
函数将此输入转换为整数类型,并将结果分配回最初包含 0 的 player.guess
变量
while ( player.guess ~= number ) do
print("Guess a number between 1 and 100")
player.answer = io.read()
player.guess = tonumber(player.answer)
现在 player.guess
包含一个新值,它将在 if
语句中与随机数进行比较。Lua 使用关键字 if
、elseif
和 else
,并使用关键字 end:
终止语句
if ( player.guess > number ) then
print("Too high")
elseif ( player.guess < number) then
print("Too low")
else
print("That's right!")
os.exit()
end
end
最后,函数 os.exit()
在成功时关闭应用程序,关键字 end
使用了两次:一次用于结束 if
语句,另一次用于结束 while
循环。
运行应用程序
在终端中运行游戏
$ lua ./guess.lua
96
Guess a number between 1 and 100
1
Too low
Guess a number between 1 and 100
99
Too high
Guess a number between 1 and 100
96
That's right!
就是这样!
直观且一致
从这段代码中您可能可以看出,Lua 非常一致且相当直观。它的表机制是一种令人耳目一新的数据关联方式,其语法简洁高效。Lua 代码中几乎没有浪费的行;事实上,本例中至少有一对行可以进一步优化,但我希望演示数据转换作为一个独立的步骤(也许您可以找到我所指的两行并重组它们)。
Lua 是一种令人愉快的使用语言,其文档也令人愉快,主要是因为内容不多。您将在很短的时间内学会核心语言,然后您可以自由探索 LuaRocks,发现其他人贡献的所有出色库,让您使用 Lua 的时间更加轻松。“Lua”在葡萄牙语中意为“月亮”,所以今晚就尝试一下吧。
评论已关闭。