게임제작/강좌

[GML]게임메이커 스튜디오로 게임프로그래밍의 기초를 공부하자 #3

게임코드프리 2018. 11. 7. 09:00
반응형

#게임메이커 강좌 #게임프로그래밍 강좌 #게임프로그래밍 하는법


게임프로그래밍을 해보자 대체 어떻게 하는가?


가장 처음 게임메이커 시리즈로 코딩을 처음 접해보았을때부터

지금까지 들었던 생각은 바로 프로그래밍 코딩을 대체 어떤식으로 어떻게 해야 하는지

막연하다는 생각이었습니다.


프로그래밍은 컴퓨터와 대화할수 있는 언어이며 외국어라고 생각하면 편리합니다.

단! 논리적이어야만 대화가 가능하므로 수학은 못해도 상관없지만 논리적인 사고로 접근해야만 합니다.



(게임메이커 랭귀지는 이렇게 많은 단어들을 가지고 있습니다...)


https://docs2.yoyogames.com/index.html


외국어를 처음 배울때 단어를 배우거나 주로 사용하는 말들을 통째로 외워서 쓰기도 합니다.

프로그래밍 언어도 마찬가지로 우리가 주로 사용해야 하는 언어들을 배워야 하기에 

위의 GML이 수록된 방대한 지식사전(?)을

자주 열어보면서 무슨말인지 모르더라도 사용하는 예제를 찾아보는 습관이 들어야 

프로그래밍 언어를 이해할 수 있습니다.


  • 컴퓨터는 논리적으로 설명해야 알아듣는다.


기본적으로 육하원칙은 지켜져야 하며 

누가, 언제, 어디서, 무엇을, 어떻게, 왜를 코드로 설명해야 합니다.


그것을 이해하고 쓰기 위해서 게임메이커 스튜디오에서 툴의 설명이 필요한데,



오브젝트를 생성하고 Add Event에서 주요 코딩을 위한 이벤트를 추가한 상태입니다.


  1. Create 는 오브젝트가 처음 생성되었을시 실행할 코드를 담당

  2. Step은 계속해서 반복적으로 실행하기에 실시간 행동 관련한 코드를 담당

  3. Draw는 화면에 그려줄 이미지들에 대해서 관리하는 코드를 담당

  4. Draw GUI는 인터페이스 관련된 코드를 담당하고 가장 상위에 있는 그림을 쓸수 있음

대부분은 Create, Step만으로도 코딩이 가능하며 오브젝트가 무슨 의미인지 모르는 사람을 위해 간단하게 설명하자면

게임에서 움직이거나 게임에 필요한 모든것들을 오브젝트라고 부릅니다.

예를들면, 슈팅게임에서는 비행기, 적, 총알, 이펙트등 이런것들이 모두 오브젝트가 되는 것입니다.


그래서 필요한 것들이 어떤 언어에도 다 있는 명령어들을 숙지하는 것인데, 대부분 이런것들이 존재합니다.



IF문


가장 처음 IF문의 경우 프로그래밍 코드를 작성하는데 가장 중요한 역활을 하면서

변수와 이프문만으로도 사실 간단한 프로그래밍은 가능하게되는데, 사용 방법은


if (조건에 대한 문구)

{

실행할 내용;

}


이것이 전부입니다. 하지만 이렇게 설명하면 내가 그랬듯 저곳에 어떤걸 넣어야 할지 막연합니다.

그래서 조건에 대한 문구를 어떻게 사용해야 하는지 무엇을 써야 하는지 예를들자면,

만약에 (조건)이 맞거나 틀리면 (실행)을 한다가 기본 논리입니다.


여기서 처음 등장하게 되는 여러가지 명령어에 대해서도 설명드리겠습니다.


var a = 1 // 전에 설명한 변수와 다르게 앞에 var 라는 글자가 있는데 이것은 이곳에서만 선언하고 쓸 변수입니다.

a와 b 라는 지역변수를 설정하고 두 합이 3이 맞으면 메세지 ok를 출력하라는 간단한 코드이며

예를들어 아닐경우에는 다른것을 실행하는 코드는 아래와 같습니다.


var a=1

var b=2

if a+b=3

{

 show_message("ok")

}

else

{

show_message("wrong")

}


이런 이프문은 게임을 만들수록 점차 복잡해지며 조건문에 사용되는 것은 저런 더하기 빼기 같은

간단한 것들부터 게임메이커에서 기본적으로 만들어놓은 명령어들을 사용하면서 더 자유롭게 논리를 표현할 수 있습니다.


그리고 미리 예측하여 상황들을 써보고, 그 이후 그 상황을 체크할 부분들에 대해서

그에 걸맞는 명령어를 찾아 넣어주는 것이 코드의 기본입니다.

자주쓰는 명령어는 외우지만 대부분 현직 프로그래머들도 모든 명령어를 다 외우고 있진 않습니다.



(챙피한 개인적으로 짜는 코딩형식이지만...대충 이런식)


논리를 먼저 생각하여 슈팅게임이라면 화면에 적이 쏜 총알에 플레이어가 맞았는가? (어떻게 맞는것을 체크할 것인지 명령어를 찾아보고 


코드를 작성)


맞았다면, 플레이어를 없애야 할지 이미지를 바꿔서 피격이 된 이미지로 바꿔 줄 것인지, 혹은 이펙트를 생성해서 불이나게 할 것인지


코드로 하나씩 작성하는 것이 코드의 기본입니다.


결국 어떤 언어이든 단어(명령어)를 알아야 외국어(코딩)를 할 수 있기에 하나씩 사용할 줄 아는 명령어를

늘리는 것이 중요합니다.





FOR문


우리는 반복적으로 변수와 IF문을 사용하여 코딩을 하는 것만으로도 사실 게임은 만들 수 있습니다.

하지만 30개 혹은 300개의 반복되는 코드를 하나하나 수작업으로 쓰기에는 우리의 손가락이 너무 고통받기에

반복해서 사용할 문구들은 이 for문이라는 것이 대신 수행해줍니다.


for (i=0; i<30; i++)

{

실행할 내용

}


기본적으로 이런 형태로 작성되며 여기서 등장하는 i는 변수입니다. 대부분의 사람들 i를 사용하는데,

그 이유는 숫자 1과 비슷한 모양이기 때문입니다. 결국 처음에는 0이지만 30이 될때까지 계속 더해줘라라는 

이야기이며 실행할 내용을 i가 30이 되지 않으면 반복하게 됩니다.



이번에는 스프라이트에 이미지를 넣어주고 반복해서 10번을 그려주게 하는 심플한 코드를 작성해보았습니다.

이미지를 그려줘야 하기때문에 오브젝트에 이벤트는 Draw쪽에 코드를 작성해야 하며

코드를 설명하자면,


for (i=0; i<10; i++)  // 포문을 썼고 i변수 초기값 0 그리고 i<10 은 10이 될때까지 , i++ 1씩 더해준다.

{

draw_sprite(img_player,0,x,y+32*i) // 드로우 스프라이트는 명령어이고 ( 스프라이트 이름, 서브이미지 없음, x, y + 32 * i )

}


여기서 x,y 는 전에 설명한 좌표라는 것을 이해하고 있다면 왜 + 32 * i를 썼는지 설명드리겠습니다.

이미지의 크기가 32이기 때문에 한칸씩 아래로 그려주기 위해서는 32만큼의 픽셀이 필요합니다. 

i 는 10이 될때까지 계속 1씩 더해주므로 32 x 1 , 32 x 2 , 32 x 3 ....이런식으로 숫자가 바뀌게 됩니다.



Room에 오브젝트를 배치하고 실행하면 위와같은 모습이 나오며 만약 위치가 이상한 곳에 나온다면

룸에 배치된 오브젝트 위치를 바꿔보시기 바랍니다.


포문을 이해하지 못하면 주인을 잘못만난 손이 고생을 하게되며 3,4개까진 그렇다 쳐도 20개...30개...100개를

하나하나 수작업으로 써줄 수 있다면 이 명령어를 쓰지 않아도 상관없습니다.(...)


이 외에도 repeat라던가...while문이라던가...반복에  관련되선 상당히 많은 명령어가 존재합니다.


다 몰라도 됩니다. 프로그래머들도 어차피 필요에 따라 쓰는것만 씀.


게임메이커 스튜디오 프로그래밍 공부 방법론


이 강좌의 목적은 프로그래밍을 스스로 공부하고 직접 할 수 있게 하는데 목적이 있으며

이렇게 하고 싶은데 어떻게 해요? 라는 질문하는 사람이나 의지하려는 사람에게는 이 문서가 맞지 않을 수 있습니다.

프로그래밍을 어떻게 해요? 라는 질문은 , 

글을 쓰고싶은데 어떻게 하나요? 라는 것과 비슷한 맥락입니다.

스스로 생각하고 스스로 문제를 해결하는 것이 프로그래밍의 기본이기에 하나하나 다 알려줄수가 없습니다.


[화면에 캐릭터를 이동시키고 싶은데 어떻게 하지?]


무엇이 필요할지 먼저 생각해 봅시다.


1. 캐릭터 이미지

2. 화면에 캐릭터를 어떻게 띄우지?

3. 이동관련 명령어는 무엇이 존재할까?

4. 이번엔 반대로 움직이고 싶은데 어떻게 해야하지?


이런식으로 문제를 스스로 만들어내고 찾아내는 것이 프로그래밍입니다.


이미 자신이 찾은 문제에 대해 수많은 명령어들이 존재하고 그것을 이해하고 쓰기만 하면됩니다. (말이 쉽지...사실 복잡함)



프로그래밍이 안되는 사람의 특징은 바로,


아직 단어 하나도 모르면서 외국어를 유창하게 하고 싶은 욕심때문입니다.


화면에 이미지 하나 띄우는 것이 불가능한 상태로 인벤토리를 만들겠다는 욕심에 어렵다며 포기하는 것이 프로그래밍이기에


천천히 외국어를 공부하는 마음으로 접근하는 것이 좋습니다.

반응형
facebook twitter kakaoTalk kakaostory naver band shareLink
人気ブログランキングでフォロー