通过编写“猜数字”游戏学习 Lua

开发 后端
通过编写一个简单的游戏来认识 Lua,它是一种动态类型的、轻量级的、高效的、可嵌入的脚本语言。

[[375139]]

通过编写一个简单的游戏来认识 Lua,它是一种动态类型的、轻量级的、高效的、可嵌入的脚本语言。

如果你是 Bash、Python 或 Ruby 等脚本语言的爱好者,你可能会发现 Lua 很有趣。Lua 是一种动态类型的、轻量级的、高效的、可嵌入的脚本语言,它有与 C 语言的 API 接口。它通过基于寄存器的虚拟机解释字节码来运行,它可以用于过程式编程、函数式编程和数据驱动编程等编程方式。它甚至可以通过巧妙地使用数组(即“table”)来模拟类,以用于面向对象的编程。

感受一门语言的好方法是通过编写一个你已经熟悉的简单应用。最近,一些作者已经演示了如何使用他们最喜欢的语言来创建一个“猜数字”游戏。Lua 是我最喜欢的语言之一,所以这是我的 Lua 版猜数字游戏。

安装 Lua

如果你是在 Linux 上,你可以从你的发行版仓库中安装 Lua。在 macOS 上,你可以从 MacPorts 或 Homebrew 安装 Lua。在 Windows 上,你可以从 Chocolatey 安装 Lua。

安装 Lua 后,打开你最喜欢的文本编辑器,可以准备编写了。

Lua 代码

首先,你必须设置一个伪随机数生成器,这样你的玩家就有一些不可预知的东西来尝试猜测。这是一个两个步骤的过程:首先,你根据当前的时间生成一个随机种子,然后在 1 到 100 的范围内选择一个数字:

  1. math.randomseed(os.time())
  2. number = math.random(1,100)

接下来,创建一个 Lua 所谓的table来表示你的玩家。表就像一个 Bash 中的数组或 Java 中的 ArrayList。你可以创建一个表,然后分配与该表相关的子变量。在这段代码中,player 是表,而 player.guess 是表中的一个条目:

  1. player = {}
  2. player.guess = 0

处于调试的需求,可以输出这个秘密数字。这对游戏并不合适,但对测试很有帮助。Lua 中的注释是在前面放双破折号:

  1. print(number) --debug

接下来,设置一个 while 循环,当分配给 player.guess 的值不等于代码开始时建立的随机的 number 时,循环将永远运行。目前,player.guess 被设置为 0,所以它不等于 number。Lua 的不等式数学运算符是 ~=,诚然这很独特,但过一段时间你就会习惯。

在这个无限循环的过程中,首先游戏会打印一个提示,让玩家明白游戏的内容。

接下来,Lua 会暂停,等待玩家输入猜测的数。Lua 使用 io.read 函数从文件和标准输入 (stdin) 中读取数据。你可以将 io.read 的结果分配到一个变量中,这个变量是在 player 表中动态创建的。处理玩家输入的问题是,即使它是一个数字,它也是作为一个字符串读取的。你可以使用 tonumber() 函数将这个输入转换为整数类型,将结果赋值回初始为 0 的 player.guess 变量:

  1. while ( player.guess ~= number ) do
  2.   print("Guess a number between 1 and 100")
  3.   player.answer = io.read()
  4.   player.guess = tonumber(player.answer)

现在 player.guess 包含了一个新的值,它将与 if 语句中的随机数进行比较。Lua 使用关键字 ifelseif 和 else,并用关键字 end 来结束该语句:

  1.   if ( player.guess > number ) then
  2.     print("Too high")
  3.   elseif ( player.guess < number) then
  4.     print("Too low")
  5.   else
  6.     print("That's right!")
  7.     os.exit()
  8.   end
  9. end

最后,函数 os.exit() 在成功后关闭应用,关键字 end 使用了两次:一次是结束 if 语句,另一次是结束 while 循环。

运行应用

在终端上运行游戏:

  1. $ lua ./guess.lua
  2. 96
  3. Guess a number between 1 and 100
  4. 1
  5. Too low
  6. Guess a number between 1 and 100
  7. 99
  8. Too high
  9. Guess a number between 1 and 100
  10. 96
  11. That's right!

就是这样!

直观且一致

从这段代码中可以看出,Lua 是非常一致且相当直观的。它的表机制是一种令人耳目一新的数据关联方式,它的语法也是简约而高效的。Lua 代码中几乎没有浪费的行,事实上,这个例子中至少有两行可以进一步优化,但我想把数据转换作为它的步骤来演示(也许你可以找到我所指的两行,并对它们进行重构)。

Lua 非常易于使用,它的文档阅读起来很愉快,主要是因为它的内容实在是不多。你会在短时间内学会核心语言,然后你就可以自由地探索 LuaRocks,发现别人贡献的各种很棒的库。“Lua” 在葡萄牙语中的意思是“月亮”,所以今晚可以尝试一下。 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2022-06-03 16:59:13

编程语言Awk

2023-01-13 18:55:09

游戏Ada编程语言

2023-02-23 14:30:27

游戏Tcl

2023-02-13 08:26:28

猜数字Basic

2021-10-04 18:49:46

Fortran 77语言猜数字

2020-12-28 06:29:31

Bash互动游戏Linux

2021-01-03 16:30:34

Rust编程语言

2021-01-14 08:55:20

C语言编程

2013-12-13 15:48:52

Lua脚本语言

2013-12-13 15:42:32

Lua脚本语言

2021-04-13 06:35:13

Elixir语言编程语言软件开发

2013-12-13 16:46:18

Lua脚本语言

2019-09-23 09:11:02

Python文本编辑器操作系统

2013-12-12 17:30:03

Lua例子

2013-12-13 16:53:00

Lua脚本语言C++

2011-08-25 10:40:21

Lua游戏

2019-10-08 15:27:18

扫雷BashLinux

2013-12-13 15:54:32

Lua脚本语言

2011-08-23 16:59:16

C++LUA脚本LUA API

2020-12-09 11:42:18

WiFi IoT鸿蒙开发
点赞
收藏

51CTO技术栈公众号