많은 스크립트는 종종 사전이나 배열을 통과해야 합니다. 그러나 때로는 이러한 데이터 구조의 시작과 끝을 알지 못할 수 있습니다. 예를 들어, 플레이어의 사전이 변경되거나 플레이어의 배열 인벤토리가 다양한 크기를 가질 수 있습니다.
이러한 경우 pairs() 및 ipairs() 을 사용할 수 있습니다. 이 두 개는 알 수 없는 시작 및 끝점이 없는 모든 요소를 거칠 수 있는 반복 문을 사용할 수 있습니다.
이 문서에서는 사용 방법을 설명하고 쿠킹 게임에서 레스토랑 주문을 추적하는 실제 스크립트 예시가 있습니다.
사전과 쌍()
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() 는 배열과 함께 사용됩니다 배열 . "i" 는 순위표와 같은 순위 값을 작동하도록 배열과 함께 사용됩니다. 배열과 순위 값을 조합하여 순위 값을 작동하는 예는 아래에 나와 있습니다.
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()를 사용하여 목록을 인쇄합니다.
새로운 사전 을 생성하여 이름이 number1 입니다. 키가 성분이고 값이 거짓인 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
선택적 도전
다양한 방법으로 쌍과 IPairs를 사용하여 문제가 적용되는 일부 도전이 있습니다. 이 코드를 빌드할 수 있는지 확인하십시오. 도전하기 : 출력 창을 사용하는 대신 배열 소개 에서 NPC를 생성하여 손님의 주문을 받도록 하십시오. 도전하기 : 플레이어가 주문을 하도록 허용 플레이어가 물리적 부품을 만지고 프로모션 메시지를 선택하도록 허용 자세한 내용은 프로모션 메시지를 참조하십시오. 고급 도전 : 음식 시뮬레이터 만들기 플레이어가 셰프인 음식 시뮬레이터 레스토랑 시뮬레이터를 만들어 플레이어가 주문을 일치시키는 주문을 제공해야 합니다.
- 3 - 5개의 다른 재료를 위한 게임 내 소도구 생성.
- 이 수업에서 사용한 사전과 같은 3 - 5 개의 레시피를 만듭니다.
- 모든 레시피를 보관할 배열을 생성합니다.
- 레시피를 랜덤으로 선택하고 NPC를 사용하여 플레이어에게 재료가 무엇인지 알려주십시오.
- 플레이어가 터치하는 소도구 성분을 기반으로 새 사전을 생성하여 레시피를 작성하십시오.
- NPC가 선택한 레시피와 플레이어의 레시피를 비교하십시오.
- 타이머와 같은 추가 조건을 추가하여 도전을 증가시킵니다.