강연을 하거나 새로운 사람을 만날 때면, 마치 일종의 자조 모임에 참석한 사람처럼 들리는 이런 말을 종종 하곤 합니다.
"안녕하세요, 저는 타일러입니다. 취미로 스프레드시트를 만들어요."
이 말을 할 때마다 약간의 죄책감을 느낍니다. 제가 스프레드시트를 이렇게 즐기는 게 이상하다는 걸 알기 때문입니다. 스프레드시트는 재무 관리, 고객 데이터 정리, 방대한 정보를 한 번에 분류하는 데 사용되는 도구일 뿐입니다. 재미있게 쓰면 안 되는 거잖아요.
어쩌면 그래서 제가 스프레드시트에 끌리는 걸지도 모르겠습니다. 반항심이라고 할 만한 게 거의 없는 저에게 스프레드시트를 재미있는 것으로 바꾸는 건, 사무실 컴퓨터로 가득 찬 따분한 일상 속에서 제가 할 수 있는 작은 혁명입니다.
예를 하나 들어보겠습니다. 올해 초, 저도 (많은 사람들처럼) 재택근무를 하면서 지루함을 달래기 위해 줌 회의 사이사이에 시간을 보낼 방법을 찾고 있었습니다. 예전에 사무실에서 흔히 하던 단순 반복 게임, 예를 들어 솔리테어(Solitaire)나 지뢰찾기 같은 게임들을 찾아보기 시작했습니다. 마음에 드는 버전을 찾지 못했고, 회사 노트북에 게임을 설치하는 건 "비생산적"으로 보일 것 같아서 직접 만들기로 했습니다.
프로그래밍 실력은 꽤 괜찮은 편이라 PICO-8 같은 프로그램을 사용해서 몇 시간 안에 (물론 StackOverflow에서 검색을 많이 하겠지만) 사무실의 지루함을 달래줄 만한 게임을 뚝딱 만들 수도 있었을 겁니다. 하지만 바로 눈앞에, 제가 업무에 집중해야 할 부분이자 중요한 부분인 Google Sheets가 있었습니다. 당시에는 아주 지루한 지표(VBM, Very Boring Matrixs)들을 추적하는 데 사용하고 있었는데, 필요한 도구들이 모두 갖춰져 있었습니다. 사각형을 그리고, 체크박스를 선택하고, 클릭한 위치에 "지뢰"가 있는지 확인하는 기능도 있었습니다. 조건부 서식을 조금만 활용하면, 단순한 업무 공간에 갑자기 게임이 탄생했습니다.
왜 이런 일을 하냐고요?
스프레드시트로 게임을 만드는 것의 장점은 단순히 "기존의 방식"을 뛰어넘는 것뿐만이 아닙니다. 게임 아이디어를 프로토타입으로 만들거나 특정 메커니즘에 대해 새로운 관점을 찾는 데에도 비용 효율적인 방법입니다.
예를 들어, 얼마 전 체스 게임에서 유효한 수가 어떻게 처리되는지 더 자세히 알고 싶었는데, 스프레드시트의 제약 때문에 연산 자체뿐 아니라 연산 순서까지 고려해야 했습니다. 그 결과물을 구글 시트에서 직접 플레이해 보고 자세한 분석 글도 읽어볼 수 있습니다. 스프레드시트로 시작한 덕분에 어떤 함정을 피해야 하는지, 어떤 기능을 간소화할 수 있는지, 그리고 더 강력한 프로그래밍 언어가 어떤 이점을 줄 수 있는지 더 잘 이해하게 되었습니다. 만약 Lua나 Python 같은 언어로 시작했다면, 기능 추가에 대한 욕심 때문에 불필요한 문제에 휘말려 프로젝트를 완성하지 못했을지도 모릅니다.
또한, 비디오 게임의 기본적인 메커니즘이 간단한 수학으로 귀결된다는 것을 배우는 데에도 아주 좋은 방법입니다. 예를 들어 플레이어의 이동 위치를 표시하거나, 특정 상황에 따라 캐릭터의 능력치(체력, 스태미나 등)를 조정하는 것과 같은 작업이죠. 제가 가장 좋아하는 파티 재주 중 하나는 10분 안에 스네이크 게임을 뚝딱 만들어내는 것입니다(제가 파티 분위기를 잘 낸다는 걸 아시겠죠?). 게임 컨셉을 스프레드시트로 옮기는 기본적인 방법을 보여주는 거죠. (스프레드시트는 여기에서 확인하실 수 있습니다.)
마지막으로, 그리고 이게 저에게 가장 중요한 점인데, 스프레드시트 작업은 정말 재미있습니다. 스프레드시트가 원래 의도하지 않은 기능을 구현하는 것은 마치 5만 조각짜리 직소 퍼즐을 만들고 맞추는 것과 같습니다. 스프레드시트의 제약 조건 안에서 작업하는 것은 손으로 무언가를 만드는 것(저는 뜨개질과 사슬 갑옷을 취미로 하고 있습니다)에서 느끼는 만족감을 충족시켜주면서, 프로그래밍이나 복잡한 퍼즐 게임을 할 때처럼 두뇌를 자극하는 활동이기도 합니다. 그러면 최종 결과물이 완전히 쓸모없더라도, 복잡하고 이상한 문제를 해결했다는 사실에 만족감을 느낄 수 있습니다. 그리고 (지금까지는) 그 시간이 낭비되었다고 느낀 적은 한 번도 없습니다.
어떻게 시작해야 할까요?
정말 잘 물어보셨어요! 첫 번째 단계는 사용할 스프레드시트 앱을 선택하는 것입니다. 저는 구글 시트를 선호하지만, 마이크로소프트 엑셀, 애플 넘버스, 또는 스마트시트나 로우즈 같은 웹 앱에서도 비슷한 방식으로 게임을 만들 수 있습니다. 스프레드시트로 게임을 만들려면 다음 세 가지가 필요합니다.
1. 클릭할 수 있는 요소
게임은 상호작용에 기반하는데, 스프레드시트는 보통 텍스트와 숫자를 직접 입력하는 것 외에도 클릭할 수 있는 다양한 옵션을 제공합니다. 예를 들어 구글 시트에는 체크박스를 켜고 끌 수 있고 (약간의 트릭을 사용하면 버튼으로도 만들 수 있습니다), 엑셀 같은 앱에서는 수식이나 매크로를 실행하는 버튼을 만들 수도 있습니다.
스프레드시트에 클릭 가능한 요소를 추가하면 대부분의 플레이어가 비디오 게임으로 인식하는 모습에 더 가까워지고, 더욱 직관적인 경험을 제공할 수 있습니다. 따라서 플레이어는 스프레드시트로 만든 Frogger를 본 적이 없더라도 게임을 시작하는 방법을 쉽게 파악할 수 있을 것입니다.
2. 순환 참조
화면에서 캐릭터를 좌우로 이동시킬 때, 일반적으로 X축을 따라 특정 값만큼 위치를 조정합니다. 대부분의 경우 게임 코드를 살펴보면 각 객체가 고유한 "X"와 "Y" 값을 가지고 있으며, 객체가 이동해야 할 때마다 이 값이 조정되는 것을 볼 수 있습니다. 예를 들어, 캐릭터를 오른쪽으로 이동시키려면 키보드의 오른쪽 화살표 키를 누르는 동안 현재 X 위치에 1을 더하는 다음과 같은 함수를 작성할 수 있습니다.
actor.onKeyPress("right", {
this.x = this.x + 1;
});
스프레드시트에서는 셀이 자체 값을 조정하는 것을 거부하기 때문에 동일한 결과를 얻기가 어려울 수 있습니다. 이러한 현상을 "순환 참조"라고 하며, 스프레드시트 프로그램은 일반적으로 기본적으로 이를 비활성화합니다. 순환 참조가 발생하면 (예를 들어 분기별 예산을 실수로 자기 자신에게 더하는 경우) 매우 복잡한 문제가 발생할 수 있기 때문입니다.
스프레드시트에서 순환 참조를 지원하는지 확인하려면 새 스프레드시트를 만들고 A1 셀로 이동하세요. 거기에 `=A1+1`을 입력하고 결과를 확인하세요! Google Sheets를 사용하는 경우 순환 참조를 활성화하는 방법에 대한 안내가 표시될 수 있으며, 그렇지 않은 경우 다른 방법을 추천받을 수도 있습니다. 예를 들어 Rows는 순환 참조를 지원하지 않지만, 이를 보완하는 유용한 "EXECUTE" 명령어가 있습니다.
순환 참조를 활성화하면 캐릭터의 X, Y 좌표(및 기타 여러 값)를 저장하는 셀을 만들고 필요에 따라 해당 셀의 값을 자동으로 업데이트할 수 있습니다. 예를 들어, 플레이어가 클릭하여 캐릭터를 오른쪽으로 이동시킬 수 있는 체크박스가 C3 셀에 있다고 가정해 보겠습니다. X 값을 저장하는 셀(A1 셀이라고 합시다)은 다음과 같이 작성할 수 있습니다.
=IF(C3=TRUE,A1+1,A1)
이 수식은 조건이 충족되면(버튼을 클릭하면) 해당 셀의 현재 값을 1만큼 증가시키도록 합니다. 그렇지 않으면 그대로 두세요. 이제 게임의 시작입니다!
3. 조건부 서식
마지막으로, 솔직히 말씀드리면 완전히 선택 사항입니다. 하지만 있으면 편리합니다.
셀의 배경색이나 글꼴 색을 바꾸는 것이 서식입니다. 조건부 서식을 사용하면 셀의 내용이나 다른 셀의 내용에 따라 셀의 모양과 느낌을 동적으로 변경할 수 있습니다. 이를 통해 모든 숨겨진 수치를 보여주지 않고도 정보를 전달할 수 있으므로 게임을 훨씬 더 접근하기 쉽게 만들 수 있습니다.
마지막 예시 하나만 더 들겠습니다. 제가 Into the Breach와 같은 턴제 전략 게임을 만들 때, 8x8 격자에서 각 캐릭터의 위치를 표시하기 위해 조건부 서식을 사용했습니다.
여기서는 체크박스를 사용하여 플레이어가 이동시킬 말을 선택하고, 이동할 칸을 지정할 수 있도록 했습니다. 체크박스가 있는 셀은 "참" 또는 "거짓" 값만 가질 수 있기 때문에, 조건부 서식을 사용하여 플레이어에게 다른 정보들을 표시합니다. 예를 들어 아군(파란색)과 적군(빨간색) 캐릭터의 위치, 적의 공격 대상(연한 빨간색), 선택된 캐릭터가 이동할 수 있는 칸(연한 파란색) 등을 보여주는 것입니다. 이러한 정보는 실제로는 플레이어에게 보이지 않는 다른 셀에서 계산되지만, 조건부 서식을 통해 턴제 전략 게임을 해본 플레이어라면 누구나 이해할 수 있는 방식으로 정보를 전달할 수 있습니다.
조건부 서식은 필요할 때까지 텍스트를 숨기거나, 캐릭터 이동의 효과를 내는 데에도 사용할 수 있습니다. Rogue와 같은 게임에서 그래픽이 필수적인 것은 아니지만, 조건부 서식 기능이 있다면 적극적으로 활용하는 것이 좋습니다.
스프레드시트로 할 수 있는 일은 또 무엇이 있을까요?
놀랍게도, 스프레드시트로는 할 수 있는 일이 아주 많습니다! 스프레드시트는 유니티나 언리얼 엔진 같은 게임 엔진에는 없는 몇 가지 제약이 있지만, 그 기능은 단순한 지출 관리 그 이상입니다.
스프레드시트를 활용한 다른 게임이나 독특한 활용 사례가 궁금하시다면, 제 포트폴리오(네, 스프레드시트입니다!)를 확인해 보세요.
즐거운 스프레드시트 작업 되세요!
타일러 로버트슨은 영국 런던에 거주하는 작가이자 창작자입니다. 자동화에 대한 글을 쓰거나 스프레드시트의 한계를 시험하지 않을 때는 파트너와 미니어처 닥스훈트와 함께 영국 시골을 거닐곤 합니다.
원문: https://ludogogy.professorgame.com/article/thats-no-spreadsheet-thats-a-game-engine/
<저작권자 ⓒ Ludogogy (https://www.ludogogy.co.uk/) 무단전재 및 재배포 금지>
ⓒ 게임화저널, 무단전재 및 재배포 금지