d라이브러리









[소프트웨어] 개구리처럼 폴짝폴짝 플래피 버드

게임카페


분명 새인데, 가만히 두면 날갯짓을 하지 않아 바닥으로 곤두박질쳐요. 날갯짓을 해서 날 수 있도록 화면을 터치해 줘야 하지요. 그러면 개구리처럼 폴짝폴짝 뛰면서 하늘을 날아요. 화면을 여러 번 누를수록 새가 높이 날아오르기 때문에 화면을 적당히 눌러 위아래 있는 장애물을 피해야 해요. 장애물에 살짝만 닿아도 바로 죽어 버리거든요.

게임 좀 했다 하는 사람은 다 아는 중독성 강한 게임 ‘플래피 버드’예요. 가벼운 마음으로 시작했다가 생각보다 높은 난이도에 도전 의지를 불태우게 되지요.

중독성이 강해 사라진 게임
안타깝게도 플래피 버드의 원조는 지금 즐길 수 없어요. 플래피 버드를 개발한 베트남 출신 개발자 응우예 하 동이 게임을 구글과 애플 스토어에서 지웠거든요. 이 게임에 중독된 사람들이 많다는 소식을 듣고 회의감이 들어 출시 1년도 안 돼 게임을 삭제했어요. 하지만 원조 플래피 버드를 모방한 게임이 많이 있어 지금도 게임을 즐길 수 있어요.

그렇다면 이 게임을 어떻게 만들까요? 플래피 버드의 새는 중력에 영향을 받아요. 아무 조작도 하지 않고 가만히 있으면 중력에 의해 새가 바닥으로 떨어져요. 떨어질 때는 당연히 속도가 점점 빨라져요. 현실에서는 공기저항이나 지구 자전에 의한 관성력 등 여러 힘의 영향을 받지만 게임에서는 중력만 있다고 가정해요.

이런 중력의 원리를 게임에서 쉽게 구현하기 위해 개발자들은 시간이 지날수록 중력을 커지게 만들어요. 점점 커지는 중력값을 이용해서 새의 낙하 속도를 점점 더 빠르게 만드는 거지요. 이때 게임 플레이어가 화면을 터치하면 중력값을 초기화해요. 그래야 새가 다시 하늘을 날 수 있거든요.


게임 오버 판단은 원과 직선의 관계로!
플래피 버드에서 가장 중요한 것은 장애물과 새가부딪혔는지 여부를 판단하는 거예요. 보통 이럴 때는 원과 직선의 위치 관계를 따져 판정해요. 새를 둘러싸는 원과 장애물을 둘러싸는 사각형을 최대한 작게 그려요. 즉 좌표 위에 (a, b)를 원의 중심으로 하는 반지름이 r인 원과 사각형의 왼쪽 변과 오른쪽 변을 x=c, x=d(c d), 아래쪽 변과 위쪽 변을 y=e, y=f(e f ) 꼴의 직선을 나타낼 수 있어요.

만약 사각형의 위쪽 변과 새가 부딪혔는지 판정하고 싶다면 원의 중심 (a, b)와 직선 y=f의 위치 관계를 살펴보면 돼요. 우선 원의 중심 (a, b)에서 x값인 a가 c-r과 d+r 사이에 있는지 봐요 해요. 이 사이가 아니라면 새와 장애물은 부딪히지 않아요.

c-r≤a≤d+r이면 직선 y=f에서 x값을 원의 중심과 같은 값으로 고정한 점 (a, f )와 원의 중심 (a, b), 이 두 점 사이의 거리 |f-b|를 구해요. 이 값이 원의 반지름 r보다 작거나 같으면 부딪힌 거예요.

이왕 게임을 만드는 거 나만의 게임을 만들기로 했어요. 주인공을 새에서 루돌프를 탄 산타로, 장애물을 파이프에서 건물로 바꿨어요. 그런데 프로그래밍은 어떻게 해야 하는 거죠? 그래서 오규환 교수님께 도움을 요청했습니다. 여러분도 오규환 교수님과 함께 플래피 버드 게임을 만들어 보세요!

2016년 12월 수학동아 정보

  • 조가현 기자
  • 도움

    오규환 교수

🎓️ 진로 추천

  • 컴퓨터공학
  • 게임공학
  • 소프트웨어공학
이 기사를 읽은 분이 본
다른 인기기사는?