Linux中國

通過編寫「猜數字」遊戲學習 Lua

如果你是 Bash、Python 或 Ruby 等腳本語言的愛好者,你可能會發現 Lua 很有趣。Lua 是一種動態類型的、輕量級的、高效的、可嵌入的腳本語言,它有與 C 語言的 API 介面。它通過基於寄存器的虛擬機解釋位元組碼來運行,它可以用於過程式編程、函數式編程和數據驅動編程等編程方式。它甚至可以通過巧妙地使用數組(即「 table 」)來模擬類,以用於面向對象的編程。

感受一門語言的好方法是通過編寫一個你已經熟悉的簡單應用。最近,一些作者已經演示了如何使用他們最喜歡的語言來創建一個「猜數字」遊戲。Lua 是我最喜歡的語言之一,所以這是我的 Lua 版猜數字遊戲。

安裝 Lua

如果你是在 Linux 上,你可以從你的發行版倉庫中安裝 Lua。在 macOS 上,你可以從 MacPortsHomebrew 安裝 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 ) do
  print("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 ) then
    print("Too high")
  elseif ( player.guess < number) then
    print("Too low")
  else
    print("That&apos;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&apos;s right!

就是這樣!

直觀且一致

從這段代碼中可以看出,Lua 是非常一致且相當直觀的。它的表機制是一種令人耳目一新的數據關聯方式,它的語法也是簡約而高效的。Lua 代碼中幾乎沒有浪費的行,事實上,這個例子中至少有兩行可以進一步優化,但我想把數據轉換作為它的步驟來演示(也許你可以找到我所指的兩行,並對它們進行重構)。

Lua 非常易於使用,它的文檔閱讀起來很愉快,主要是因為它的內容實在是不多。你會在短時間內學會核心語言,然後你就可以自由地探索 LuaRocks,發現別人貢獻的各種很棒的庫。「Lua」 在葡萄牙語中的意思是「月亮」,所以今晚可以嘗試一下。

via: https://opensource.com/article/20/12/lua-guess-number-game

作者:Seth Kenlon 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國