通過編寫“猜數字”遊戲學習 Lua
通過編寫一個簡單的遊戲來認識 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 的範圍內選擇一個數字:
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()
函式將這個輸入轉換為整數型別,將結果賦值回初始為 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” 在葡萄牙語中的意思是“月亮”,所以今晚可以嘗試一下。
via: http://opensource.com/article/20/12/lua-guess-number-game
作者:Seth Kenlon 選題:lujun9972 譯者:geekpi 校對:wxy
- 2021年軟體測試的六大趨勢,必看!
- 重磅:Python/Java/C 2020年之爭!誰是你心中的NO.1?
- 新零售的未來 智慧移動機器人將發揮哪些作用?
- pytest-assume外掛(全網最詳細解釋):多重斷言執行
- UML之互動圖(序列圖與協作圖)
- 【一看】看圖說話之瓶頸
- MSSQL系列之十四 無限極分類的解決辦法
- 通過編寫“猜數字”遊戲學習 Lua
- Linux-基礎命令1
- rf IDEAS為LG電子提供WAVE ID(R)安全訪問技術
- 網工學習必備筆記——VLAN路由-三層交換
- Zabbix經驗分享-缺包常見問題處理
- 我用Pipenv來管理專案環境,大寫的爽
- Kotlin 百度離線人臉採集SDK
- CenOS 7 rpm包安裝lamp
- 取餘運算應用(2)-在glsl中
- 淺談 Ads Auction(1) - 知乎
- 感謝一直以來的陪伴,我們抽個獎吧!
- 速度數百倍之差,有人斷言KNN面臨淘汰,更快更強的ANN將取而代之 - 知乎
- 高併發賬戶記錄查詢