cặp và ipairs

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Nhiều kịch bản thường sẽ cần phải đi qua bộ từ điển hoặc mảng.Nhưng đôi khi, bạn có thể không biết điểm 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 kho lưu trữ mảng có nhiều kích cỡ khác nhau.

Trong những trường hợp này, bạn có thể sử dụng pairs()ipairs().Chúng có thể được sử dụng với một vòng lặp for để đi qua mỗi thành phần mà không có điểm bắt đầu và kết thúc được biết

Bài viết này sẽ bao gồm việc sử dụng chúng và có ví dụ kịch bản thực tế nơi bạn theo dõi các đơn đặt hàng nhà hàng trong một trò chơi nấu ăn.

Từ điển và pairs()

pairs() được sử dụng với từ điển . Một ví dụ được thấy dưới đây.


local myDictionary = {
["Blue Player"] = "Ana",
["Gold Player"] = "Binh",
["Red Player"] = "Cate",
}
for key, value in pairs(myDictionary) do
print(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 vòng lặp for bên dưới, biến đầu tiên là chìa khóa.Biến thứ hai là giá trị.Từ điển mà bạn muốn làm việc với được chuyển sang pairs() .


local inventory = {
["Gold Bricks"] = 43,
Carrots = 3,
Torches = 2,
}
print("You have:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
end

Khi thực thi, mã sẽ in ra các thứ theo dõi:


You have:
43 Gold Bricks
3 Carrots
2 Torches

Mảng và ipairs()

ipairs() được sử dụng với mảng .Chữ "i" trong ipairs() đại diện cho "index." Sử dụng ipairs() và array kết hợp với một vòng lặp for để làm việc với các giá trị được xếp hạng như bảng xếp hạng.Một ví dụ ở dưới.


local players = {"Ali", "Ben", "Cammy"}
for playerRank, playerName in ipairs(players) do
print("Winner #" .. playerRank .. " is " .. playerName)
end

Khi thực thi, mã sẽ in ra các thứ theo dõi:


Winner #1 is Ali
Winner #2 is Ben
Winner #3 is Cammy

Thực hành - Mô phỏng súp nhà hàng

Hãy làm một số súp cho một mô phỏng nhà hàng nơi người chơi lựa chọn từ một danh sách các thành phần súp có thể.Các thành phần sẽ được lưu dưới dạng chìa khóa, và các giá trị sẽ bắt đầu là sai nên 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.

  1. Tạo một từ điển mới có tên là . Thêm 3 - 5 cặp chìa khóa-giá trị nơi chìa khóa là thành phần và giá trị là false.


    local menu = {
    cabbage = false,
    beef = false,
    tomato = false,
    noodles = false,
    }
  2. Bên dưới từ điển menu, thêm một array trống mà sẽ được lấp đầy với lựa chọn của khách hàng sau này.


    -- Súp của Khách hàng
    local selectedIngredients = {}
  3. Sử dụng pairs() để kiểm tra xem mỗi thành phần trong từ điển có được đánh dấu thật hay sai. Nếu đúng, thêm thành phần vào súp.


    -- Súp của Khách hàng
    local selectedIngredients = {}
    -- Thêm lựa chọn của khách hàng vào súp của họ
    for menuChoice, value in pairs(menu) do
    if value then
    table.insert(selectedIngredients, menuChoice)
    end
    end
  4. Lặp lại lệnh trở lại khách hàng. Trong kịch bản, mã hóa các đoạn sau.

    • Kiểm tra xem có menu item trong selectedIngredients . Nếu có, in "You ordered soup with: " .
    • Sử dụng ipairs() để đi qua mảng selectedIngredients và in mỗi thành phần.
    • Thử nghiệm bằng cách thay đổi ít nhất một mục menu thành true.

    -- In đơn đặt hàng súp từ "selectedIngredients"
    if #selectedIngredients > 0 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    end
  5. Trong tuyên bố if kiểm tra xem có menu vật phẩmhay không, thêm điều kiện else cho khách hàng biết nếu không có thành phần nào được chọn.


    if #selectedIngredients > 0 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    else
    print("Nothing was selected. Are you not hungry?")
    end

Thử thách tùy chọn

Dưới đây là một số thách thức áp dụng bằng cách sử dụng cặp và ipairs theo những cách khác nhau. Hãy thử xem bạn có thể xây dựng mã cho chúng không. Thử thách : Tạo một NPC phục vụ thay vì sử dụng cửa sổ xuất, sử dụng NPC từ Giới thiệu về mảng để tạo một NPC để nhận lệnh khách hàng. Thử thách : Cho phép người chơi đặt đơn hàng Cho phép người chơi chọn một thành phần bằng cách chạm vào một phần vật lý như một lời nhắc cảm biến.Để biết thêm thông tin, xem Lời nhắc cảm biến. Thử thách nâng cao : Make Me Some Soup Simulator Tạo một mô phỏng nhà hàng nơi người chơi là đầu bếp! Người chơi sẽ phải tập hợp các thành phần để phù hợp với lệnh được giao cho họ bởi nhân viên phục vụ.

  1. Tạo vật phẩm trong trò chơi cho 3 - 5 nguyên liệu khác nhau.
  2. Tạo 3 - 5 công thức sử dụng từ điển tương tự như trong bài học này.
  3. Tạo một array chứa tất cả các công thức.
  4. Ngẫu nhiên chọn một công thức và sử dụng một NPC để cho người chơi biết các thành phần là gì.
  5. Tạo một từ điển mới để tạo một công thức dựa trên các thành phần prop mà người chơi chạm vào.
  6. 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.
  7. 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 bộ đếm thời gian.