기본 콘텐츠로 건너뛰기

튜터리얼 3.2. 함수


함수(function) 컴퓨터에게 주는 명령 목록을 이름 밑에 묶어 놓은 것이다. 함수는 어떤 일련의 동작을 여러 컴퓨터가 하도록 만든다.
보통 함수 이름 뒤에는 괄호를 붙인다. 괄호 안에 함수가 어떤 작업에 별도의 정보가 필요할 정보를 입력한다. 별도 정보가 필요 없어도 괄호를 붙인다.
여기 draw_target()이라는 함수 예가 있다. 예는 filled circle 이용해 타겟 모양을 그린다. (주의: 작업을 위해서는 x, y 좌표 필요하다.) 

function draw_target(x,y)
 circfill(x,y,16,8)
 circfill(x,y,12,7)
 circfill(x,y,8,8)
 circfill(x,y,4,7)
end

코드에서 보는 circfill() 역시 함수이.  함수는 PICO-8 내장된 것으로 여러분이 직접 코드를 만들 필요가 없다.  함수 x, y 좌표, 반지름, 색을 지정하면 좌표, 반지름에, 해당 색으로 채워진 원을 그린다. PICO-8에는 이런 내장 함수가  많이 있다.
보통 함수는 draw_target()이나 circfill() 같이 지정된 작업만 한다. 하지만 때로 함수가 작업을 마친 정보를 되돌려 주도록(return) 필요가 있다.
가령 여러분이 여러 수학적인 작업을 하는 함수를 만들었는데, 작업이 끝나면 결과값을 알아야 때가 있다. 다시 말해 결과값을 여러분에게 돌려주도록(return) 수가 있다. 그리고 방법은 단순하다. 그냥 return 이용하면 된다. 거기에 어떤 값을 받을지만 지정하면 된다. 아래 예를 보자.

function area(width,height)
 return width*height
end

w=8
h=5

if (area(w,h) > 25) then
 print("big!")
end
(주의실제 PICO-8에서는 폰트가 하나이고 대소문자 구분이 없다PICO-8 코드 에디터에서 보는 코드는 위와 다르게 보일 수도 있다.)

 함수를 실행하면 return 값은 40 된다. 40 실제로 25보다 크기 때문에 print() 함수가 작동하게 된다.
함수는 여러분이 PICO-8에서 개발하는 것의 근간이 된다. 대부분의 게임은 실제로 수많은 함수가 함께 모여서 작동한다. 여러분의 코드가  함수에서 다른 함수 어떻게 움직이는지 파악하는 것이 실제 훌륭한 게임을 만드는 비결이다. 

댓글

이 블로그의 인기 게시물

PICO-8 그리고 레트로 게임

이 블로그는 게인적으로 좋아하는 판타지 콘솔 PICO-8을 소개하기 위해 만들었습니다. 더불어 레트로 게임들과 그와 관련된 주변 문화에 대한 개인적인 의견과 기록을 남기는 일기장으로도 써볼까 합니다. 편하게 봐 주시기 바랍니다.

튜터리얼 3.4. 게임 루프

PICO-8 은 게임 루프(the game loop)를 만들기 위해 세 개의 특별한 함수를 사용한다 . _ init() 함수는 한 번 작동한다 . 그 후 게임이 끝날 때까지 _ update() 와 _ draw() 함수가 반복해서 작동한다 . 아래는 PICO-8 의 기본 구조이다 . -- 뒤는 주석으로 각 함수가 어떤 작업을 하는지 설명한다 . function _init()   -- 게임이 시작하면   -- 이 부분의 코드가 한 번 작동한다 . end function _update()   -- 매 초마다   -- 이 부분의 코드가 30 번 작동한다 end function _draw()   -- 이 부분의 코드도   -- 매 초마다 30 번 작동한다   -- 하지만 _update() 함수가 작동하고 난 다음에 작동한다 end 여러분의 모든 코드를 이 세 함수 안에 넣을 수 있지만 실제로는 그렇게 하는 건 좋은 방법이 아니다 . 더 좋은 방법은 특정 작업을 하는 다른 함수를 만들고 _init(), _update(), _draw() 함수가 그 함수들을 작동시키는 것이다 . 예를 들어 , 플레이어의 동작 코드를 _update() 에 넣는 대신 move_player() 라는 함수를 만들어서 그것을 _ update() 안에서 동작케 하는 것이다 . 아래 그 예를 살펴보자 .   f unction _init()   make_player() end function _update()   move_player() end f unction _draw()   cls() -- 스크린 지우...