# 우리의 게임세계를 위한 데이터 정의하기 (Defining the Data for our Game World)
In order to learn some more about forms, let's create a some forms that create the data for our game world. First of all, our game is going to have some objects in it that the player can pick up and use - let's define those objects:
폼에 대해 좀 더 배우기 위해 게임 세계의 데이터를 만드는 폼을 만들어 봅시다. 우선, 우리 게임에는 플레이어가 집어 들고 사용할 수있는 몇 가지 객체(object)가 있습니다. 이러한 객체를 정의 해 보겠습니다.
(def objects '(whiskey-bottle bucket frog chain))
Ok, now let's dissect this line and see what it means: Since a Lisp compiler always starts reading things in Code Mode and expects a form, the first symbol, def
, must be a command. In this case,the command sets a variable to a value: The variable is objects
and the value we are setting it to is a list of four objects. Now, since the list is data (i.e. we don't want the compiler to try and call a function called whiskey-bottle
) we need to "flip" the compiler into Data Mode whenreading the list. The single quote in front of the list is the command that tells the compiler to flip:
자, 이제 이 행을 해부하고 그것이 무엇을 의미하는지 봅시다. Lisp 컴파일러는 항상 코드 모드에서 내용을 읽기 시작하고 첫 번째 기호인 형식, def
가 반드시 명령(command)이기를 기대합니다. 이 경우 명령은 변수를 값으로 설정합니다. 변수는 변수이며 변수는 objects
설정하는 값이 4개의 객체 리스트(목록)입니다. 이제 리스트가 데이터이기 때문에 (즉, 컴파일러가 whiskey-bottle
라는 함수를 호출하고 원하지 않기 때문에), 리스트를 읽을 때 컴파일러를 데이터 모드로 "뒤집기"(flip)해야 합니다. 리스트 앞의 작은 따옴표는 컴파일러에게 뒤집기를 지시하는 명령입니다.
The def command stands for "define a value". (If you already know Common Lisp, you might know that an equivalent command would be "setf". Clojure actually does not have a setf command).
이 def
명령은 "define a value(값을 정의하기)"를 나타냅니다.(Common Lisp을 이미 알고 있다면 동등한 명령이 "setf
"임을 알 수 있습니다. Clojure에는 실제로 setf
명령이 없습니다.)
Now that we've defined some objects in our world, let's ramp it up a step and define a map of the actual world itself. Here is a picture of what our world looks like:
이제 우리는 세상에 몇 가지 물체를 정의 했으므로 한 걸음 더 나아가 실제 세계 자체의지도를 정의하겠습니다. 우리의 세상 모습은 다음과 같습니다.
In this simple game, there will only be three different locations: A house with a living room and an attic, along with a garden. Let's define a new variable, called game-map that describes this mini world:
이 간단한 게임에는 거실과 다락방이있는 집과 정원이 있는 세 곳만 있습니다. game-map
이 미니 월드를 설명하는 새로운 변수를 정의 해 봅시다:
(def game-map (hash-map
'living-room '((you are in the living room
of a wizards house - there is a wizard
snoring loudly on the couch -)
(west door garden)
(upstairs stairway attic))
'garden '((you are in a beautiful garden -
there is a well in front of you -)
(east door living-room))
'attic '((you are in the attic of the
wizards house - there is a giant
welding torch in the corner -)
(downstairs stairway living-room))))
This map contains everything important that we'd like to know about our three locations: a unique name for the location (i.e. house, garden, and attic) a short description of what we can see from there (stored in its own list within the bigger list) , plus the where and how of each path into/out of that place. Notice how information-rich this one variable is and how it describes all we need to know but not a thing more - Lispers love to create small, concise pieces of code that leave out any fat and are easy to understand just by looking at them.
이 지도에는 세 가지 위치에 대해 알아야 할 모든 것이 포함되어 있습니다. 위치의 고유 이름 (예 :집, 정원 및 다락방)에서 볼 수있는 내용에 대한 간단한 설명(더 큰 목록), 그 장소로 들어오고 나가는 각 경로의 위치와 방법. 이 변수가 정보가 풍부하고 우리가 알아야 할 모든 것을 설명하는 방법에 주목하십시오. Lispers는 작고 간결한 코드를 작성하여 지방을 제거하고 이해하기 쉬운 코드를 만드는 것을 좋아합니다.
Now that we have a map and a bunch of objects, it makes sense to create another variable that says where each of these object is on the map:
이제 우리는 맵과 많은 객체(object; 오브젝트)를 가지고 있으므로, 각각의 오브젝트가 맵에서 어디에 있는지를 나타내는 다른 변수를 만드는 것이 합리적입니다.
(def object-locations (hash-map
'whiskey-bottle 'living-room
'bucket 'living-room
'chain 'garden
'frog 'garden))
Here we have associated each object with a location. Clojure provides a data structure called a Map. A Map is created by calling the hash-map
function with a list of parameters in the order key1 value1 key2 value2...
Our game-map
variable was also a Map list - the three keys in that case were living-room, garden, and attic.
여기에서 각 객체를 어떤 위치에 연관시켰습니다. Clojure는 **맵(Map, 지도)**이라는 데이터 구조를 제공합니다. key1 value1 key2 value2...
의 순서로 매개 변수의 목록과 함께 hash-map
함수를 호출하여 생성되었습니다. 우리의game-map
변수는 또한 지도의 목록이었다. 이 경우 거실, 정원, 그리고 _다락방_라는 세 개의 키(열쇠값)이 있습니다.
The original tutorial uses association lists. Clojure does not support association lists out-of-the box, instead, it comes with hash-maps which we use as a mapping data structure here.
원래의 학습서는 연관 목록(association lists)을 사용합니다. Clojure는 기본적으로 연결 목록을 지원하지 않으며, 대신 매핑 데이터 구조로 사용하는 해시 맵(hash-map)이 제공됩니다.
Now that we have defined our world and the objects in the world, the only thing left to do is describe the location of the player of the game:
세계(world)와 세계의 객체를 정의 했으므로 이제해야 할 일은 게임 플레이어의 위치를 설명하는 것입니다.
(def location 'living-room)
Now let's begin making some game commands!
이제 게임 명령을 만들어 봅시다!
← 문법과 의미 게임 세계 둘러보기 →