Computercraft 交易機腳本
我試圖編寫一個電腦交易機,讓玩家在支付固定價格後選擇一個項目。這是我目前的設置:
這是我目前的程式碼:
sort = peripheral.warp("top") term.redirect(peripheral.warp("back")) print("Welcome at Alexanders record shop!") print("Every music disc costs 10 diamonds.") while dia<10 do print("You have paid"..dia.."Diamonds.") end
我的問題:
- 如何計算和提取鑽石?
- 玩家如何通過紅石按鈕選擇他的物品?
要檢查給定方向的庫存中有多少給定項目,您需要使用該
sorter.list(direction)
函式,其中direction
是一個整數,對應於與分揀機相關的庫存方向(0 表示向下,1 表示向上,2 -Z 為 3,+Z 為 4,-X 為 4,+X 為 5)。這個函式返回一個表,所以你必須使用循環來查看它。我實現了checkInput()
這樣的功能:function checkInput() inChest = sorter.list(inputDirection) for id,count in pairs(inChest) do if id==currency then return count end end return 0 end
where
inputDirection
是末影箱的方向,currency
是所需支付物品的物品 ID(在本例中為 264)。我是這樣做的,因此您可以稍後配置付款,而無需在任何地方進行更改。這返回鋤頭許多鑽石,如果有的話,在末影箱。您可以使用分類功能從庫存中提取項目並將它們移動到另一個庫存
sorter.extract(inputDirection, id, outputDirection, count)
。因此,例如,要為指定的記錄交易 10 顆鑽石item
,您可以執行以下操作(在確認付款存在並且記錄有庫存之後):sorter.extract(inputDirection, currency, paymentDirection, price) sorter.extract(stockDirection, item, inputDirection, 1)
至於按鈕,高級監視器的使用允許使用觸摸屏。我使用了 Direwolf20 的 Button API,可在此處的 pastebin 上找到(用於
pastebin get S8x0K3ui button
直接從 ComputerCraft 電腦下載它)。不過,這可能會讓人很困惑。Direwolf 在這裡有一個教程,解釋了每個函式的作用。您將要使用的核心功能是
button.setTable(name, func, xmin, xmax, ymin, ymax)
,其中func
是您希望按鈕在按下按鈕時執行的功能的名稱。您需要為每個想要擁有和使用的按鈕執行此操作。例如:button.setTable("^", cursorUp, true, 26, 27, 5, 8) button.setTable("v", cursorDown, true, 26, 27, 13, 16) button.setTable("Purchase", purchase, true, 10, 19, 18, 19)
(這些定位恰好在 3x3 顯示器設置上執行良好)。
我使用了一個
cursorPos
變數來跟踪游標所在的位置,並使用 和 相應地修改了該cursorUp()
變數cursorDown()
。該函式purchase()
使用目前游標位置作為選擇項目的參考,並進行交易。Monitor touch 是一個 pullEvent,可以用來觸發一個動作。像這樣:
while true do display() event, side, x, y = os.pullEvent("monitor_touch") button.checkxy(x,y) end
很抱歉,這個答案可能有點冗長和混亂。ComputerCraft 有時可以做到這一點。在我修補所需的各種 API 時,我實際上編寫了一個店面腳本,可以在此處的 pastebin 上找到它。無論您是想使用它,還是稍微看一下然後自己弄清楚,請繼續。在我看來,後者是一個更好的做法。
您可能想查看 ComputerCraft Wiki以了解有關所涉及 API 的更多資訊。一定要查看Direwolf 的關於 Button API 的教程,因為他在解釋程式碼方面比我好得多。最後,雖然文件有點稀缺,但在 ComputerCraft 論壇上有一些關於 MiscPeripherals 的文件,可在此處找到。