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

  • 来源:https://linux.cn/article-13000-1.html
  • 作者:Seth Kenlon
  • 译者:geekpi

(本文字数:2777,阅读时长大约:3 分钟)

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

感受一门语言的好方法是通过编写一个你已经熟悉的简单应用。最近,一些作者已经演示了如何使用他们最喜欢的语言来创建一个“猜数字”游戏。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 所谓的 表(table)来表示你的玩家。表就像一个 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() 函数将这个输入转换为整数类型,将结果赋值回初始为 0player.guess 变量:

while ( player.guess ~= number ) doprint("Guess a number between 1 and 100")player.answer = io.read()player.guess = tonumber(player.answer)

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

  if ( player.guess > number ) thenprint("Too high")elseif ( player.guess < number) thenprint("Too low")elseprint("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驱动设置_通过编写“猜数字”游戏学习 Lua | Linux 中国相关推荐

  1. C语言编写猜数字游戏及随机数生成方法

    C语言编写猜数字游戏及随机数生成方法 文章目录 C语言编写猜数字游戏及随机数生成方法 前言 一.猜数字小游戏 内容: 步骤: 代码的实现: 二.随机数生成的方法 总结 前言 对于C语言初学者来说,当我 ...

  2. 用二分法编写猜数字游戏(含:猜电脑随机数,和用户自己想的数字)python

    目录 #什么是二分法 #用二分法猜电脑随机数 #用二分法猜用户所想的数 1.什么是二分法? 对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点 ...

  3. python编写猜数字游戏

    一.猜数字游戏介绍 猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩. 二.猜数字游戏规则 先解释标 ...

  4. 冰豹lua驱动设置_卡宴?卡宴!——冰豹ROCCAT Kain 120 AIMO开箱

    前言 原本一直在用罗技的G700s,但是鉴于众所周知的"电老虎"原因,再加上重量的问题,一直想换一个鼠标试试,虽然不太玩游戏,但是平时使用也喜欢高DPI的设置.另外还稍许有点汗手的 ...

  5. java猜数字游戏代码_Java如何编写猜数字游戏

    在看到这个小游戏的时候,首先想到的是: 1.电脑会随机生成一个数字. 2.我们需要去猜测生成的这个数字,并输入我们猜测的值. 3.电脑生成的随机数需要和我们猜测的值相比较. 4.比较的结果需要体现出来 ...

  6. c语言编写猜数字游戏

    #include<stdio.h> #include<stdlib.h> #include<time.h>int main() {int num = 0;int r ...

  7. jsp编写猜数字游戏

    实现猜数字的小游戏.当客户访问服务器上的getNumber.jsp时,随机分配给客户一个1-100之间的整数,然后将这个整数存在客户的session对象中.客户在表单里输入一个整数,来猜测分配给自己的 ...

  8. rust如何在木板上上传图片_通过编写一个简单的游戏来学习 Rust | Linux 中国

    导读:你可以尝试以多种语言编程一个简单的游戏来开始编程之路. 本文字数:4068,阅读时长大约: 5分钟 https://linux.cn/article-12979-1.html 作者:Moshe ...

  9. python编写猜数游戏代码、如果不是整数、显示输入错误_数字炸弹游戏程序 用python来实现...

    相信许多小伙伴都玩过数字炸弹游戏,就是指在一定数字范围(一般是整数,不包含边界)里,一个玩家选中一个数字当作炸弹,其余玩家在这个范围含数字,每次只要没猜中炸弹数字,则根据玩家猜的数字缩小范围,直至其中 ...

最新文章

  1. etcd 笔记(09)— 基于 etcd 实现微服务的注册与发现
  2. VS2005 和 SQL Server 2005 安装顺序不同会发生什么?
  3. 题目1022:游船出租
  4. struct 类型指针技巧
  5. why the ebitda and ebit differ so much for netflix?
  6. ActiveDirectory之不常用操作
  7. 【atcoder】GP 2 [agc036C]
  8. cordova 更改app版本_Cordova打包Android应用流程(MAC)
  9. twitter storm源码走读(五)
  10. python+opencv实现机器视觉基础技术(2)(宽度测量,缺陷检测,医学检测
  11. Linux 学习记录 二 (文件的打包压缩).
  12. 更改appstore开发商名字
  13. java web 项目分模块,javaweb项目模块划分
  14. 2022年山东省安全员C证特种作业证考试题库及答案
  15. ghost u盘 linux,用U盘启动G4L备份还原linux系统用Ghost备份Windows操作系统
  16. JAVA初级项目——银行账户管理
  17. P2342 叠积木 并查集
  18. 运用c++编写一个计算三角形周长和面积的程序
  19. Android源码开发之蓝牙通知振动
  20. VR看房:全景图和移动切换的实现

热门文章

  1. servlet、genericservlet、httpservlet之间的区别
  2. 中断处理及系统调用的处理过程
  3. 使用Sublime text 3打造一个小巧但强大的Go语言开发IDE
  4. C# HttpWebRequest提交数据方式
  5. C#中三种截屏方式总结
  6. redis 使用管道pipeline和不使用管道的性能对比
  7. php下intval()和(int)转换使用与区别
  8. Linux的Nginx三:类型|特点
  9. java如何把string转化E_java将string转为代码执行
  10. extjs5的grid垂直滚动条bug_Extjs grid panel 滚动条失效的解决方法