인디 게임 개발자의 와장창 코딩일기 < 테트리스 1편 >

대문.png

안녕하세요! 인디 게임을 개밣는 심리학도 라메드 입니다.

( 네 개밣는 입니다.. 오늘은 '개발하는'보다는 개밣는이 어울려 보여서 오타를 냅뒀습니다. )

어제 여자친구와 즐거운 시간을 보내고 .. 집에서 멍때리고 있던 중 ,

과연 내가 게임 개발자라고 할 수 있는가.. 에 대한 고찰이 시작되었습니다.

(사실은 그냥 심심했습니다..)

고뇌의 끝은 실천이라고 했던가요.

원래 굴러먹던(?) 성격대로 부딪혀 보기로 합니다.

그래서, 명작 게임을 하나씩 모작해 보면서

코딩 실력을 길러보기로 했습니다!

( 사실 노는 겁니다. )

그래서 !!

오늘 만들 게임 : 테트리스 (Tetris)

참고 자료 :

(출처 유튜브)

네, 테트리스 입니다. 사실 설명이 필요한가 싶을 정도로 테트리스는 고전 명작이라고 할 수 있습니다.

저 어릴 때는 서비스하는 한국 테트리스도 많았는데, 제가 알기로는

저작권 크리티컬을 맞고 물리침을 당했습니다.

비슷한 게임으로는 뿌요뿌요가 있어요.

준비물

Unity3D
스크린샷 2017-12-25 오후 5.02.10.png

VisualStudio Code

스크린샷 2017-12-25 오후 5.02.04.png

유니티는 게임 개발 엔진이고, VS code는 코딩을 도와줍니다. (IDE)

그럼 본격적인 개발에 들어가 보겠습니다.

1. 간단하게 만들자.

단순화

우선 테트리스의 블록 하나 하나는 사실 그냥 상자입니다.

즉, 있고 / 없고 라는 두가지 데이터만 가져도 되는 객체 입니다.

거기에 몇 가지 추가를 한다면, 지금 이 블록이 살아있는지 (조작이 가능한지 )

또 이 블록의 위치는 어디인지 정도가 되겠습니다.

위 4 문장을 코딩으로 하면 다음과 같습니다.

스크린샷 2017-12-25 오후 5.07.50.png

이렇게 Mark 라는 이름의 블록 또는 빈칸(블록이 없는 빈 공간)이 되어줄 객체가 생겼습니다!

2. 보여주자.

위의 데이터를 이제 보여주는 스크립트를 짜줍니다.

이름은 ShowManager로 했습니다.

코드 :

스크린샷 2017-12-25 오후 5.10.35.png

복잡해 보이지만,

크게 함수2개로 이루어진 간단한 코드입니다.

1번 함수 InitBLockByData() 은 처음에 블록을 생성해줍니다.

(Init = initiate의 약자입니다. )

2번 함수 ShowBlockByData()은 생성된 블록의 켜지고 꺼짐 ( 블록이 있고 없음) 을

반영해줍니다. 매 프레임마다 20~40회 까지 반영합니다 (Update문)<- 사실 이럴 필요 없죠 (..)

3. 근데 전 블록을 떨어트리고 싶어요

네 기반작업이 거의다 되었습니다. 이제 블록을 떨어트리는 것을 구현할 차례 입니다 !

우선 새 스크립트 블록 매니져를 짜 줍니다.

스크린샷 2017-12-25 오후 5.14.40.png

위의 3줄은 블록 빈공간을 위한 것이고,

아래 한 줄은 새로 떨어트릴 블록을 위한 것입니다.

내부에 있는 함수 중엔 ,

스크린샷 2017-12-25 오후 5.17.38.png

좌표를 입력하면 그 블록을 활성화 시켜주는 녀석과,

스크린샷 2017-12-25 오후 5.17.44.png

우선 테스트 용으로 네모 모양의 블록을 만들어주는 녀석이 있습니다.

스크린샷 2017-12-25 오후 5.22.03.png

이런 저런 함수들의 도움으로 !

우선 떨어지는 것은 구현이 되었습니다!

결과물

tetris_1.gif

뭔가 부끄럽기 짝이 없군요..

평소에 물리엔진이나 간단한 액션 게임만 만들다가

알고리즘이 들어가는 게임을 만나니 호되게 당한 느낌입니다.

다음에는 테트리스의 충돌판정(아래 블럭이 있을 경우 더이상 내려가지 않음) 을 구현하고,

좌우 이동과

대망의 블록 돌리기! 를 구현하고 나면

대강 마무리가 될 것 같습니다.

읽어주셔서 감사합니다.

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now