Nhiều script thường sẽ cần phải qua các từ điển hoặc bảng dữ liệu. Nhưng đôi khi, bạn có thể không biết bắt đầu và kết thúc của các cấu trúc dữ liệu này. Ví dụ, một từ điển của người chơi có thể đang thay đổi hoặc người chơi có thể có một túi đồ dùng lớn.
Trong những trường hợp này, bạn có thể sử dụng pairs() và ipairs() . Những cái này có thể được sử dụng với một for loop để qua mỗi thành phần mà không có điểm xuất phát và kết thúc biết.
Bài viết này sẽ tập trung vào việc sử dụng chúng, và có một ví dụ script thực tế nơi bạn theo dõi các đơn đặt nhà hàng trong một trò chơi nấu ăn.
Các từ điển và cặp()
pairs() được sử dụng với từ điển . Một ví dụ được thấy ở dưới.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() có thể được sử dụng để làm việc với chìa khóa, giá trị hoặc cả hai của một yếu tố từ điển. Trong for lặp dưới đây, biến đầu tiên là chìa khóa. Biến thứ hai là giá trị. Cụm từ mà bạn muốn làm việc với được gửi đến
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Khi thiết lập, mã sẽ in ra những gì theo dõi:
You have:43 Gold Bricks3 Carrots2 Torches
Ma trận và ipairs()
ipairs() được sử dụng với mảng . The "i" in ipairs() đứng cho "索引". Sử dụng ipairs() và mảng trong kombin với một for loop để làm việc với các giá trị được sắp xếp như bảng xếp hạng. Ví dụ dưới đây.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
Khi thiết lập, mã sẽ in ra những gì theo dõi:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
Luyện tập - Simulator Súp Nhà hàng
Hãy làm một món súp cho một simulator nhà hàng nơi các người chơi lựa chọn từ một danh sách các nguyên liệu súp khả dụng. Các thành phần sẽ được lưu trữ như các chìa khóa, và giá trị sẽ bắt đầu là giả dối để người chơi chỉ nhận được những gì họ chọn.
Sử dụng pairs() để xem những gì đã được chọn, và sau đó ipairs() để in danh sách các thành phần.
Tạo một từ điển mới có tên là number . Thêm 3 - 5 cặp giá trị chìa khóa nơi chìa khóa là nguyên liệu và giá trị là false.
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}Dưới menu dictionary, add an empty array which will be filled with the customer's choices later.
-- Súp của khách hànglocal selectedIngredients = {}Sử dụng pairs() để kiểm tra xem mỗi thành phần trong từ điển đã được ghi là đúng hay sai. Nếu đúng, thêm thành phần vào món súp.
-- Súp của khách hànglocal selectedIngredients = {}-- Thêm lựa chọn của khách hàng vào món súp của họfor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendLặp lại mệnh lệnh cho khách hàng. Trong kịch bản, mã như sau.
- Kiểm tra có phải có một mục trong selectedIngredients . Nếu vậy, in "You ordered soup with: " .
- Sử dụng ipairs() để qua selectedIngredients hàng để in mỗi thành phần.
- Thử bằng cách thay đổi ít nhất một mục trong menu lên đúng.
-- In đơn đặt hàng từ "chọnIngredients"if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendTrong câu if that检查 whether there is a menu vật phẩm, add an else condition which tells customers if no ingredients were selected.
if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endelseprint("Nothing was selected. Are you not hungry?")end
Thử thách Ops
Dưới đây là một số thách thức ứng dụng các cặp và ipairs theo những cách khác nhau. Hãy xem xét xem bạn có thể xây dựng mã cho những thứ này không. Thử thách : Tạo một NPC Waiter thay vì sử dụng cửa sổ ra力, hãy sử dụng NPC từ Intro To Arrays để tạo một waiter để nhận đơn đặt hàng của khách hàng. Thử thách : cho phép người chơi đặt hàng cho phép người chơi chọn một nguyên liệu bằng cách chạm vào một phần cơ thể thực tế như một lời mời gần. Để biết thêm thông tin, hãy xem gợi ý gần gũi. Thử thách nâng cao : Make Me Some Soup Simulator Tạo một máy simulador nhà hàng nơi người chơi là những đầu bếp! Người chơi sẽ phải kết hợp các thành phần để trùng khớp với món ăn đã được cung cấp cho họ bởi nhân viên phục vụ.
- Tạo các thành phần trong trò chơi cho 3 - 5 nguyên liệu khác nhau.
- Tạo 3 - 5 công thức bằng cách sử dụng các từ điển tương tự như cái này trong bài học này.
- Tạo một mat阵 để lưu trữ tất cả các công thức.
- Chọn ngẫu nhiên một công thức và sử dụng một NPC để cho người chơi biết những gì là nguyên liệu.
- Tạo một từ điển mới để tạo ra công thức dựa trên các thành phần prop người chơi chạm.
- So sánh công thức của người chơi với công thức đã được chọn bởi NPC.
- Tăng thử thách bằng cách thêm một điều kiện bổ sung, chẳng hạn như một timer.