많은 스크립트는 종종 사전이나 배열을 통해 이동해야 합니다.하지만 때로는 이러한 데이터 구조의 시작과 끝을 모를 수도 있습니다.예를 들어, 플레이어 사전이 변경되거나 플레이어가 다양한 크기의 배열 인벤토리를 가질 수 있습니다.
이러한 상황에서는 pairs() 및 ipairs() 를 사용할 수 있습니다.이러한 것들은 for 루프를 사용하여 알려진 시작점과 끝점 없이 각 요소를 통과할 수 있습니다.
이 문서에서는 사용 방법을 살펴보고 조리 게임에서 레스토랑 주문을 추적하는 실용적인 스크립트 예제를 제공합니다.
사전과 pairs()
pairs() 는 사전 과 함께 사용됩니다. 아래 예제가 보입니다.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() 사전 요소의 키, 값 또는 둘 모두와 작업할 수 있습니다.아래의 for 루프에서 첫 번째 변수는 키입니다.두 번째 변수는 값입니다.작업하려는 사전이 pairs() 전달됩니다.
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
실행되면 코드는 팔로잉인쇄합니다:
You have:43 Gold Bricks3 Carrots2 Torches
배열 및 ipairs()
ipairs() 은 배열 과 함께 사용됩니다.ipairs() 의 "i"는 "인덱스"를 의미합니다. 리더보드와 같은 순서의 값을 처리하기 위해 for 루프와 함께 ipairs()와 배열을 사용하십시오.아래에 예제가 있습니다.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
실행되면 코드는 팔로잉인쇄합니다:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
연습 - 레스토랑 수프 시뮬레이터
플레이어가 가능한 수프 재료 목록에서 선택하는 레스토랑 시뮬레이터에 대해 수프를 만들어 보겠습니다.성분은 키로 저장되고 값은 거짓으로 시작되므로 플레이어는 선택한 것만 얻습니다.
사용 pairs() 선택된 항목을 보고, 그런 다음 ipairs() 재료 목록을 인쇄합니다.
새로운 사전 이름 menu 을 가진 새로운 사전을 생성합니다. 키가 성분이고 값이 false인 3 - 5 키-값 쌍을 추가합니다.
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}메뉴 사전 아래에 나중에 고객의 선택으로 채워질 빈 배열 을 추가하십시오.
-- 고객의 수프local selectedIngredients = {}pairs()를 사용하여 사전의 각 성분이 참이나 거짓으로 표시되는지 확인합니다. 참이면 소스에 성분을 추가합니다.
-- 고객의 수프local selectedIngredients = {}-- 고객의 선택을 수프에 추가합니다for menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endend고객에게 순서를 다시 반복합니다. 스크립트에서 다음을 코드로 변환합니다.
- selectedIngredients에 메뉴 항목이 있는지 확인하십시오. 그렇다면 "You ordered soup with: "를 인쇄하십시오.
- ipairs()를 사용하여 배열 selectedIngredients를 통해 이동하고 각 성분을 인쇄합니다.
- 최소 하나의 메뉴 항목을 변경하여 테스트합니다.
-- 선택한 재료에서 수프 주문 인쇄if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endend메뉴 항목이 있는지 확인하는 if 아이템고객에게 재료가 선택되지 않았는지 알려주는 다른 조건을 추가합니다.
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
선택적 도전
다음은 페어와 이파이어를 다른 방식으로 사용하여 적용되는 몇 가지 도전 과제입니다. 이것들을 위한 코드를 작성할 수 있는지 확인해 보세요. 도전 : 출력 창을 사용하지 않고 NPC에서 배열 소개 에서 NPC를 만들어 고객 주문을 받는 서버를 만듭니다. 챌린지 : 플레이어가 근접 프롬프트와 같은 물리적 부품을 터치하여 재료를 선택할 수 있도록 허용 플레이어가 재료를 선택하도록 허용하세요.자세한 내용은 근접 프롬프트를 참조하십시오. 고급 도전 : 메이크 미 소프 시뮬레이터 서버에서 플레이어가 셰프로 주문받은 재료를 조합해야 하는 레스토랑 시뮬레이터를 만듭니다.
- 3 - 5가지 다른 재료에 대한 게임 내 소도구를 만듭니다.
- 이 단원의 사전과 유사한 사전을 사용하여 3 - 5개의 레시피를 만듭니다.
- 모든 레시피를 보유하는 배열을 만듭니다.
- 랜덤으로 레시피를 선택하고 NPC를 사용하여 플레이어에게 재료가 무엇인지 알려줍니다.
- 플레이어가 터치하는 속성 재료를 기반으로 레시피를 만들기 위해 새 사전을 만듭니다.
- 플레이어의 레시피를 NPC가 선택한 레시피와 비교합니다.
- 타이머와 같은 추가 조건을 추가하여 도전을 늘리십시오.