TL;DR
- Apple TV 전체 화면을 픽셀 LCD 화면으로 바꾸는 무료 오픈 소스 게임 Snake를 제작했으며, 뱀은 벽을 통과하고 자기 몸을 물 때만 게임이 끝남.
- Siri Remote를 스와이프하거나 클릭해 방향을 조작하고, 먹이를 먹을 때마다 뱀이 한 칸씩 길어짐.
- 게임 규칙은 UI와 분리된 Swift 구조체로 구현하고, 화면은 SwiftUI Canvas 하나로 그림.
- 이미지 없이 아이콘까지 Swift 스크립트로 그리며, 규칙 테스트와 시뮬레이터용 UI 테스트를 갖춤.
- MIT 라이선스로 공개했으며, tvOS 18 이상, Xcode 26, Apple Developer 계정이 있으면 Xcode에서 Apple TV에 직접 설치 가능함.
Snake 소개
- 고전 휴대전화 게임을 Apple TV 전체 화면에서 즐길 수 있도록 구현함. 픽셀 뱀이 먹이를 먹을 때마다 길어지는 방식임.
- 게임은 무료 오픈 소스이며, Soundscape와 같은 형태로 공개함.
- TV 화면 전체를 옅은 녹색 LCD 화면처럼 표현함. 뱀과 먹이, 테두리, 점수까지 모두 굵은 도트 매트릭스 픽셀로 구성함.
- Siri Remote를 스와이프해 뱀의 방향을 조작함.
- 뱀은 벽을 통과해 반대편으로 나오므로, 자기 몸을 무는 경우에만 패배함. 게임 내내 속도는 일정하며, 먹이를 하나 먹을 때마다 뱀이 한 칸 길어짐.
플레이 방법
- Snake를 열고 어느 방향으로든 스와이프하면 게임이 시작됨. 리모컨에서 위, 아래, 왼쪽, 오른쪽으로 스와이프해 방향을 바꿈.
- 최신 Siri Remote에서는 클릭패드 가장자리를 눌러 방향을 조작할 수도 있음.
- 방향 입력은 짧은 대기열에 쌓임. 따라서 뱀이 오른쪽으로 움직이는 동안 아래쪽을 누른 뒤 왼쪽을 누르면, 자기 몸에 부딪히지 않고 두 번 방향을 바꿔 되돌아갈 수 있음.
- 재생/일시정지 버튼은 게임을 멈추며, 클릭하면 다시 진행됨. 이전 리모컨의 메뉴 버튼인 뒤로 가기 버튼도 진행 중인 게임을 멈춤.
- 뒤로 가기 버튼을 한 번 더 누르면 홈 화면으로 이동하며 게임은 일시정지 상태로 대기함. 앱을 나가도 게임이 자동으로 멈춤.
- 게임 종료 후 클릭하면 새 보드가 시작됨. 최고 점수는 Apple TV에 저장되며 화면 오른쪽 위에 HI로 표시됨.
작동 방식
- Snake는 의존성이 없는
SwiftUI앱임. 게임 규칙은 UI가 없는 일반Swift구조체에 들어 있음. - 각 단계에서 머리가 한 칸 이동하고 꼬리가 따라옴. 뱀이 먹이를 먹은 경우에는 꼬리가 이동하지 않음.
- 먹이 충돌 여부를 확인하기 전에 꼬리를 먼저 이동시킴. 따라서 뱀이 자기 꼬리를 따라가도 죽지 않음.
- 스와이프 입력은 짧은 대기열에 들어가며, 각 이동 단계에서 입력 하나를 꺼내 처리함. 두 번 빠르게 스와이프해 뱀의 방향을 돌릴 수 있는 이유임.
- 화면은 LCD 픽셀을 그리는
SwiftUI Canvas하나로 구성함. 30×15 보드의 각 칸은 4픽셀 너비이며, 3×3 픽셀 블록과 간격으로 표현함. - 뱀은 픽셀 블록의 연결로 표현하며, 두 구간이 맞닿는 부분은 픽셀 선으로 이어짐.
- 불이 꺼진 픽셀로 만든 희미한 격자는 별도의 캔버스에 둠. 따라서 매 이동 단계마다 다시 그리지 않고 한 번만 그림.
- 앱에는 이미지가 전혀 없음. 아이콘도 같은 LCD 스타일로
Swift스크립트가 그림. - Apple TV 아이콘은 선택할 때 레이어가 서로 벌어지는 구조이므로, 아이콘은 뒤쪽 화면, 가운데 뱀, 앞쪽 먹이의 세 레이어로 구성함.
- 리모컨 입력은
tvOS명령을 통해 게임에 전달함. 스와이프에는onMoveCommand, 클릭에는onTapGesture, 재생/일시정지에는onPlayPauseCommand, 종료에는onExitCommand를 사용함. tvOS에서는 뒤로 가기 버튼이 홈 화면으로 이동하는 동작을 기대하므로, 게임은 플레이 중일 때만 해당 입력을 처리함.- 저장소에는 모든 규칙을 확인하는 테스트와 시뮬레이터에서 가상 리모컨으로 게임을 진행하는 UI 테스트가 있음. 규칙 테스트는 코드를 푸시할 때마다 실행됨.
설치
- 코드는 GitHub의
flaviocopes/snake저장소에 있으며, 라이선스는 MIT임. - Apple TV에는 다운로드한 앱을 설치할 수 없고 Snake는 App Store에 없으므로, Xcode에서 개인 Apple TV로 빌드해 설치해야 함.
- Mac과 Apple TV를 같은 네트워크에 연결한 뒤, Apple TV에서 설정 → 리모컨 및 기기 → 리모트 앱 및 기기를 엶.
- Xcode에서 창 → 기기 및 시뮬레이터를 열고 Apple TV 옆의 페어링을 클릭한 다음, Apple TV에 표시된 코드를 입력함.
Snake.xcodeproj를 열고 Snake 스킴과 Apple TV를 선택한 뒤, 서명 및 기능에서 본인의 팀을 설정함.- 실행 단축키인 ⌘R을 누름.
- 설치 요건은
tvOS 18이상,Xcode 26, Apple Developer 계정임. 유료 계정에서는 앱이 1년간 작동하며, 이후에는 Xcode에서 다시 실행해야 함. - Apple TV 없이 시험하려면 설치 단계에서 Apple TV 시뮬레이터를 선택하면 됨. 화살표 키로 방향을 조작하고 Return 키로 클릭함.
- Snake는 온라인에 접속하지 않고 계정도 사용하지 않으며, 저장하는 정보는 최고 점수뿐임.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요