自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

通過編寫“猜數(shù)字”游戲?qū)W習(xí) Lua

開發(fā) 后端
通過編寫一個簡單的游戲來認(rèn)識 Lua,它是一種動態(tài)類型的、輕量級的、高效的、可嵌入的腳本語言。

[[375139]]

通過編寫一個簡單的游戲來認(rèn)識 Lua,它是一種動態(tài)類型的、輕量級的、高效的、可嵌入的腳本語言。

如果你是 Bash、Python 或 Ruby 等腳本語言的愛好者,你可能會發(fā)現(xiàn) Lua 很有趣。Lua 是一種動態(tài)類型的、輕量級的、高效的、可嵌入的腳本語言,它有與 C 語言的 API 接口。它通過基于寄存器的虛擬機(jī)解釋字節(jié)碼來運(yùn)行,它可以用于過程式編程、函數(shù)式編程和數(shù)據(jù)驅(qū)動編程等編程方式。它甚至可以通過巧妙地使用數(shù)組(即“table”)來模擬類,以用于面向?qū)ο蟮木幊獭?/p>

感受一門語言的好方法是通過編寫一個你已經(jīng)熟悉的簡單應(yīng)用。最近,一些作者已經(jīng)演示了如何使用他們最喜歡的語言來創(chuàng)建一個“猜數(shù)字”游戲。Lua 是我最喜歡的語言之一,所以這是我的 Lua 版猜數(shù)字游戲。

安裝 Lua

如果你是在 Linux 上,你可以從你的發(fā)行版?zhèn)}庫中安裝 Lua。在 macOS 上,你可以從 MacPorts 或 Homebrew 安裝 Lua。在 Windows 上,你可以從 Chocolatey 安裝 Lua。

安裝 Lua 后,打開你最喜歡的文本編輯器,可以準(zhǔn)備編寫了。

Lua 代碼

首先,你必須設(shè)置一個偽隨機(jī)數(shù)生成器,這樣你的玩家就有一些不可預(yù)知的東西來嘗試猜測。這是一個兩個步驟的過程:首先,你根據(jù)當(dāng)前的時間生成一個隨機(jī)種子,然后在 1 到 100 的范圍內(nèi)選擇一個數(shù)字:

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

接下來,創(chuàng)建一個 Lua 所謂的table來表示你的玩家。表就像一個 Bash 中的數(shù)組或 Java 中的 ArrayList。你可以創(chuàng)建一個表,然后分配與該表相關(guān)的子變量。在這段代碼中,player 是表,而 player.guess 是表中的一個條目:

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

處于調(diào)試的需求,可以輸出這個秘密數(shù)字。這對游戲并不合適,但對測試很有幫助。Lua 中的注釋是在前面放雙破折號:

  1. print(number) --debug

接下來,設(shè)置一個 while 循環(huán),當(dāng)分配給 player.guess 的值不等于代碼開始時建立的隨機(jī)的 number 時,循環(huán)將永遠(yuǎn)運(yùn)行。目前,player.guess 被設(shè)置為 0,所以它不等于 number。Lua 的不等式數(shù)學(xué)運(yùn)算符是 ~=,誠然這很獨(dú)特,但過一段時間你就會習(xí)慣。

在這個無限循環(huán)的過程中,首先游戲會打印一個提示,讓玩家明白游戲的內(nèi)容。

接下來,Lua 會暫停,等待玩家輸入猜測的數(shù)。Lua 使用 io.read 函數(shù)從文件和標(biāo)準(zhǔn)輸入 (stdin) 中讀取數(shù)據(jù)。你可以將 io.read 的結(jié)果分配到一個變量中,這個變量是在 player 表中動態(tài)創(chuàng)建的。處理玩家輸入的問題是,即使它是一個數(shù)字,它也是作為一個字符串讀取的。你可以使用 tonumber() 函數(shù)將這個輸入轉(zhuǎn)換為整數(shù)類型,將結(jié)果賦值回初始為 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)

現(xiàn)在 player.guess 包含了一個新的值,它將與 if 語句中的隨機(jī)數(shù)進(jìn)行比較。Lua 使用關(guān)鍵字 if、elseif 和 else,并用關(guān)鍵字 end 來結(jié)束該語句:

  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

最后,函數(shù) os.exit() 在成功后關(guān)閉應(yīng)用,關(guān)鍵字 end 使用了兩次:一次是結(jié)束 if 語句,另一次是結(jié)束 while 循環(huán)。

運(yùn)行應(yīng)用

在終端上運(yùn)行游戲:

  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 是非常一致且相當(dāng)直觀的。它的表機(jī)制是一種令人耳目一新的數(shù)據(jù)關(guān)聯(lián)方式,它的語法也是簡約而高效的。Lua 代碼中幾乎沒有浪費(fèi)的行,事實(shí)上,這個例子中至少有兩行可以進(jìn)一步優(yōu)化,但我想把數(shù)據(jù)轉(zhuǎn)換作為它的步驟來演示(也許你可以找到我所指的兩行,并對它們進(jìn)行重構(gòu))。

Lua 非常易于使用,它的文檔閱讀起來很愉快,主要是因?yàn)樗膬?nèi)容實(shí)在是不多。你會在短時間內(nèi)學(xué)會核心語言,然后你就可以自由地探索 LuaRocks,發(fā)現(xiàn)別人貢獻(xiàn)的各種很棒的庫。“Lua” 在葡萄牙語中的意思是“月亮”,所以今晚可以嘗試一下。 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

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

猜數(shù)字Basic

2021-10-04 18:49:46

Fortran 77語言猜數(shù)字

2020-12-28 06:29:31

Bash互動游戲Linux

2021-01-03 16:30:34

Rust編程語言

2021-01-14 08:55:20

C語言編程

2021-04-13 06:35:13

Elixir語言編程語言軟件開發(fā)

2013-12-13 15:42:32

Lua腳本語言

2013-12-13 15:48:52

Lua腳本語言

2019-09-23 09:11:02

Python文本編輯器操作系統(tǒng)

2013-12-13 16:46:18

Lua腳本語言

2013-12-12 17:30:03

Lua例子

2019-10-08 15:27:18

掃雷BashLinux

2011-08-25 10:40:21

Lua游戲

2013-12-13 16:53:00

Lua腳本語言C++

2015-09-29 09:38:50

Java程序猜大小

2020-12-09 11:42:18

WiFi IoT鴻蒙開發(fā)

2013-12-13 15:54:32

Lua腳本語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號