티스토리 뷰

Google Cloud Run online hackathon 에 참여했습니다. APAC을 순회하며 이벤트를 하고 있는 것 같은데 한국은 9월 27일이었네요. 

해커톤의 기본 룰은 간단했습니다. 퀵랩을 통해 모든 환경은 제공받고 GitHub에서 기본 코드까지 내려받을 수 있었습니다. 그야말로 클릭 대여섯 번이면 게임에 참여가 가능했죠. 다만, 점수를 올리려면 소스코드에 본인만의 로직을 개발해야 했습니다.


 

# 해커톤 방식

해커톤은 게임 형식으로 진행됐습니다. 마치 크레이지 아케이드처럼 바둑판 모양의 경기장에 사용자가 로그인합니다. 여기서 "사용자"는 해커톤 참가자가 배포한 cloud run 애플리케이션입니다. 경기장은 1초에 한 번씩 입장한(등록된) cloud run 서비스 전체를 호출합니다. 이때 경기장의 현황을 전송해 줍니다. 각 사용자가 맵의 어디에 위치했는지, 어느 방향을 보고 있는지, 공격을 당하고 있는지 등. 그러면 참여자는 1초에 한 번씩 요청을 받고 액션을 취해야 합니다. 액션은 총 네 개로 왼쪽으로 방향 설정(L), 오른쪽으로 방향 설정(R), 앞칸으로 직진(F), 물폭탄 공격(T)입니다. 즉, 이 게임은 경기장을 누비벼 다른 유저에게 물폭탄을 던지고 적중 시 점수를 얻는 게임입니다. 반대로 물폭탄을 맞게 되면 점수가 감소합니다. 단, 물폭탄은 바라보고 있는 방향으로만 던질 수 있습니다.

평일이라 업무와 병행하다 보니 규칙을 제대로 확인 못한 것인지, 저는 API 호출을 사용자가 컨트롤할 수 있는 줄 알았네요. 그래서 L, R, F, T 네 개의 액션에 대한 API를 생성하고 터미널에서 키보드 키를 액션에 매핑시키는 개발을 했습니다. 20년 전 (스타크래프트) 마린 컨트롤을 떠올리며 빠르고 현란한 컨트롤을 하고자 한 거죠.. -_-;; 배포해보니 원하는 동작이 안되길래 경기장의 흐름을 유심히 살폈고 그제야 API를 트리거하는 건 경기장 자체라는 사실을 알았습니다.

모든 참가자는 디스코드에 접속해서 소통했습니다. 기술적인 문의가 있을 경우 질문하면 호스트로 있는 구글러가 답변을 해주는 방식이었습니다. 역시.. 경기 방식에 대해 아무도 물어보지 않은걸 보면 저만 잘 못 알고 있었나 봅니다(웃음)

경기장 IP가 어느 대륙인지 찾아서 내 애플리케이션과의 레이턴시를 줄이고자 그쪽 리전에 배포까지 한 건 비밀... 그런데 애초에 경기장이 디폴트 리전과 같은 곳에 있었다는.. 즉, 어차피 모든 사용자가 디폴트 값으로 애플리케이션을 배포했을 거라서 같은 리전을 사용했겠죠? (웃음 포인트) 

 

# 전략 수정

게임 룰을 이해했으니 전략을 바꿔서 새로 개발해야 하는데 시간이 별로 없었습니다. 그렇기에 최대한 단순한 걸로 점수를 획득할 수 있는 방법을 고민했는데요. RPG 게임에 좀비(몬스터) 콘셉트로 구현하기로 결정했습니다. RPG 게임에 좀비는 기본적으로 스멀스멀 어리바리하며 돌아다니다가 자신의 영역 안으로 유저가 들어오면 쫓아가서 공격합니다. 그리고 한 번 공격한 타깃은 바꾸지 않습니다(지능이 뛰어난 몬스터는 경우 본인에게 더 많은 대미지를 주는 유저 쪽으로 타기팅을 변경하기도 하지만, 일반적인 게임에서 좀비는 제일 약한 몬스터라서..). 딱 여기까지만 구현해서 배포했습니다. 결과는 2등!

땀 모양이 물폭탄 공격을 받고 있는겁니다

 

 

 

# 아쉬웠던 건,

참가한 사용자 중에 움직임이 없는 서비스가 있었는데요, 그걸 타깃으로 잡으면 점수를 계속 빨아먹을 수 있다는 점이었습니다. 서비스들이 모두 액티브했으면 어땠을까 하는 아쉬움이 남습니다. 몇 턴 이상 공격도 없고 움직임이 없다면 위치를 변경시킨다던지요. 저도 시작하고 얼마 있지 않아 움직이지 않는 유저를 타깃으로 잡았고 자리를 이탈하지 않고 계속 물폭탄 공격을 하며 점수를 얻었습니다. ( 1등 하신 분의 애플리케이션도 움직이지 않는 타깃으로 점수를 벌었고, 1등과 2등의 차이라면 다른 플레이어에게 누가 덜 공격당했는가 하는.. )

 

# 배포한 서비스를 더 업그레이드한다면,

1) 나를 공격하는 사용자가 2명 이상이고 일정 횟수 이상 연속으로 공격당하고 있을 때 위치를 변경해야 합니다. 내 서비스가 한쪽에서 점수를 계속 얻고 있더라도 2명 이상에게 공격당하면 잃는 점수가 더 큽니다.

2) 나보다 높은 점수의 서비스 쪽으로 이동해서 공격합니다. 내 순위를 올리려면 나보다 점수가 높은 서비스를 공격해야 합니다.

3) 방향만 다르고 사거리에 있는 타겟이 2명 일 때, 그러니까 나는 동쪽을 보고 있는데 내 위, 아래로 상대방이 있다면 방향을 북쪽으로 할지 남쪽으로 할지 선택해야 합니다. 그리고 다음 액션으로 물폭탄 공격을 하겠죠. 여기까지 내가 공격하려면 최소 2 턴(초)이 필요합니다(방향 전환, 공격). 그 2 턴 동안 상대방도 움직이기 때문에 위 쪽 적을 타깃으로 할지, 아래쪽 적을 타깃으로 할지 결정할 때 타깃이 바라보고 있는 방향을 파악해야 합니다. 그 방향으로 이동할 가능성이 크기 때문에 최소 물폭탄 한 대는 맞출 수 있습니다. ( 텍스트라 잘 그려지지 않는데 중요하지 않습니다 )

4) 아군을 만들어서 팀전으로 해봅니다. 서로 공격하지 않고 동맹을 맺는 거죠.ㅋㅋ 하하 핫

5) 누군가 나와 같은 좀비라서 서로 물고 있다면, 피해야 합니다. 둘 다 점수가 제자리에 머물테니까요.

이제 12월 APAC Cloud Run Hackathon - BEST OF THE BEST에 참여하게 됩니다. 그동안 좀 더 생각해봐야겠네요 :) 


댓글
댓글쓰기 폼