02 드래곤플라이트 게임 테스트
결과 게임
종합 순위(3라운드 평균) — 🥇 1위 q38 894.7 · 🥈 2위 ff 850.7 · 🥉 3위 fn 836.7. 전체 순위표는 아래 README 10절.
점수는 1000점 만점입니다. 라운드마다 최신(v3)부터 보여 주고, 각 라운드 안에서는 그 라운드 순위순입니다.
v3 · 스테이지·크레딧·컨티뉴 심사 완료
v2 · 터치 조작 심사 완료
v1 · 기본 게임 심사 완료
02. 브라우저 드래곤플라이트 대회
1. 한 줄 요약
같은 지시문으로 로컬 LLM 15종이 각자 브라우저용 세로 스크롤 슈팅 게임 「dragonflight」를 만들고, 자동 실행 시험과 블라인드 코드 리뷰로 1000점 만점 채점하는 대회입니다. 01 테트리스 대회와 같은 틀이고, 같은 15종이 같은 조건으로 참가합니다.
- 참가 모델 15종의 제원은 00_model_info 에 있습니다.
- 모든 모델은 같은 서버에서, 같은 에이전트 도구로, 같은 지시문을 받고, 한 번에 하나씩 순서대로 일합니다.
- 테트리스와 다른 점이 하나 있습니다. 지시문에 「필요하면 서브에이전트(subagent)를 만들어 역할을 나눠 진행해도 좋습니다」라는 문장이 들어 있습니다(3절, 5절 참고).
2. 무엇을 만드나, 그리고 라운드 개념 (v1 / v2 / v3)
참고 대상은 넥스트플로어(NEXT FLOOR)가 개발해 2012년 카카오톡 「게임하기」로 서비스한 모바일 종스크롤 슈팅 「드래곤플라이트」입니다. 플레이어(용)가 화면 아래에서 좌우로만 움직이고, 공격은 자동으로 계속 나갑니다. 위에서 가로 한 줄씩 내려오는 적(용)을 격파하거나 피하고, 코인과 아이템을 모으고, 경고가 뜬 줄에 떨어지는 운석을 피하며, 일정 거리마다 나오는 보스를 쓰러뜨리는 종스크롤 슈팅입니다.
이 시험은 원작을 베끼는 시험이 아니라 원작의 「게임성」을 직접 구현하는 시험입니다. 지시문은 원작의 그림·소리·이름 같은 에셋을 복사하지 말고 직접 그린 그래픽(도형, Canvas, CSS, WebAudio 합성 등)으로 만들라고 요구합니다. 원작 에셋을 가져다 쓴 구체적인 증거가 있으면 채점에서 감점합니다(7절).
대회는 테트리스와 마찬가지로 「라운드」로 이어집니다. 같은 모델이 같은 게임을 라운드마다 한 단계씩 발전시킵니다.
| 라운드 | 과제 | 시작 상태 |
|---|---|---|
| v1 | 세로 스크롤 슈팅을 처음부터 새로 만들기 — 좌우 이동·자동 발사, 웨이브와 적 체력, 코인과 아이템, 운석 경고, 보스, 점수와 난이도 상승, 시작 화면과 다시 시작, 키보드·마우스 조작, index.html 하나로 실행, README.md 포함 | 빈 폴더 |
| v2 | 만들어 둔 게임에 모바일 터치 조작 추가 — 손가락을 끌어 좌우로 이동, 휴대폰 화면에 맞춤 | 자기 v1 결과물을 복사한 폴더 |
| v3 | 아케이드 게임처럼 스테이지와 크레딧·컨티뉴 도입 — 보스를 쓰러뜨리면 다음 스테이지, 코인을 넣어 크레딧을 쌓아야 시작, 게임 오버 뒤 카운트다운 컨티뉴 | 자기 v2 결과물을 복사한 폴더 |
v2·v3 의 규칙은 다음과 같습니다.
- 각 모델은 자기 직전 라운드 결과물만 이어받습니다. 다른 모델의 결과물은 보지 못합니다.
- 공평성을 위해 이전 라운드 채점에서 나온 결함·피드백은 모델에게 알려 주지 않습니다. 모델은 무엇이 틀렸는지 모른 채 지시문만 받습니다.
- 모델마다 매번 새 세션을 시작하므로, 모델이 아는 것은 지시문과 폴더 안의 코드뿐입니다(이전 대화 기억 없음).
- v3 의 「크레딧 코인」은 게임 안에서 줍는 코인과 다른 것입니다. 지시문이 이름·표시·조작에서 구분하라고 요구합니다.
폴더 이름 규칙은 simple_llm_test_{모델약어}_dragonflight_{버전} 입니다.
simple_llm_test_q36_dragonflight_v1 # q36 모델의 v1 결과물
simple_llm_test_q36_dragonflight_v2 # 위 폴더를 복사해서 터치 조작을 추가한 v2 결과물
simple_llm_test_q36_dragonflight_v3 # v2 폴더를 복사해서 스테이지·크레딧·컨티뉴를 추가한 v3 결과물
3. 지시문 원문
모델마다 지시문은 폴더 이름({alias} 자리에 모델 약어)만 다르고 나머지는 글자 하나까지 같습니다. 아래는 실제로 보낸 문장 그대로입니다.
테트리스와의 차이: 세 라운드 모두 마지막 요구사항에 「필요하면 서브에이전트(subagent)를 만들어 역할을 나눠 진행해도 좋습니다.」가 들어 있습니다. 테트리스 지시문에는 이 문장이 없었습니다. 쓰라는 지시가 아니라 써도 된다는 허용이어서, 쓸지 말지와 어떻게 나눌지는 모델이 정합니다.
v1
현재 작업 폴더 이름은 simple_llm_test_{alias}_dragonflight_v1 입니다. 이 폴더 안에 웹 브라우저에서 바로 실행되는 HTML 기반 세로 스크롤 슈팅 게임 dragonflight 를 만들어 주세요. 모바일 게임 「드래곤플라이트」의 게임성을 참고하되, 원작의 그림·소리·이름 같은 에셋은 복사하지 말고 직접 그린 그래픽으로 만들어 주세요.
게임 규칙:
- 플레이어(용)는 화면 아래에서 좌우로만 움직이고, 공격은 자동으로 계속 발사됩니다.
- 적(용)은 가로 한 줄 단위의 웨이브로 위에서 내려옵니다. 적마다 체력이 있어 맞으면 줄어들고 0 이 되면 쓰러집니다. 적에 닿으면 게임 오버입니다.
- 쓰러진 적은 코인을 떨어뜨리고, 가끔 아이템(공격 강화·자석·방어막 등)이 나옵니다.
- 운석이 떨어지기 전에는 해당 줄에 경고 표시가 먼저 나옵니다.
- 일정 거리마다 보스가 나옵니다.
- 날아간 거리와 처치 수로 점수를 매기고, 진행할수록 속도와 적 체력이 올라갑니다.
- 점수·거리·코인을 화면에 표시하고, 시작 화면과 게임 오버·다시 시작을 갖춰 주세요.
요구사항:
- 키보드(←/→)와 마우스로 조작할 수 있게 해 주세요.
- 별도 설치·빌드·서버 없이 index.html 파일을 브라우저로 열면 바로 실행되어야 합니다.
- 필요한 파일은 모두 이 폴더 안에 만들어 주세요.
- 게임 소개, 실행 방법, 조작법, 파일 구성을 정리한 README.md 도 이 폴더에 만들어 주세요.
- 필요하면 서브에이전트(subagent)를 만들어 역할을 나눠 진행해도 좋습니다.
완성되면 만든 파일 목록과 조작 방법을 짧게 정리해 주세요.
v2
현재 작업 폴더 이름은 simple_llm_test_{alias}_dragonflight_v2 입니다. 이 폴더에는 앞서 만든 HTML 게임 dragonflight 가 있습니다. 모바일 기기에서도 플레이할 수 있도록 터치 조작 기능을 추가해 주세요(손가락을 끌어 좌우로 이동).
요구사항:
- 기존 기능은 그대로 유지해 주세요.
- 휴대폰 화면에서도 보기 좋게 맞춰 주세요.
- 별도 설치·빌드·서버 없이 index.html 파일을 브라우저로 열면 바로 실행되어야 합니다.
- README.md 에 터치 조작 방법을 추가해 주세요.
- 필요하면 서브에이전트(subagent)를 만들어 역할을 나눠 진행해도 좋습니다.
완성되면 바꾼 파일 목록과 터치 조작 방법을 짧게 정리해 주세요.
v3
현재 작업 폴더 이름은 simple_llm_test_{alias}_dragonflight_v3 입니다. 이 폴더에는 앞서 만든 HTML 게임 dragonflight(터치 조작 포함)가 있습니다. 아케이드 게임처럼 스테이지(레벨)와 크레딧/컨티뉴 개념을 도입해 주세요.
요구사항:
- 스테이지: 보스를 쓰러뜨리면 다음 스테이지로 넘어가고, 스테이지가 오를수록 어려워지며, 화면에 현재 스테이지가 표시되어야 합니다.
- 크레딧: 코인을 넣어 크레딧을 쌓고(키보드와 터치 모두 가능), 크레딧이 있어야 게임을 시작할 수 있게 해 주세요. 남은 크레딧을 화면에 표시해 주세요. 이 「크레딧 코인」은 게임 안에서 줍는 코인과 다른 것이니 이름·표시·조작에서 구분해 주세요.
- 컨티뉴: 게임 오버가 되면 카운트다운과 함께 컨티뉴 화면을 보여 주고, 그 사이 크레딧을 써서 이어서 할 수 있게 해 주세요(점수·스테이지 유지). 시간 안에 이어 하지 않으면 타이틀 화면으로 돌아갑니다.
- 게임 흐름: 타이틀(대기) 화면 → 시작 → 플레이 → 게임 오버 → 컨티뉴 → 타이틀 로 끊김 없이 이어지게 해 주세요.
- 기존 기능(키보드·마우스·터치 조작)은 그대로 유지하고, 별도 설치·빌드·서버 없이 index.html 을 브라우저로 열면 바로 실행되어야 합니다.
- README.md 에 스테이지 규칙, 크레딧·컨티뉴 방법, 조작법을 추가해 주세요.
- 필요하면 서브에이전트(subagent)를 만들어 역할을 나눠 진행해도 좋습니다.
완성되면 바꾼 파일 목록과 크레딧·컨티뉴 조작 방법을 짧게 정리해 주세요.
4. 실행 환경
테트리스 대회와 같은 서버, 같은 엔진, 같은 에이전트, 같은 권한입니다. 자세한 값은 01 테트리스 대회의 실행 환경을 보세요.
서버
- AMD Strix Halo 노트북 서버(Radeon 8060S, 64GB 통합 메모리). 모델 추론은 llama.cpp b11701 (Vulkan), router 모드이고 모델은 한 번에 하나만 올라갑니다.
- 모델마다 서버에 등록된 자기 프리셋(생각 모드, 샘플링 등)을 그대로 씁니다. 대회용으로 따로 바꾸지 않았고, 각 값은 모델 정보 에 있습니다.
예외: mel (Mellum 2.1)
mel 만 llama.cpp b11539 로 돌립니다. b11701 은 Mellum 의 ffn_moe_down 연산을 F32 로 강제하는데 Vulkan 이 이 연산을 GPU 에서 지원하지 않아 CPU 로 넘어가고, 생성 속도가 4.7배 느려지기 때문입니다. 이 서버의 GPU 에서는 b11539 에서도 NaN 이 없었고 퍼플렉서티도 같아서, mel 차례에만 엔진을 바꾸고 끝나면 b11701 로 되돌립니다. 이유와 수치는 01 테트리스 대회의 같은 항목에 있고, 02 에서도 똑같이 적용합니다.
에이전트
- opencode v1.18.35 를
opencode run --auto --pure -m halo/{alias}로 실행합니다(--auto는 파일 편집·명령 실행을 사람 확인 없이 허용,--pure는 외부 플러그인 없이 실행). - 권한: 파일 편집 허용, 셸 명령 허용, 웹 가져오기(webfetch) 거부. 셸 네트워크는 막지 않았습니다(5절 감사 결과 참고).
- 모델마다 새 세션, 새 임시 홈 디렉터리에서 시작합니다.
- 서브에이전트: 모델이 서브에이전트를 만들면 opencode 는 그 서브에이전트를 부모와 같은 모델로 실행합니다. 다른 모델을 부를 수 없고(서버도 한 번에 한 모델만 올라가 있습니다), 서브에이전트는 같은 opencode 안에서 돌기 때문에 같은 샌드박스와 같은 시간 제한 안에 있습니다. 서브에이전트가 보내는 요청도 같은 모델 서버를 지나므로 서버 로그 집계(요청 수, 토큰)에 함께 잡힙니다.
5. 공정성 장치
| 장치 | 내용 |
|---|---|
| 샌드박스(bubblewrap) | 디스크 전체를 읽기 전용으로 두고, 홈과 데이터 디스크는 빈 영역으로 가려서 다른 모델의 폴더·결과물이 보이지 않습니다. 쓸 수 있는 곳은 자기 프로젝트 폴더와 일회용 임시 홈뿐입니다. 부모 프로세스가 끝나면 함께 종료됩니다. |
| 웹 가져오기 도구 거부 | 웹 가져오기(webfetch) 도구는 거부했습니다. 셸 네트워크는 막지 않았습니다 — 아래 「네트워크 사용 감사」 참고. |
| 시간 제한 | 모델당 라운드당 최대 60분. 넘으면 강제 종료하고 그 시점의 결과물로 채점합니다. 서브에이전트를 쓴 시간도 이 60분 안에 들어갑니다. |
| 냉각 시간 | 모델 사이에 1분 쉽니다. 과열을 막고 직전 모델의 부하가 다음 모델에 영향을 주지 않게 하기 위해서입니다. |
| 같은 지시문 | 폴더 이름 외에는 동일한 지시문. 서브에이전트 허용 문장도 15종 모두에게 똑같이 들어갑니다. |
| 이전 피드백 없음 | v2·v3 에서도 직전 라운드 채점의 결함·피드백을 모델에게 알려 주지 않습니다. |
| 같은 순서 | 모든 라운드에서 아래 순서를 그대로 유지합니다. |
| 폴더 사전 생성 | 모델이 일을 시작하기 전에 빈 폴더(v1) 또는 직전 라운드 복사본(v2, v3)을 미리 만들어 둡니다. 폴더가 이미 있으면 덮어쓰지 않고 중단합니다. |
| 한 번에 한 라운드 | 라운드가 모두 끝나야 다음 라운드를 시작합니다. 서버에는 한 번에 한 모델만 올라가 있습니다. |
네트워크 사용 감사 (2026-10-17 최종 집계): 셸 네트워크를 막지 않았으므로 실행 기록을 조사했습니다. 드래곤플라이트 v1~v3 실행 로그 45개(모델 15종 × 3라운드)에서 curl·wget, 외부 URL 요청, 패키지 설치, 외부 fetch, webfetch 시도를 찾았습니다. 근거는 로그에 남은 bash 호출 464회(v1 387회, v2 21회, v3 56회)와, 서브에이전트까지 포함한 도구 호출 전체 기록 957회(세 라운드 모두 15종, v1 451회, v2 204회, v3 302회)입니다. 결과는 셸 접속, webfetch, 패키지 설치, 외부 URL 요청이 모두 0건 / 결과물 반영 0건입니다. 정규식에 걸린 1건(v1 q38 의 npm ls -g)은 로컬 목록만 조회한 것이라 접속이 아님을 확인했습니다. 게임 파일 안의 외부 URL(실행 중 불러오는 주소)과 내려받은 라이브러리 흔적도 0건입니다(테트리스를 포함한 게임 폴더 90개 검사). 서브에이전트 사용이 로그에서 관찰된 실행은 v2 cn·q36 과 v3 mg 입니다(서브에이전트 내부 호출은 로그에 나오지 않고 도구 호출 기록에서만 보입니다). 실행기 자신이 임시 홈에 패키지를 내려받는 접속은 모델의 접속이 아니라 세지 않았습니다. 로그에 남지 않는 호출은 확인할 수 없는 범위입니다.
진행 순서: q36, cn, orn, mg, bolt, lfm, mcv, q38, aw, fn, ff, c7, c7r, c1, mel (mel 은 엔진을 바꿔야 해서 맨 마지막). 테트리스와 같은 순서입니다.
6. 진행 순서 (파이프라인)
모델 한 개당 다음 단계를 거치고, 15종 모두 같은 절차를 반복합니다.
[폴더 준비] v1: 빈 폴더 생성 / v2: 자기 v1 폴더를 복사 / v3: 자기 v2 폴더를 복사
|
v
[샌드박스 에이전트 실행] opencode + 지시문 (최대 60분, 서브에이전트 허용)
|
v
[서버 로그 집계] 소요 시간, 요청 수, 입력/생성 토큰, 생성 속도,
| 최대 컨텍스트 길이, 컨텍스트 잘림 여부
v
[자동 시험] 데스크톱 (v1, v2, v3 공통)
| 모바일 터치 (v2, v3)
| 아케이드 흐름 (v3)
v
[냉각 1분] --> 다음 모델
:
v
[블라인드 심사] 결과물에 익명 이름 A~O --> 점수 --> 이름 공개 --> 순위
서버 로그 집계: 에이전트가 끝나면 그 시간 동안의 서버 로그에서 해당 모델 몫만 뽑아 요청 수, 읽은 토큰(프롬프트), 생성한 토큰, 생성 속도(t/s), 최대 컨텍스트 길이, 컨텍스트 초과로 잘린 횟수를 계산하고 결과 폴더의 파일 목록과 크기도 기록합니다.
데스크톱 자동 시험 (헤드리스 Chrome, file:// 로 index.html 을 직접 열기, 제한 시간 약 4분)
- 페이지 로드, 콘솔 오류·예외 수집.
- 시작 시도: 화면 클릭, Enter, Space 입력. 크레딧 코인이 필요한 게임이면 먼저 코인을 넣어 봅니다.
- 가만히 두고 화면이 저절로 움직이는지(자동 발사, 적 하강, 배경 스크롤) 확인.
- ←/→ 키를 눌러 플레이어가 실제로 움직이는지, 방향이 맞는지 확인.
- 약 10초 동안 점수·거리·코인 숫자가 오르는지 확인.
- 마우스로 끌어서 움직이는지 확인.
- 일시정지 키가 있으면 멈췄다 풀리는지 확인.
- 게임 오버까지 가서 다시 시작이 되는지 확인.
- 각 단계마다 스크린샷을 저장합니다.
모바일 자동 시험 (v2, v3 · 화면 390x844, 터치 에뮬레이션, 제한 시간 약 3분)
- 휴대폰 크기로 로드하고 화면 맞춤(가로 스크롤 없음, 캔버스가 화면에 들어오는지) 확인.
- 화면을 탭해서 시작.
- 손가락 끌기(touchstart 에서 touchmove, 좌우)로 플레이어가 움직이는지 확인.
- 움직이는 동안 점수·거리·코인 숫자가 오르는지 확인.
- 게임 오버 뒤 탭으로 다시 시작이 되는지 확인.
아케이드 흐름 자동 시험 (v3 만, 제한 시간 약 7분)
- 크레딧 코인 투입(키보드, 터치 버튼)과 남은 크레딧 표시 확인. 게임 안에서 줍는 코인 숫자를 크레딧으로 착각하지 않도록 구분해서 읽습니다.
- 크레딧이 없을 때는 시작이 안 되고, 있을 때 시작되는지 확인.
- 현재 스테이지가 화면에 표시되는지 확인.
- 게임 오버를 일으켜 컨티뉴 카운트다운 화면이 나오는지, 크레딧을 써서 이어 하면 점수와 스테이지가 유지되는지, 시간이 지나면 타이틀로 돌아가는지 확인.
테트리스 시험과 다른 점: 슈팅 게임은 화면이 항상 움직이기 때문에 「화면이 바뀌었나」만으로는 입력에 반응했는지 가릴 수 없습니다. 그래서 플레이어의 위치를 왼쪽 입력 상태와 오른쪽 입력 상태에서 각각 캡처한 화면의 차이로 재서 반응과 방향을 판단하고, 점수·거리·코인은 화면에서 읽은 숫자가 실제로 오르는지로 판단합니다.
7. 채점
1000점 루브릭
각 라운드는 따로 1000점 만점입니다. 영역 2~6(코드 품질 600점)은 그 라운드 시점의 전체 코드에 같은 기준을 적용하고, 영역 1(기능 구현 400점)만 라운드의 과제에 맞춰 바뀝니다.
| 영역 | 배점 | 세부 |
|---|---|---|
| 1. 기능 구현 | 400 | 라운드별로 다름(아래 표) |
| 2. 코드 간결성·가독성 | 200 | 중복 없음 60, 이름·상수 40, 죽은 코드 없음 30, 상태 관리 40, 주석 30 |
| 3. 컴포넌트·모듈 분리 | 150 | 관심사 분리(규칙·렌더링·입력·루프·사운드) 70, 응집·결합(적·아이템·보스가 데이터로 정의됨 등) 50, 확장 용이성 30 |
| 4. 패키지·의존성 | 100 | 외부 라이브러리·CDN 없이 오프라인 50, 불필요한 의존 없음 25, 표준 API 25 |
| 5. 파일·경로 배분 | 100 | 폴더 구조 40, 파일 이름 20, 상대 경로 25, 폴더 밖에 파일 없음 15 |
| 6. 문서 README | 50 | 소개·실행·조작·파일 구성이 코드와 일치 |
| 합계 | 1000 |
영역 1 — 라운드별 기능 구현 (400점)
| 라운드 | 세부 |
|---|---|
| v1 처음 만들기 | 1-1 실행·안정성 100: file:// 로 바로 뜸 30, 콘솔 오류 0 20, 시작 입력 반응과 저절로 움직이는 화면 20, ←/→ 키 이동 15, 마우스 이동 10, 60초 연속 플레이와 일시정지 5. 1-2 핵심 규칙 150: 좌우 전용 이동과 자동 발사 20, 웨이브와 적 체력 25, 접촉 게임 오버·충돌·시작/다시 시작 15, 코인과 아이템 효과 25, 운석 경고 15, 보스 20, 점수 15, 난이도 상승 15. 1-3 드래곤플라이트다운 게임성 150: 화면 구성 35, 속도감 30, 타격감 30, 아이템 효과의 시각화 30, 연출 25 |
| v2 터치 추가 | 터치 조작 150(손가락 끌기 이동, 페이지 스크롤·확대 방지, 탭으로 시작과 다시 시작), 모바일 화면 맞춤 100(viewport, 가로 넘침 없음, 비율 유지, 글자 가독성), 기존 기능 유지 100(v1 대비 회귀 없음), 변경의 깔끔함 50(키보드·마우스·터치가 같은 이동 로직을 공유, README 정확) |
| v3 스테이지·크레딧·컨티뉴 | 스테이지 100(보스 격파로 다음 스테이지, 갈수록 어려워짐, 화면 표시), 크레딧 100(키보드·터치 코인 투입, 크레딧이 있어야 시작, 남은 크레딧 표시, 게임 속 코인과 구분), 컨티뉴 100(카운트다운, 크레딧으로 이어 하기에서 점수·스테이지 유지, 시간 초과 시 타이틀), 게임 흐름 50(타이틀에서 컨티뉴까지 끊김 없음, 상태 전이가 한 곳), 기존 기능 유지 50 |
원작 에셋 복제 금지: 원작의 이미지·소리 파일, 캐릭터 이름·로고를 가져다 쓴 구체적인 증거(파일 이름, 코드 문자열, README)가 있으면 1-3 에서 10~30점 감점합니다. 직접 그린 도형, Canvas, CSS, WebAudio 합성은 정상이고, 지시문에서 온 dragonflight 라는 이름과 폴더 이름은 감점하지 않습니다. 심사자가 원작에 대해 확신하지 못하는 사실은 감점 근거로 쓰지 않습니다.
채점 방법
- 블라인드 리뷰: 결과물에 익명 이름(A~O)을 붙여 채점하고, 채점이 끝난 뒤 모델 이름을 공개합니다. 리뷰어는 어느 모델이 만든 것인지 모른 채 채점합니다.
- 자동 시험은 근거 자료이지 점수가 아닙니다. 화면 픽셀과 숫자를 읽는 휴리스틱이라 틀릴 수 있으므로, 최종 판단은 스크린샷과 코드를 직접 보고 합니다.
- 모든 감점·가점에는 근거(파일:줄 번호 또는 시험 결과)를 적어야 합니다. 근거 없는 감점은 금지입니다.
- 아무것도 만들지 못했거나 실행이 안 되면 1-1 은 0점이고, 나머지는 있는 코드만큼만 채점합니다.
- 추가 과제에서 기존 구조를 망가뜨리거나(복사해 붙인 중복, 입력 코드가 규칙 코드와 뒤엉킴) README 가 새 기능을 반영하지 않으면 2~6 에서 감점합니다.
- 영역별 담당 리뷰어와 평균 방식은 심사 때 정해지며, 각 결과 절에서 밝힙니다.
실용 순위
1000점 순위와 별도로, 600점 이상인 결과물만 모아 만드는 데 걸린 시간 순으로 나열한 「실용 순위」를 함께 냅니다.
속도는 1000점에 넣지 않았습니다. 같은 서버라도 모델 크기·엔진 설정에 따라 속도가 크게 갈려서, 속도를 점수에 섞으면 품질 비교가 흐려지기 때문입니다. 대신 쓸 만한 품질(600점 이상)을 갖춘 모델 사이에서 얼마나 빨리 끝냈는지를 별도 순위로 보여 줍니다.
8. 진행 기록과 한계
- 진행: 테트리스 v1~v3 가 끝난 뒤 이어서, 02 는 v1, v2, v3 순서로 한 라운드씩 자동으로 진행합니다. v1 은 2026-10-17 16:36 에 시작했습니다.
- 표본 수: 모델당 라운드당 1회만 실행합니다. 같은 모델을 다시 돌리면 결과가 달라질 수 있으므로 점수 차이가 작은 구간은 순위보다 경향으로 읽어야 합니다.
- 서브에이전트 허용: 서브에이전트를 쓰면 요청 수와 생성 토큰이 늘 수 있고, 쓰지 않은 모델과 시간·토큰을 단순 비교하기 어렵습니다. 어느 모델이 서브에이전트를 썼는지는 기록 로그로 확인할 수 있을 때 결과 절에 적습니다.
- 자동 시험의 한계: 반응 여부는 화면 픽셀의 차이와 읽어 낸 숫자라는 간접 신호입니다. 최종 판단은 코드와 스크린샷을 직접 보고 합니다.
- 사람이 직접 해 봐야 아는 부분: 헤드리스 시험은 사람이 직접 하는 플레이를 대신하지 못합니다. 실제 조작감, 효과음, 휴대폰 실기 동작은 점수에 반영되지 않은 부분이 있습니다.
- 원작 비교의 한계: 원작의 세부 규칙을 모두 알고 채점하지는 않습니다. 지시문에 적힌 규칙(7절의 1-2)을 기준으로 삼고, 원작의 분위기는 1-3 에서 코드와 스크린샷으로 봅니다.
9. 결과 — v1
채점 방식: v1(처음부터 만들기)은 1000점 루브릭을 세 갈래로 나눠 채점했습니다. 1-1 실행·안정성과 1-2 게임 핵심 규칙(250점)은 QA 리뷰어가 헤드리스 Chrome 에서 직접 실측했습니다. 1-3 드래곤플라이트다운 게임성(150점)은 진행자(PM)가 QA 가 남긴 장면 스크린샷과 메모를 보고 채점했고, 2~6(코드 품질 600점)은 코드 리뷰어가 코드를 읽고 채점했습니다. 결과물은 A~O 로 익명 처리(블라인드)해 채점했고, 채점이 끝난 뒤 모델 이름을 공개했습니다. 게임이 돌지 않는 결과물은 루브릭대로 1-1 을 0점으로 했습니다.
품질 순위 (1000점)
열 머리의 1-1/100 은 「항목/만점」입니다. 2 코드 간결성·가독성, 3 컴포넌트·모듈 분리, 4 패키지·의존성, 5 파일·경로, 6 README 입니다. 「플레이 가능?」은 QA 실측으로 「적이 나오고, 맞히고, 죽고, 다시 시작」이 되는지를 본 판정입니다. 공동 12위는 제출 파일이 없는 4종입니다.
| 순위 | 모델 | 총점 | 1-1/100 | 1-2/150 | 1-3/150 | 2/200 | 3/150 | 4/100 | 5/100 | 6/50 | 플레이 가능? | 플레이 링크 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | q38 | 903 | 100 | 144 | 137 | 162 | 121 | 100 | 92 | 47 | 가능 — 전 항목 정상(접촉 즉사가 아니라 HP 3 방식) | 열기 |
| 2 | ff | 871 | 100 | 143 | 126 | 151 | 102 | 100 | 100 | 49 | 가능 — 전 항목 정상(보스는 확률적으로만 출현, Enter 가 아니라 Space·클릭으로 시작) | 열기 |
| 3 | orn | 838 | 100 | 137 | 118 | 139 | 103 | 98 | 100 | 43 | 가능 — 정상(한 번에 한 기씩 등장, HP 5, 가로 창에서 캔버스가 비균등하게 늘어남) | 열기 |
| 4 | fn | 828 | 100 | 141 | 118 | 137 | 92 | 100 | 96 | 44 | 가능 — 규칙 대부분 정상(방어막이 접촉을 막지 못함, 시작은 클릭만) | 열기 |
| 5 | q36 | 787 | 94 | 137 | 121 | 116 | 87 | 98 | 90 | 44 | 가능 — 키로 시작하면 정상, 클릭으로 시작하면 ←/→ 키가 영구히 죽음 | 열기 |
| 6 | cn | 665 | 97 | 75 | 64 | 118 | 81 | 96 | 90 | 44 | 불가 — 시간 계산 오류로 적이 영구히 나오지 않고 점수가 음수로 시작 | 열기 |
| 7 | mcv | 653 | 85 | 74 | 54 | 113 | 88 | 98 | 96 | 45 | 불가 — 충돌식이 NaN 이라 탄이 아무것도 맞히지 못하고 시작부터 보스가 반복, 키보드 이동 불가 | 열기 |
| 8 | bolt | 604 | 75 | 68 | 28 | 124 | 82 | 98 | 92 | 37 | 불가 — 플레이어가 좌측 벽에 고정되고 검은 오버레이가 화면을 덮으며 적이 나오지 않음 | 열기 |
| 9 | mg | 560 | 0 | 89 | 40 | 116 | 78 | 100 | 92 | 45 | 불가 — 첫 프레임 예외로 루프가 죽어 검은 화면(실행 불가) | 열기 |
| 10 | lfm | 444 | 0 | 42 | 7 | 106 | 66 | 100 | 90 | 33 | 불가 — 첫 프레임 예외로 루프가 죽음(실행 불가) | 열기 |
| 11 | mel | 434 | 0 | 38 | 13 | 105 | 58 | 98 | 90 | 32 | 불가 — 시작해도 게임 루프가 돌지 않음(실행 불가) | 열기 |
| 12 (공동) | c7r | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 파일 없음 | 제작 실패 |
| 12 (공동) | c7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 파일 없음 | 제작 실패 |
| 12 (공동) | c1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 파일 없음 | 제작 실패 |
| 12 (공동) | aw | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 파일 없음 | 제작 실패 |
실용 순위 (600점 이상, 소요 시간순)
1000점 순위와 별도로, 총점이 600점 이상인 8종만 소요 시간이 짧은 순서로 나열했습니다.
| 순위 | 모델 | 총점 | 제작 시간 | 요청 수 | 생성 토큰 | 실제로 플레이 가능? |
|---|---|---|---|---|---|---|
| 1 | mcv | 653 | 2:48 | 6 | 8,271 | 불가(탄이 맞지 않음) |
| 2 | bolt | 604 | 3:07 | 12 | 6,028 | 불가(플레이어가 벽에 고정) |
| 3 | orn | 838 | 4:24 | 7 | 17,014 | 가능 |
| 4 | cn | 665 | 4:26 | 5 | 10,172 | 불가(적 미출현) |
| 5 | q36 | 787 | 6:11 | 12 | 25,393 | 가능(클릭 시작 시 키 죽음) |
| 6 | ff | 871 | 11:51 | 15 | 13,210 | 가능 |
| 7 | q38 | 903 | 13:57 | 13 | 17,439 | 가능 |
| 8 | fn | 828 | 33:21 | 378 | 34,907 | 가능 |
실용 순위는 테트리스와 같은 규칙(총점 600점 이상을 생성 시간순)을 유지했습니다. 다만 이 시험은 코드 품질 비중(600점)이 커서, 핵심 루프가 고장 난 cn(적 미출현)·mcv(탄이 맞지 않음)·bolt(플레이어가 벽에 고정)도 600점을 넘었습니다. 실제로 플레이할 수 있는 것은 q38·ff·orn·fn·q36 5종입니다.
- 가장 빨리 끝낸
mcv(2분 48초)와bolt(3분 7초)는 둘 다 플레이할 수 없습니다. 실제로 플레이되는 5종 중에서는orn이 4분 24초(요청 7회)로 가장 빨랐고,fn이 33분 21초(요청 378회)로 가장 오래 걸렸습니다. fn의 요청 378회는 15종 전체에서 가장 많습니다(다음은ff의 15회). 이 시험은 60분 제한이라 그대로 끝까지 갔지만, 03 디펜스의 15분 제한이었다면 마감에 걸렸을 시간입니다.
눈에 띈 점
q38이 1위(903점)이고, 연출 항목을 가장 많이 채운 완성작입니다. 1-3 게임성 137/150 으로 가장 높습니다. 용과 보스(왕관)를 직접 그렸고, 파티클·화면 흔들림·사망 슬로모션에 더해 효과음을 WebAudio 로 합성한 것은 15종 중 이 모델뿐입니다(effects.js). 보스는 방사 14발, 조준 3연발, 다트 소환의 3가지 공격을 순환하고, 적 타입과 아이템 표시를 데이터 테이블로 정의해 코드 리뷰도 522/600 으로 1위입니다. 다만 적에 닿으면 즉사가 아니라 HP 3 이 줄어드는 방식이라(README 에는 명시) 지시의 「닿으면 게임 오버」와 달라 접촉 항목 6점 중 3점만 받았습니다. 13분 57초에 끝났고, 테트리스 v1 에서처럼 가장 오래 걸린 쪽에 속합니다.ff가 2위(871점)입니다. 구름·별 패럴랙스, 적 종류별 색과 체력바, 결과 통계 화면, 탄 3줄·자석·방어막 링 등 연출이 풍부하고 코드 구조도 좋습니다(502/600). 효과음은 없습니다. 감점은 보스가distance % 1500 < 60인 순간에 웨이브가 생성돼야만 나오는 구조라 출현이 확률적(12회 시험에서 4회, 약 1/3)이라는 점입니다. 또 Enter 가 아니라 Space·클릭으로만 시작합니다(안내문에는 적혀 있음).orn(838점)은 4분 24초에 실제로 플레이되는 게임을 만들어 3위입니다. 그림 품질과 연출이 좋습니다(레인 전체 경고, 흔들림, 보스 체력바). 다만 적이 가로 줄이 아니라 한 번에 한 기씩 나오고, HP 5 방식이며, 점수에 거리가 들어가지 않고, 가로로 넓은 창에서는 캔버스가 비균등하게 늘어납니다.fn은 4위(828점)이고 33분 21초가 걸렸습니다. 세로 화면, 「BOSS IN n m」 예고, 파워 레벨 점, 자석·방어막 남은 시간 바가 깔끔합니다. 흠은 방어막 아이템이 접촉 보호를 하지 않고, 보스 패턴이 단조(느린 직하)하며, 시작이 클릭뿐이라는 점입니다. 테트리스 v1 에서 파일을 하나도 만들지 못했던fn이 여기서는 4위입니다.q36은 5위(787점)이고, 입구별 시험이 실제로 결함을 가렸습니다. 키로 시작하면 정상인데 클릭으로 시작하면 마우스 모드가 켜져 ←/→ 키가 영구히 무시됩니다. 웨이브가 줄이 아니라 흩어져 나오고, 보스가 거리가 아니라 웨이브 번호 기준이며, 점수에 거리가 없고, 자석이 방어막 타이머를 공유해 꺼지지 않는 결함도 있습니다.lfm·mg·mel은 실행이 되지 않아 1-1 이 0점입니다.lfm은 첫 프레임에서const로 선언한dt를 다시 대입해 예외가 나고 루프가 죽습니다.mg는reset()보다 먼저draw()가 별 목록을 돌려 첫 프레임에 예외가 나고 검은 화면입니다.mel은update(0)을 한 번만 부르고requestAnimationFrame을 걸지 않아 시작해도 루프가 없습니다.cn·mcv·bolt는 실행은 되지만 핵심 루프가 고장 났습니다.cn은 적 생성 타이머가 −1.79e12 로 시작해 적·운석·보스가 영구히 나오지 않고 점수도 −1.79e10 부터 시작합니다.mcv는 탄에 폭이 없어 충돌식이 NaN 이 되므로 아무것도 맞히지 못하고(격파·코인·아이템 전부 불가), 첫 웨이브가 처치할 수 없는 보스라 보스만 반복하며, 키보드 이동은 마우스 값에 덮여 무시됩니다.bolt는 플레이어가 매 프레임 밀려 좌측 벽에 고정되고, 시작한 뒤에도 80% 검은 오버레이가 화면을 덮으며, 적을 만드는 호출이 없어 적이 나오지 않습니다.- 빈 폴더가 4개입니다. 테트리스 v1 과 달리
fn은 빠지고aw가 들어갔습니다.aw는 7분 17초 동안 생성했지만(요청 2회, 생성 토큰 21,474개) 파일을 하나도 만들지 못했습니다. 실행 기록에는 파일을 쓰는 도구 호출이 없고 응답에 HTML 코드 조각이 글자로 찍혀 있을 뿐입니다.c7·c7r·c1은 8~71초 만에 끝났고 생성 토큰은 153~1,496개였습니다. 원인은 분석하지 않았습니다. - 원작 에셋 복제는 0건입니다. 모든 결과물에서 이미지·오디오 파일은 0개이고 그림은 전부 Canvas 도형입니다.
bolt와q36은 화면 제목에 원작 이름의 한글 표기(변형 포함)를 썼지만 지시문의 게임 이름에서 온 것이라 감점하지 않았습니다. - 지시와 다르게 구현한 곳이 흔합니다. 「닿으면 게임 오버」를 HP 방식으로 푼
q38(HP 3)·orn(HP 5), 「가로 한 줄 웨이브」가 아닌orn·q36, 점수에 거리를 넣지 않은bolt·orn·q36등입니다. 이 점수는 1-2 에서 해당 항목만 깎았습니다. - 코드 품질이 높아도 돌아가는 게임은 아닙니다. 코드 리뷰 점수(2~6, 600점)는
q38522,ff502 인데 핵심 루프가 고장 난cn429,mcv440,bolt433 도 100점 이내 차이에 있습니다. 총점만 보고 「잘 돌아가는 게임」으로 읽지 말고 「플레이 가능?」 열을 총점과 함께 봐 주세요.
심사 기록 (PM 판단)
- 실행 불가는 1-1 을 0점으로 했습니다.
lfm·mg·mel은 게임 루프가 돌지 않아 루브릭 문구(「실행 불가면 1-1 은 0」)를 그대로 적용했습니다. QA 원점수는 각각 10, 30, 50점(로드·예외 항목을 관측대로 매긴 값)이었고, 이 차이만큼 총점이 내려갔습니다. - 1-3 게임성은 PM 이 QA 장면 스크린샷과 메모로 채점했습니다. 버그로 플레이할 수 없어 주입으로만 본 장면은 70% 상한을 적용했습니다(
cn·mg·mel). - 원작 에셋 복제 감점은 없습니다. 근거는 위와 같습니다.
- 입구별 시험(R1)이 적용된 사례:
q36은 「키보드 미지원」으로 0점 처리하지 않고, 키로 시작한 뒤의 키 조작은 정상이므로 1-1 의 ←/→ 항목에서 6점만 깎았습니다(100 → 94).cn은 마우스를 쓰면 키가 약해지는 정도라 3점을 깎았습니다(97). - 같은 결함은 한 번만 깎았습니다. 코드 리뷰는 루프 정지, 탄 판정 불능처럼 동작을 깨는 결함을 2~6 에서 다시 깎지 않고 1절의 몫으로 남겼습니다. 사운드가 없는 것도 1-3 에서만 반영했습니다.
해석 주의
- 표본은 모델당 1회(n=1)입니다. 같은 모델을 다시 돌리면 결과가 달라질 수 있습니다.
cn665,mcv653 처럼 작동하지 않는 게임이bolt604 와 한데 모인 구간은 순위보다 경향으로 읽어 주세요. - 코드 점수 600점이 총점의 6할입니다. 그래서 핵심 루프가 고장 난 게임도 600점을 넘었고, 실행 불가인
mg(560)·lfm(444)·mel(434)도 1-1 이 0점인데 434~560점을 받았습니다. - 1-3 은 PM 1인이 장면 스크린샷으로 채점했습니다. 조작감, 효과음, 실제 플레이의 재미는 점수에 반영되지 않은 부분이 있습니다.
시험의 한계
- 자동 시험이 시작 경로를 하나로 보아 오판할 수 있었습니다. 시작 입력(Enter·Space·클릭)과 조작 입력(키·마우스)을 새 페이지에서 따로 시험하는 개선 도구로 보완했고, 최종 판정은 QA 가 직접 실측했습니다. 예를 들어 개선 도구가
ff에서 낸 「클릭 뒤 키가 죽음」 판정은 직접 실측에서 재현되지 않았습니다. - 심사가 v2·v3 생성과 같은 시간대에 돌았습니다. 서버 부하를 줄이려고 헤드리스 Chrome 을 낮은 우선순위(
nice 19)로 한 번에 하나씩만 실행했고, 대회 자동 시험이 돌고 있으면 끝날 때까지 기다렸습니다. - 보스 처치 보상처럼 도달이 오래 걸리는 상태는 상태 주입이나 코드 확인으로 보았고, 주입한 방법과 70% 상한은 심사 기록에 근거로 남겼습니다.
9-2. 결과 — v2
채점 방식: v2(모바일 터치 조작 추가)는 1000점 루브릭이 v1 과 다릅니다. 영역 1(400점)이 v2 과제로 바뀌어 1-1 터치 조작 150, 1-2 모바일 화면 맞춤 100, 1-3 기존 기능 유지 100, 1-4 변경의 깔끔함 50 이고, 영역 2~6(코드 품질 600점)은 v2 시점의 전체 코드에 v1 과 같은 기준을 적용합니다. 1-1·1-2·1-3(350점)은 QA 리뷰어가 모바일 에뮬레이션(390×844 등, 터치 입력) 과 데스크톱 v1 ↔ v2 비교로 직접 실측했고, 1-4 와 2~6(650점)은 코드 리뷰어가 v1 → v2 변경분과 전체 코드를 읽고 채점했습니다. 이번 라운드에는 진행자(PM)가 채점하는 점수 항목은 없고, 아래 「심사 기록」의 규칙 R3 만 적용했습니다. 결과물은 A~O 로 익명 처리(블라인드)해 채점했고, 채점이 끝난 뒤 모델 이름을 공개했습니다.
품질 순위 (1000점)
열 머리의 1-1/150 은 「항목/만점」입니다. 1-1 터치 조작, 1-2 모바일 화면 맞춤, 1-3 기존 기능 유지, 1-4 변경의 깔끔함, 2 코드 간결성, 3 컴포넌트·모듈 분리, 4 패키지·의존성, 5 파일·경로, 6 README 입니다. 1-1 의 소수점(145.5)은 70% 상한 적용 때문입니다. 공동 순위는 총점이 같은 경우입니다. 「v1 → v2」 열은 루브릭이 달라 단순 뺄셈으로 읽으면 안 됩니다.
| 순위 | 모델 | 총점 | 1-1/150 | 1-2/100 | 1-3/100 | 1-4/50 | 2/200 | 3/150 | 4/100 | 5/100 | 6/50 | 터치로 플레이 가능? | 플레이 링크 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 (공동) | ff | 881 | 150 | 95 | 100 | 44 | 148 | 99 | 100 | 98 | 47 | 가능 — 터치 만점(끌기 이동·스크롤 방지·탭 시작/다시 시작), 회귀 없음, 오버레이·캔버스 탭 시작이 새로 가능해짐 | 열기 |
| 1 (공동) | q38 | 881 | 150 | 99 | 100 | 36 | 152 | 113 | 100 | 89 | 42 | 가능 — 터치 만점(1:1 상대 이동, 탭 즉시 다시 시작), 회귀 없음 | 열기 |
| 3 | orn | 868 | 150 | 87 | 100 | 38 | 148 | 109 | 100 | 98 | 38 | 가능 — 손가락을 정확히 따라감, 회귀 없음(캔버스가 CSS 로 좌우 압축됨) | 열기 |
| 4 | fn | 864 | 150 | 98 | 100 | 46 | 142 | 92 | 100 | 96 | 40 | 가능 — 터치 만점, 회귀 없음, 터치로 시작이 새로 가능해짐 | 열기 |
| 5 | mcv | 785 | 150 | 91 | 100 | 30 | 107 | 81 | 100 | 94 | 32 | 가능 — 터치 이동·시작은 만점, 게임 자체는 v1 부터 ←/→ 키 무반응·탄 미명중 | 열기 |
| 6 | cn | 774.5 | 145.5 | 100 | 100 | 33 | 96 | 77 | 100 | 90 | 33 | 가능 — 터치·화면 맞춤은 만점급, 게임 자체는 v1 부터 적이 한 번도 나오지 않음 | 열기 |
| 7 | aw | 756 | 150 | 100 | 47 | 20 | 140 | 60 | 100 | 95 | 44 | 가능 — 터치 만점, 단 사격·코인·보스가 없는 장애물 회피 게임 | 열기 |
| 8 | q36 | 709 | 110 | 85 | 100 | 15 | 96 | 79 | 100 | 92 | 32 | 부분 — 끄는 동안만 반쯤 따라오고 손을 떼면 시작 위치로 되돌아감, HUD 글자 작음 | 열기 |
| 9 | mg | 544 | 0 | 90 | 0 | 42 | 105 | 77 | 100 | 92 | 38 | 불가 — 제출 상태로 실행 불가(v1 부터), 터치 논리는 고친 사본에서만 확인 | 열기 |
| 10 | bolt | 467 | 0 | 67 | 0 | 3 | 106 | 69 | 100 | 90 | 32 | 불가 — v2 에서 변수를 중복 선언해 스크립트 전체가 실행되지 않음(v1 에서 되던 기능까지 회귀) | 열기 |
| 11 | lfm | 415 | 0 | 62 | 0 | 10 | 73 | 58 | 100 | 90 | 22 | 불가 — 제출 상태로 실행 불가(v1 부터), viewport 메타가 없어 40% 축소 렌더 | 열기 |
| 12 | mel | 405 | 0 | 45 | 0 | 8 | 85 | 55 | 100 | 90 | 22 | 불가 — 제출 상태로 실행 불가(v1 부터), 터치로 시작할 수 없고 터치 방향이 항상 왼쪽 | 열기 |
| 13 (공동) | c7r | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 파일 없음 | 제작 실패 |
| 13 (공동) | c7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 파일 없음 | 제작 실패 |
| 13 (공동) | c1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 파일 없음 | 제작 실패 |
실용 순위 (600점 이상, 소요 시간순)
1000점 순위와 별도로, 총점이 600점 이상인 8종만 소요 시간이 짧은 순서로 나열했습니다.
| 순위 | 모델 | 총점 | 제작 시간 | 요청 수 | 생성 토큰 |
|---|---|---|---|---|---|
| 1 | mcv | 785 | 1:15 | 9 | 1,722 |
| 2 | orn | 868 | 1:32 | 9 | 2,342 |
| 3 | aw | 756 | 2:34 | 8 | 8,412 |
| 4 | fn | 864 | 3:48 | 14 | 2,436 |
| 5 | q36 | 709 | 4:04 | 24 | 9,989 |
| 6 | cn | 774.5 | 4:21 | 30 | 6,899 |
| 7 | q38 | 881 | 5:55 | 15 | 4,327 |
| 8 | ff | 881 | 9:28 | 37 | 8,127 |
실용 순위 규칙(총점 600점 이상을 생성 시간순)은 그대로입니다. 다만 cn(적이 나오지 않음, v1 부터)·mcv(←/→ 무반응과 탄 미명중, v1 부터)·aw(v1 이 비어 v2 에서 새로 만든 회피 게임, 사격·코인·보스 없음)는 터치·화면 과제를 잘해 600점을 넘었지만 게임 자체는 불완전합니다.
- 이 표에서 가장 빨리 끝낸
mcv(1분 15초)와orn(1분 32초)은 기존 코드에 터치를 얹는 작업이라 v1 생성 시간(2분 48초, 4분 24초)보다 짧았습니다. 8종 모두 v1 보다 시간이 줄었습니다(ff11:51 → 9:28,q3813:57 → 5:55,fn33:21 → 3:48). ff는 요청 37회,cn은 30회,q36은 24회로 요청 수가 많은 편이었고,fn은 v1 의 378회에서 14회로 줄었습니다.
눈에 띈 점
ff와q38이 881점으로 공동 1위이고, 둘 다 터치 150/150 에 회귀가 없습니다.ff는 Pointer Events 로 마우스·터치·펜을 하나의 포인터 위치로 모으고 키를 누르면 포인터를 비워 키보드가 우선하게 했으며(코드 리뷰 536/650), 오버레이와 캔버스를 탭해도 시작·다시 시작이 되도록 입구를 늘렸습니다.q38도 Pointer Events 에setPointerCapture, 화면 스케일 변환을 갖췄습니다(532/650). 다만q38은 터치가player.x를 직접 바꿔 기존 이동 파이프라인(updatePlayer)을 우회하므로 키보드·마우스와 이동 로직을 공유하지 못해 1-4 가 36/50 입니다.- 터치 1-1 이 만점인 것은 6종(
ff·q38·orn·fn·mcv·aw)이고cn이 145.5점입니다. 코드 쪽에서 가장 모범으로 꼽힌 것은fn입니다. 마우스 좌표 계산을toCanvasX로 뽑아 공용으로 쓰고 터치를 같은mouseX·usingMouse채널에 실어, 기존 update 를 한 줄도 바꾸지 않았습니다. 1-4 변경의 깔끔함 46/50 으로 최고입니다. bolt는 v2 에서 유일하게 v1 보다 나빠진 회귀 사례입니다. 터치 변수touchActive·touchLastX를let으로 두 번 선언해SyntaxError가 났고, 스크립트가 통째로 실행되지 않아 v1 에서 되던 시작·자동 발사·적 출현·점수·게임 오버·다시 시작이 모두 사라졌습니다. QA 는 이 회귀를 1-3 에서 58점 깎았고(100 → 42), R3 적용 뒤에는 0점입니다. 터치 코드를 붙이면서 기존touch-action:none도 지웠습니다.- 터치 구현이 틀린 곳이 각각 다릅니다.
mel은 터치 방향을clientX < canvas.width/2로 판정하는데 화면 좌표를 캔버스 좌표(내부 폭 800)로 바꾸지 않아, 390 폭 폰에서는 항상 왼쪽으로만 갑니다(게다가 시작이 Enter·Space 뿐이라 터치로 시작도 못 합니다).q36은 터치 끌기가player.x를 직접 바꾸는데updatePlayer가mouseX(터치를 시작한 위치)로 매 프레임 끌어당겨, 끄는 동안 절반쯤 따라오다가 손을 떼면 시작 위치로 되돌아갑니다(이벤트만 보면 반응하지만 플레이어 x 는 끈 방향에 남지 않는 「반응 ≠ 동작」 사례).lfm은 viewport 메타가 없어 980px 레이아웃이 40% 로 축소되고(HUD 실효 7px), 터치 이동이 누적식이라 폭주합니다.mcv도 스케일을 반영하지 않지만 오차가 작습니다(390 폭에서 약 3.5%). aw는 v1 에서 파일을 하나도 만들지 못했지만 v2 에서 처음으로 게임을 만들었습니다. 시작 화면·마우스·자동 발사·코인·아이템·운석 경고·보스가 없는 장애물 회피 게임이고, 로드 즉시 시작해 몇 초 만에 장애물에 닿아 끝납니다. 터치와 화면 맞춤은 만점입니다(150, 100). v1 이 비어 있어 비교 대상이 없으므로 1-3 은 12개 기능 중 실제로 동작하는 것만 인정해 47점입니다.- v1 의 결함은 대부분 그대로입니다. 모델은 무엇이 틀렸는지 모른 채 터치만 얹었습니다.
cn은 시간 계산 오류로 적·운석·보스가 나오지 않고 점수가 −17,922,409,131 로 표시되는 상태 그대로이고,mcv는 ←/→ 키가 마우스 값에 덮여 무반응인 채이며,bolt의 플레이어 x=0 고정,mg·lfm·mel의 실행 불능도 v1 부터 이어졌습니다. 고쳐진 것은ff의 오버레이·캔버스 탭/클릭 시작과fn의 터치 시작 정도인데, 이는 터치 과제에 따라 시작 입구가 늘어난 부수 효과입니다. - 모범 설계와 흔한 흠이 갈렸습니다. 입력을 하나의 포인터 위치로 모은
ff, 공용 좌표 함수를 뽑은fn,pointerType으로 터치를 분리한q38이 좋은 쪽입니다. 반대로 화면 좌표를 캔버스 좌표로 바꾸지 않은lfm·mcv·mel, 터치 안에서 두 경로가 충돌한q36이 흠이었고, 캔버스를 CSS 로 좌우 압축하는orn의 v1 코드(종횡비 0.46 대 0.60)도 남았습니다. - README 가 실제 동작과 어긋난 곳이 많습니다.
cn은 마우스를 「클릭 후 드래그」라 적었지만 코드는 누르지 않아도 따라가고 터치 절도 두 번 반복되며,q36은 「드래그 거리만큼 이동, 손을 떼면 멈춤」이라 적었지만 코드는 손을 뗀 뒤 시작점으로 되돌아가고,orn은 「손가락을 놓으면 현재 위치에 멈춥니다」라 적었지만 코드는 레인 중심으로 스냅하고,q38은 마우스 이동을 「포인터 위치를 따라 이동」이라 적었지만 누른 채 끌어야 따라오며 「고정 스텝」도 실제로는 가변 dt 입니다.fn은 조작 표의 열이 깨져 있고,lfm·mcv·mel은 없는 기능을 서술했습니다.
v1 → v2 변화
v1 순위·총점은 위 9절, v2 는 위 표입니다. 두 라운드의 루브릭이 달라 점수 차이는 「이 과제에서 얼마나 잘 했나」의 변화이지 같은 잣대의 증감이 아닙니다.
| 모델 | v1 순위 / 총점 | v2 순위 / 총점 | 변화 | 한 줄 이유 |
|---|---|---|---|---|
ff | 2위 / 871 | 공동 1위 / 881 | +10 | 터치 만점(Pointer Events 로 마우스·터치·펜을 통합), 회귀 없음, 오버레이·캔버스 탭 시작이 추가됨 |
q38 | 1위 / 903 | 공동 1위 / 881 | −22 | 터치 만점·회귀 없음, 이동이 기존 update 를 우회해 1-4 는 36, v2 루브릭에는 게임성 항목이 없음 |
orn | 3위 / 838 | 3위 / 868 | +30 | 손가락을 정확히 따라가고 회귀 없음, 캔버스 좌우 압축은 v1 코드 그대로 |
fn | 4위 / 828 | 4위 / 864 | +36 | 기존 코드를 거의 건드리지 않고 터치를 얹어 1-4 최고, 터치 시작이 새로 가능해짐 |
mcv | 7위 / 653 | 5위 / 785 | +132 | 터치·화면 맞춤 양호, ←/→ 무반응과 탄 미명중은 v1 부터 그대로 |
cn | 6위 / 665 | 6위 / 774.5 | +109.5 | 터치·화면 맞춤은 만점급, 적이 나오지 않는 v1 결함은 그대로 |
aw | 공동 12위 / 0 | 7위 / 756 | +756 | v1 에서 파일 0개였다가 v2 에서 처음 게임을 만듦(사격·코인·보스 없는 회피 게임) |
q36 | 5위 / 787 | 8위 / 709 | −78 | 터치 끌기가 손을 떼면 시작 위치로 되돌아가고 HUD 글자가 작아짐 |
mg | 9위 / 560 | 9위 / 544 | −16 | v1 부터 실행 불가, 규칙 R3 로 실측 0 |
bolt | 8위 / 604 | 10위 / 467 | −137 | 변수 중복 선언 문법 오류로 스크립트 전체가 죽음 — 유일한 회귀 |
lfm | 10위 / 444 | 11위 / 415 | −29 | v1 부터 실행 불가, 규칙 R3 로 실측 0 |
mel | 11위 / 434 | 12위 / 405 | −29 | v1 부터 실행 불가, 규칙 R3 로 실측 0 |
c7r | 공동 12위 / 0 | 공동 13위 / 0 | 0 | v2 에서도 파일 없음(생성 토큰 57개) |
c7 | 공동 12위 / 0 | 공동 13위 / 0 | 0 | v2 에서도 파일 없음(생성 토큰 907개) |
c1 | 공동 12위 / 0 | 공동 13위 / 0 | 0 | v2 에서도 파일 없음(생성 토큰 336개) |
심사 기록 (PM 판단)
- 규칙 R3 신설 — 제출 상태로 게임 루프가 돌지 않으면 그 라운드의 실측 항목(1-1 터치, 1-3 유지)은 0점입니다. 같은 시험 v1 의 「실행 불가면 1-1 은 0」, 테트리스 v3 의 「실행이 안 되면 실측 항목은 0」과 같은 기준을 전 엔트리에 적용했습니다. R3 는 v3 루브릭에는 처음부터 들어갑니다.
- 신설 이유(투명성 기록): v2 루브릭에 이 문장이 빠져 있었습니다. 그래서 QA 는 문구대로 「v1 에서 이미 깎인 결함을 v2 의 1-3 에서 다시 깎지 않는다」를 적용했고, v1 부터 죽어 있던 게임(
mg·lfm·mel)에 기존 기능 유지 만점(1-3 100)을 주었으며, 터치는 최소 수정으로 살린 사본에서 재서 70% 상한으로 인정했습니다. PM 은 「재감점 금지」가 부분 결함을 위한 원칙이지 실행 불가인 게임을 만점으로 만들자는 뜻이 아니라고 보고 R3 를 정했고, 해당 4개의 실측 1-1·1-3 을 0 으로 했습니다. QA 원점수는 심사 기록에 그대로 보존했습니다.
| 모델 | 실행 불가 사유 | QA 원점수 1-1 | QA 원점수 1-3 | 총점 변화 |
|---|---|---|---|---|
mg | v1 부터 로드 직후 TypeError 로 루프 사망 | 114 | 100 | −214 |
bolt | v2 에서 touchActive 중복 선언 SyntaxError, 스크립트 전체 미실행 | 45 | 42 | −87 |
lfm | v1 부터 const dt 재대입 TypeError 로 루프 사망 | 84 | 100 | −184 |
mel | Enter·Space 로만 시작하고 시작 뒤 requestAnimationFrame 재등록이 없어 루프 정지 | 56.1 | 100 | −156.1 |
- R3 의 범위: 루프가 돌지 않는 게임에만 적용합니다.
cn(적이 나오지 않음)과mcv(키 무반응)는 루프가 돌아 R3 에 해당하지 않으므로, v1 결함을 1-3 에서 다시 깎지 않는 원래 원칙대로 1-3 이 100점입니다. aw의 1-3(47점): v1 이 빈 폴더라 비교 대상이 없어서, v1 기준 기능 12개 중 v2 에서 실제로 동작하는 것만 인정했습니다. QA 의 판단을 유지했습니다.- 코드 품질 2~6: 라운드마다 그 시점의 전체 코드를 따로 채점하므로 v1 의 결함도 반영됩니다. 테트리스부터의 기준을 유지했습니다. 다만 같은 결함은 한 번만 깎아, v2 변경이 원인인
bolt의 문법 오류는 1-4 에서만 깎았습니다.
해석 주의
- 표본은 모델당 1회(n=1)입니다.
ff와q38의 동점 881,mcv785 와cn774.5 처럼 가까운 구간은 순위보다 경향으로 읽어 주세요. - v2 총점은 「터치를 얼마나 잘 붙였나」를 크게 봅니다. 그래서 적이 나오지 않는
cn, 사격이 없는aw도 높은 점수를 받았습니다. 총점만 보고 「완성된 게임」으로 읽지 말고 「터치로 플레이 가능?」 열을 총점과 함께 봐 주세요. - 1-3 은 v1 대비 회귀만 깎습니다. v1 부터 안 되던 것은 다시 깎지 않으므로(R3 해당 제외) 게임이 불완전해도 1-3 이 만점일 수 있습니다.
- 루브릭이 v1 과 다릅니다. v1 에는 있던 게임성(연출, 효과음) 항목이 v2 에는 없어서
q38처럼 v1 에서 연출로 높았던 모델의 점수가 내려가 보입니다.
시험의 한계
- 당겨서 새로고침은 에뮬레이션할 수 없어
touch-action·overscroll-behavior·preventDefault코드로만 판정했습니다. 1-1 의 「스크롤·확대·당겨 새로고침 방지」 30점 중 일부는 이 코드 근거입니다. - 플레이어 x 는 게임 상태를 읽어 측정했습니다. 자동 시험의 픽셀 프로브 휴리스틱을 쓰지 않았습니다.
- 자동 시험 휴리스틱과 실측이 달랐던 곳: 자동 시험은
aw·q36의 ←/→ 키 이동을 「판정 안 됨」으로,q36·orn의 터치 끌기를 「판정 안 됨」으로 읽었으나 실측에서는 작동했습니다(q36은 부분 점수).cn은 「touch-action:none 아니오」로 읽혔지만 body 에서 상속되어 실제로는 적용됐고, 점수가 −17,922,409,131 로 표시돼 정규식이 숫자를 읽지 못했습니다.bolt·mg·lfm·mel의 「시작 아니오·예외」는 실측과 일치했습니다. - 미관측 항목은 코드 동일로 인정했습니다. 코인·아이템·운석·보스처럼 22초 안팎의 플레이로 다 보지 못한 항목은 v1 → v2 변경분이 그 규칙 코드를 건드리지 않았음을 확인해 회귀 없음으로 인정했습니다.
- 헤드리스 Chrome(GPU 없음)이라 프레임 속도와 터치 지연은 평가하지 않았고, 실제 폰(iOS 주소창 접힘, 러버밴드 등)과는 다릅니다. 고친 사본으로 잰
mg·bolt·lfm·mel의 터치 논리는 70% 상한이 적용됐던 값이며, R3 로 점수에서는 0 이 됐습니다. 심사는 다른 대회의 자동 시험과 겹치지 않도록 Chrome 을 낮은 우선순위(nice 19)로 한 번에 하나씩 실행했습니다.
9-3. 결과 — v3
채점 방식: v3(스테이지·크레딧·컨티뉴 도입)는 영역 1(400점)이 v3 과제로 바뀌어 1-1 스테이지 100, 1-2 크레딧 100, 1-3 컨티뉴 100, 1-4 게임 흐름 50, 1-5 기존 기능 유지 50 이고, 영역 2~6(코드 품질 600점)은 v3 시점의 전체 코드에 같은 기준을 적용합니다. 영역 1(400점)은 QA 리뷰어가 데스크톱과 모바일 터치(390×844 에뮬레이션)에서 직접 실측했고, 줄 삭제처럼 도달이 오래 걸리는 상태(보스 체력, 게임 오버 등)는 상태를 주입해 확인하며 방법을 근거에 적었습니다. 영역 2~6(600점)은 코드 리뷰어가 채점했습니다. 이번 라운드에는 진행자(PM)가 채점하는 점수 항목은 없고, 아래 「심사 기록」의 조정 2건만 있습니다. 결과물은 A~O 로 익명 처리(블라인드)해 채점했고, 채점이 끝난 뒤 모델 이름을 공개했습니다.
품질 순위 (1000점)
열 머리의 1-1/100 은 「항목/만점」입니다. 1-1 스테이지, 1-2 크레딧, 1-3 컨티뉴, 1-4 게임 흐름, 1-5 기존 기능 유지, 2 코드 간결성, 3 컴포넌트·모듈 분리, 4 패키지·의존성, 5 파일·경로, 6 README 입니다. 「완주?」는 크레딧 → 시작 → 컨티뉴 → 타이틀의 흐름이 QA 실측에서 끝까지 이어졌는지를 본 판정입니다. 공동 순위는 총점이 같은 경우입니다. 「v2 → v3」 열은 루브릭이 달라 단순 뺄셈으로 읽으면 안 됩니다.
| 순위 | 모델 | 총점 | 1-1/100 | 1-2/100 | 1-3/100 | 1-4/50 | 1-5/50 | 2/200 | 3/150 | 4/100 | 5/100 | 6/50 | 크레딧 → 시작 → 컨티뉴 → 타이틀 완주? | v2 → v3 총점 | 플레이 링크 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | q38 | 900 | 100 | 88 | 100 | 50 | 50 | 163 | 117 | 100 | 88 | 44 | 완주 — 두 바퀴 통과(데스크톱·모바일), 컨티뉴 때 체력 회복·무적·필드 정리. 흠: 플레이 HUD·컨티뉴 화면에 남은 크레딧이 없음 | 881 → 900 | 열기 |
| 2 | fn | 818 | 100 | 76 | 87 | 50 | 50 | 136 | 94 | 100 | 95 | 30 | 완주 — 두 바퀴 통과. 단 클릭·탭이 코인 투입과 시작·이어하기를 겸해 크레딧이 줄지 않는 무료 반복(게이트 우회), 모바일 탭 1회에 +2 | 864 → 818 | 열기 |
| 3 | ff | 800 | 100 | 84 | 75 | 15 | 50 | 141 | 102 | 100 | 97 | 36 | 부분 — 시작·컨티뉴(점수·스테이지 유지)까지 정상이나 카운트다운이 0 이 돼도 타이틀로 돌아가지 않아 한 바퀴를 못 닫음. START 가 코인을 먼저 넣고, 코인 버튼 1탭에 +2 | 881 → 800 | 열기 |
| 4 | orn | 774 | 98 | 46 | 85 | 45 | 50 | 126 | 103 | 100 | 97 | 24 | 부분 — 흐름은 돌지만 시작에 크레딧 게이트가 없고 이어 하기 뒤 체력 0·필드 미정리로 1.5~4.5초 안에 재사망 | 868 → 774 | 열기 |
| 5 | aw | 756 | 72 | 95 | 63 | 40 | 50 | 134 | 78 | 96 | 88 | 40 | 부분 — 컨티뉴가 장애물을 비우지 않아 즉시 재사망, 스테이지 HUD 숫자가 안 바뀌고 보스에게 줄 공격 수단이 없음 | 756 → 756 | 열기 |
| 6 | q36 | 707 | 98 | 54 | 80 | 40 | 44 | 97 | 79 | 95 | 88 | 32 | 부분 — Space·Enter 한 번이 코인 투입과 시작을 겸해 게이트 없음, 게임 오버 화면은 무기한 대기, 별 배경 초기화 삭제로 매 시작마다 예외(v2 대비 회귀) | 709 → 707 | 열기 |
| 7 | mcv | 647 | 53 | 85 | 50 | 35 | 47 | 89 | 80 | 95 | 93 | 20 | 불가 — 탄 판정이 NaN(v1 부터)이라 보스 처치·스테이지 상승·코인 불가, 컨티뉴에 재개 코드 없음 | 785 → 647 | 열기 |
| 8 | cn | 589 | 8 | 80 | 53 | 25 | 42 | 99 | 82 | 96 | 86 | 18 | 불가 — 시간 계산 오류(v1 부터)로 적이 영구히 나오지 않아 정상 플레이로 게임 오버에 닿지 못함 | 774.5 → 589 | 열기 |
| 9 | mg | 384 | 0 | 0 | 0 | 0 | 0 | 94 | 69 | 93 | 88 | 40 | 불가 — 첫 프레임 예외로 루프 사망(v1 부터), 실행 불가 | 544 → 384 | 열기 |
| 10 (공동) | lfm | 337 | 0 | 0 | 0 | 0 | 0 | 81 | 60 | 93 | 88 | 15 | 불가 — const 재대입 예외(v1 부터), 로드 때부터 오버레이가 캔버스를 덮고 코인 투입 수단 없음 | 415 → 337 | 열기 |
| 10 (공동) | bolt | 337 | 0 | 0 | 0 | 0 | 0 | 80 | 64 | 93 | 88 | 12 | 불가 — touchActive 중복 선언 문법 오류(v2 부터)로 스크립트 전체 미실행, 크레딧 투입 경로 자체가 없음 | 467 → 337 | 열기 |
| 12 | mel | 316 | 0 | 0 | 0 | 0 | 0 | 70 | 58 | 90 | 86 | 12 | 불가 — 시작해도 루프가 돌지 않음(v1 부터), 스테이지·보스 코드 없음 | 405 → 316 | 열기 |
| 13 (공동) | c7r | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 파일 없음 | 0 → 0 | 제작 실패 |
| 13 (공동) | c7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 파일 없음 | 0 → 0 | 제작 실패 |
| 13 (공동) | c1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 파일 없음 | 0 → 0 | 제작 실패 |
실용 순위 (600점 이상, 소요 시간순)
1000점 순위와 별도로, 총점이 600점 이상인 7종만 소요 시간이 짧은 순서로 나열했습니다.
| 순위 | 모델 | 총점 | 제작 시간 | 요청 수 | 생성 토큰 |
|---|---|---|---|---|---|
| 1 | mcv | 647 | 4:41 | 9 | 11,030 |
| 2 | q36 | 707 | 5:34 | 13 | 17,864 |
| 3 | orn | 774 | 5:55 | 51 | 14,318 |
| 4 | aw | 756 | 7:04 | 6 | 21,519 |
| 5 | fn | 818 | 15:53 | 46 | 16,575 |
| 6 | ff | 800 | 16:57 | 34 | 18,358 |
| 7 | q38 | 900 | 20:53 | 55 | 19,024 |
실용 순위 규칙(총점 600점 이상을 생성 시간순)은 그대로입니다. 다만 mcv 는 탄 판정이 NaN 이라 보스 처치·스테이지 상승·코인이 불가능한 채로(mcv 의 이 결함은 v1 부터 이어짐) 크레딧·컨티뉴 과제 점수만으로 600점을 넘었습니다. 크레딧 → 시작 → 컨티뉴 → 타이틀 흐름을 두 바퀴 끝까지 완주한 것은 q38·fn 이고(orn 은 흐름은 돌지만 크레딧 게이트가 없습니다), 나머지는 어딘가에서 끊깁니다.
- 가장 빨리 끝낸
mcv(4분 41초)는 위 이유로 완성된 게임이 아닙니다. 600점 이상 가운데 최고점q38은 20분 53초(요청 55회)로 가장 오래 걸렸고,ff는 16분 57초,fn은 15분 53초였습니다. - 7종 모두 v2 보다 시간이 늘었습니다(
q385:55 → 20:53,ff9:28 → 16:57,fn3:48 → 15:53). 스테이지·크레딧·컨티뉴처럼 한 번에 얹을 기능이 많은 과제였기 때문으로 보입니다.
눈에 띈 점
q38이 900점으로 1위이고, 요구한 흐름을 두 바퀴 끝까지 돌렸습니다. 스테이지 100, 컨티뉴 100, 흐름 50, 유지 50 이 모두 만점이고 코드 리뷰도 512/600 으로 1위입니다. 상태 전이를startGame·continueGame·gameOver·backToTitle네 함수에 모았고, 컨티뉴 때 체력을 회복시키고 무적 2.5초를 주며 필드를 정리해서 이어 한 뒤 7초 안에 다시 죽는 일이 없었습니다. 크레딧 0 에서는 Enter·Space 로 시작할 수 없고 클릭은 코인 투입으로만 동작합니다. 흠은 플레이 중 HUD 와 컨티뉴 화면에 남은 크레딧이 보이지 않는다는 점(README 는 「플레이 중에도 확인 가능」)이고, 컨티뉴 화면에서는 터치로 코인을 더 넣을 수 없으며, 크레딧 카운터와 게임 속 코인 카운터가 같은 금색 코인 아이콘이라 구분이 약합니다(1-2d 18/25).- 크레딧 게이트를 우회하는 설계가 여럿입니다.
fn은 클릭·탭이 코인 투입과 시작·이어하기를 겸해서 크레딧 3 에서 시작해도 3 이 그대로(무료 반복)입니다.ff는 START 를 누르면 pointerdown 이 코인을 먼저 넣고 시작해서 크레딧 0 에서도 시작됩니다.q36은 타이틀의 Space·Enter 한 번이 코인 투입과 시작을 한꺼번에 해서 어느 크레딧에서든 시작됩니다.orn은 시작에 크레딧 검사도 차감도 없습니다. 모두 테트리스 v3 의 「코인 + 시작 일체」와 같은 결함입니다. - 크레딧이 한 번에 2씩 오르는 엔트리가 둘 있습니다.
ff의 「코인 넣기」 버튼은 pointerdown 이 타이틀 화면으로 버블링되고 click 에서 한 번 더 처리되어 1회 누름에 +2 이고,fn은 모바일에서 touchstart 와 합성 click 이 둘 다 코인을 넣어 탭 1회에 +2 입니다. ff는 컨티뉴 카운트다운이 0 이 돼도 타이틀로 돌아가지 않습니다. 타이머가 −4초까지 내려가도 아무 코드도 타이틀로 보내지 않아, 크레딧이 없거나 시간이 지나면 컨티뉴 화면에서 영구히 멈추고 새로고침 말고는 빠져나올 수 없습니다(1-3c 0/25, 흐름 15/50). 이어 하기 자체는 점수·스테이지 유지와 필드 정리까지 정상이라, v2 공동 1위(881)에서 3위(800)로 내려온 큰 이유입니다.- 컨티뉴 직후 곧바로 죽는 엔트리가 있습니다.
orn은 이어 하기 뒤 체력 0 과 정리되지 않은 필드로 재개해 1.5~4.5초 뒤 다시 죽고,aw는 장애물을 비우지 않아 0ms 만에 재사망합니다.aw는 스테이지가 올라도 HUD 의 「Stage」 숫자가 그대로(배너만 바뀜)이고, 보스에게 줄 공격 수단 없이 5초 생존을 「격파」로 칩니다. mcv와cn은 v1 의 결함을 그대로 안은 채 새 기능을 얹었습니다.mcv는 플레이어 탄에 크기가 없어 어떤 적도 맞히지 못합니다(보스 처치·스테이지 상승·코인·아이템 불가, 보스만 반복, 키보드 이동도 무효, 컨티뉴에는 재개 코드가 없음). 이 때문에 스테이지 항목은 충돌 판정 함수를 런타임에서 고쳐야만 확인되어 70% 상한이 걸렸습니다(1-1 53/100).cn은 시간 기준 혼용(Date.now()와requestAnimationFrame시각)으로 첫 프레임 deltaTime 이 −1.8e12 가 되어 적·운석이 영원히 나오지 않고 점수가 −17,922,512,640 에서 시작합니다. 정상 플레이로는 게임 오버에 닿지 못해 컨티뉴는 적을 플레이어 위에 주입해서만 확인되었고, 스테이지 상승은 주입으로도 되지 않았습니다(1-1 8/100).- 실행 불가 4종(
mg·lfm·bolt·mel)은 모두 v2 이전부터 있던 결함을 고치지 않은 결과입니다.mg는 첫 프레임에서 별 목록을 순회하다 예외가 나는 v1 결함(stars is not iterable),lfm은const dt재대입 예외(v1 부터)에 더해 로드 때부터 오버레이가 캔버스를 덮고 코인 투입 수단이 없으며,bolt는 v2 에서 생긴touchActive중복 선언 문법 오류를 그대로 둔 채 크레딧 투입 경로도 만들지 못했고,mel은 시작해도 루프가 돌지 않는 v1 결함이 이어졌습니다(스테이지·보스 코드도 없음). QA 가 네 개 모두 rAF 콜백이 초당 0회임을 직접 쟀고, R3 로 실측 항목은 0점입니다.mel은 이번 라운드에 생성 토큰 46,404개(15종 중 최다)와 13분 20초를 쓰고도 실행되지 않았습니다. - 이전 라운드의 치명 결함을 스스로 고친 사례는 없습니다. 모델은 무엇이 틀렸는지 모른 채 새 기능만 덧붙였습니다. 실행 불가 4종은 그대로였고,
ff·fn이 꾸준히 상위에 있는 것은 v1·v2 에서 기본 게임이 돌았기 때문입니다.
v2 → v3 변화
v2 순위·총점은 9-2절, v3 는 위 표입니다. 두 라운드의 루브릭이 달라 점수 차이는 「이 과제에서 얼마나 잘 했나」의 변화이지 같은 잣대의 증감이 아닙니다.
| 모델 | v2 순위 / 총점 | v3 순위 / 총점 | 변화 | 한 줄 이유 |
|---|---|---|---|---|
q38 | 공동 1위 / 881 | 1위 / 900 | +19 | 요구한 흐름을 두 바퀴 완주, 상태 전이를 한 곳에 모으고 컨티뉴 때 필드를 정리해 무적을 줌 |
fn | 4위 / 864 | 2위 / 818 | −46 | 두 바퀴 완주하나 클릭이 코인 투입과 시작을 겸해 게이트를 우회, 모바일 탭 +2 |
ff | 공동 1위 / 881 | 3위 / 800 | −81 | 컨티뉴까지 정상이나 카운트다운이 0 이 돼도 타이틀로 안 가 한 바퀴를 못 닫음, START 가 코인을 먼저 넣음 |
orn | 3위 / 868 | 4위 / 774 | −94 | 크레딧 게이트가 없고 이어 하기 뒤 체력 0 으로 재개해 곧 재사망 |
aw | 7위 / 756 | 5위 / 756 | 0 | 컨티뉴가 장애물을 비우지 않아 즉시 재사망, 스테이지·보스 구현이 얕음(총점은 우연히 같음) |
q36 | 8위 / 709 | 6위 / 707 | −2 | Space·Enter 가 코인+시작 일체(게이트 우회), 별 배경 초기화 삭제 회귀 |
mcv | 5위 / 785 | 7위 / 647 | −138 | 탄 판정 NaN(v1 부터)이라 보스 처치·스테이지 상승 불가 |
cn | 6위 / 774.5 | 8위 / 589 | −185.5 | 적이 나오지 않는 v1 결함 그대로, 컨티뉴는 주입으로만 확인 |
mg | 9위 / 544 | 9위 / 384 | −160 | v1 부터 실행 불가, 이번에는 새 기능 400점이 통째로 0 |
lfm | 11위 / 415 | 공동 10위 / 337 | −78 | v1 부터 실행 불가, 코인 투입 수단도 없음 |
bolt | 10위 / 467 | 공동 10위 / 337 | −130 | v2 의 문법 오류를 그대로 둠, 크레딧 투입 경로도 없음 |
mel | 12위 / 405 | 12위 / 316 | −89 | v1 부터 실행 불가, 스테이지·보스 코드도 없음 |
c7r | 공동 13위 / 0 | 공동 13위 / 0 | 0 | v3 에서도 파일 없음(생성 토큰 1,130개) |
c7 | 공동 13위 / 0 | 공동 13위 / 0 | 0 | v3 에서도 파일 없음(생성 토큰 1,074개) |
c1 | 공동 13위 / 0 | 공동 13위 / 0 | 0 | v3 에서도 파일 없음(생성 토큰 126개) |
심사 기록 (PM 판단)
- R1 일관 적용 — 시작 동작이 코인을 대신 넣으면 크레딧 게이트가 무의미합니다. 타이틀의 Space·Enter 가 코인 투입과 시작을 겸하는
q36, START 의 pointerdown 이 코인을 먼저 넣는ff, 클릭·탭이 코인 투입과 시작·이어하기를 겸하는fn을 모두 게이트 우회로 보고 1-2b(크레딧 0 시작 불가·시작 −1)를 최대 18점으로 했습니다. 테트리스 v3 의 「코인 + 시작 일체」 판정과 같은 기준입니다. QA 는q36에만 적용하고ff·fn을 경계 사례로 두었기에(코인 투입 없이 시작되는 경로는 못 찾았다는 이유) PM 이 일관되게 맞췄습니다.ff는 26 → 18 (−8),fn은 20 → 18 (−2) 이고, 순위는 바뀌지 않습니다. QA 원점수는 심사 기록에 그대로 보존했습니다. - R3 — 제출 상태로 루프가 돌지 않으면 실측 항목은 0 입니다.
mg·lfm·bolt·mel은 로드·시작 뒤에도 장면이 진행되지 않음을 QA 가 rAF 콜백 0/s 로 직접 측정했습니다. 고친 사본에서 잰 값은 참고로만 남겼고 점수에는 넣지 않았습니다(예:mg는 한 줄을 고치면 정상 시작하고 크레딧·스테이지·컨티뉴가 동작하지만 컨티뉴 직후 곧바로 다시 죽음). 이 규칙은 v2 에서 신설한 R3 를 v3 루브릭에 처음부터 넣은 것입니다. - QA 가 적용한 규칙: R1(
q36), R2(mcv의 스테이지 항목과cn의 컨티뉴 항목은 주입으로만 확인해 70% 상한). 코드로만 확인한 항목은 70% 이하입니다. - 같은 결함은 한 번만 깎았습니다. 코인 버튼 이중 투입(
ff·fn)은 1-2a 에서만,q36의initStars삭제 회귀는 1-5 에서만, v2 부터 있던mcv의 탄 판정 NaN 과cn의 시간 오류는 1-5 에서 다시 깎지 않고 영향이 나타나는 1-1·1-3·1-4 에서만 반영했습니다.
해석 주의
- 표본은 모델당 1회(n=1)입니다.
lfm과bolt의 동점 337,mcv647 과cn589 처럼 가까운 구간은 순위보다 경향으로 읽어 주세요. - v3 총점은 새 기능을 크게 봅니다. 1-1~1-4(스테이지·크레딧·컨티뉴·흐름)가 350점이어서, 이어 하기는 잘 되는데 타이틀로 돌아오는 길이 없는
ff가 흐름 항목에서 크게 깎였습니다. 총점만 보고 「완성된 게임」으로 읽지 말고 「완주?」 열을 총점과 함께 봐 주세요. 7위mcv는 보스를 쓰러뜨릴 수 없는 게임입니다. - 실행 불가 4종은 코드 점수만으로 316~384점을 받았습니다. 실측 400점이 모두 0 인데도 이 점수가 나오는 것은 코드 품질 600점이 별도로 채점되기 때문입니다.
- 코드 품질 2~6 은 라운드마다 그 시점의 전체 코드로 채점합니다. v1 이나 v2 부터 있던 결함도 지금 코드에 있으면 반영됩니다.
시험의 한계
- 원래 흐름 자동 시험 도구에 결함이 있었습니다. 도움말에 「컨티뉴」 낱말만 있어도 게임 오버 감지가 꺼지는 문제입니다. 그래서 개선판(flow-v2)을 추가로 돌려 게임 오버 → 컨티뉴 → 카운트다운 → 타이틀 판정의 참고로 썼습니다. 둘 다 휴리스틱이며 점수는 QA 의 직접 실측으로 매겼습니다.
- 개선판도 오판했습니다.
aw와cn을 「시작 안 됨」(game never started)으로 읽었지만 두 게임 모두 실제로는 시작됩니다. QA 가 실측으로 바로잡았습니다. 두 도구의 판정이 엇갈린fn의 「이어 하기 뒤 점수·스테이지 유지」도 실측에서는 유지가 맞았습니다. - 상태 주입(거리, 보스 체력, 플레이어 체력, 적 위치)은 시간을 줄이려는 용도로 썼고, 자연 플레이로 도달할 수 있는 상태는 70% 상한을 두지 않았습니다. 사운드와 장시간 자연 플레이의 보스 도달은 평가하지 않았습니다.
- 터치는 Chrome 의 터치 에뮬레이션(390×844)이라 실제 폰과 다를 수 있습니다. 심사는 서버 부하를 줄이려고 Chrome 을 낮은 우선순위(
nice 19)로 한 번에 하나씩 실행했고, 대회 자동 시험이 돌고 있으면 끝날 때까지 기다렸습니다.
10. 드래곤플라이트 종합 — v1 → v2 → v3 (완결)
세 라운드의 총점 평균으로 종합 순위를 냅니다. 테트리스와 같은 기준(종합 순위 = 3라운드 평균, 진행자(PM)가 정한 기준)입니다. 라운드마다 루브릭이 다르므로(v1 은 코드 품질 600점, v2 는 터치 실측 350점, v3 는 새 기능 실측 400점) 평균은 「세 과제를 두루 잘 했나」를 보는 값이지 한 잣대의 누적이 아닙니다.
| 종합 순위 | 모델 | v1 | v2 | v3 | 3라운드 평균 | 추세 |
|---|---|---|---|---|---|---|
| 1 | q38 | 903 | 881 | 900 | 894.7 | 고르게 유지 |
| 2 | ff | 871 | 881 | 800 | 850.7 | 상승 후 하락 |
| 3 | fn | 828 | 864 | 818 | 836.7 | 상승 후 하락 |
| 4 | orn | 838 | 868 | 774 | 826.7 | 상승 후 하락 |
| 5 | q36 | 787 | 709 | 707 | 734.3 | 계속 하락 |
| 6 | mcv | 653 | 785 | 647 | 695 | 상승 후 하락 |
| 7 | cn | 665 | 774.5 | 589 | 676.2 | 상승 후 하락 |
| 8 | aw | 0 | 756 | 756 | 504 | v2 부터 유지 |
| 9 | mg | 560 | 544 | 384 | 496 | 계속 하락 |
| 10 | bolt | 604 | 467 | 337 | 469.3 | 계속 하락 |
| 11 | lfm | 444 | 415 | 337 | 398.7 | 계속 하락 |
| 12 | mel | 434 | 405 | 316 | 385 | 계속 하락 |
| 13 (공동) | c7r | 0 | 0 | 0 | 0 | 계속 0 (파일 없음) |
| 13 (공동) | c7 | 0 | 0 | 0 | 0 | 계속 0 (파일 없음) |
| 13 (공동) | c1 | 0 | 0 | 0 | 0 | 계속 0 (파일 없음) |
q38은 세 라운드 모두 최상위권입니다(903 → 881 → 900). 테트리스 종합 2위에 이어 드래곤플라이트 종합 1위입니다(라운드 순위는 테트리스 4위 → 3위 → 공동 3위, 드래곤플라이트 1위 → 공동 1위 → 1위).ff는 테트리스 종합 1위, 드래곤플라이트 종합 2위입니다.fn은 테트리스 v1 의 0점(파일 없음)에서 드래곤플라이트 종합 3위가 됐습니다. 정해진 규칙이 있는 슈팅 게임에서는 세 라운드 모두 4위 안(828 → 864 → 818)에 들었고, 평균은 836.7 입니다. 반면 같은 모델이 테트리스 종합에서는 9위였습니다.aw는 v1 에서 7분 넘게 생성하고도 파일 0개(0점)였지만 v2·v3 에서 756점을 받았습니다(두 라운드의 총점이 우연히 같습니다). 다만 사격·코인·보스가 없는 회피 게임에서 출발했고, 평균은 504.0 으로 종합 8위입니다.- 실행 불가 결함은 피드백 없이는 끝까지 고쳐지지 않았습니다.
mg(첫 프레임 예외),lfm(const재대입),mel(루프 없음)은 세 라운드 내내 같은 결함으로 실행되지 않았고,bolt는 v2 에서 만든 문법 오류를 v3 에서도 그대로 두었습니다. 이 네 모델은 점수가 라운드마다 내려가 종합 9~12위입니다. - 생성 시간은 품질과 약하게만 이어집니다. v3 에서는
q38이 20분 53초로 가장 오래 걸렸고(최고점이기도 합니다), 세 라운드 합계로는fn53분(v1 에서만 33분),q3841분,ff38분 순입니다. 그러나mel은 v3 에서 13분 20초와 가장 많은 생성 토큰을 쓰고도 실행되지 않았습니다.
테트리스 종합과 나란히 보기
같은 15종의 테트리스 종합(3라운드 평균)과 드래곤플라이트 종합(3라운드 평균)을 나란히 놓았습니다. 두 시험은 루브릭이 달라 점수 자체의 비교보다 순위 변화를 보는 표입니다.
| 모델 | 테트리스 평균 | 테트리스 종합 순위 | 드래곤플라이트 평균 | 드래곤플라이트 종합 순위 | 순위 변화 |
|---|---|---|---|---|---|
q38 | 745.2 | 2위 | 894.7 | 1위 | +1 |
ff | 886.5 | 1위 | 850.7 | 2위 | −1 |
fn | 358.7 | 9위 | 836.7 | 3위 | +6 |
orn | 539.8 | 8위 | 826.7 | 4위 | +4 |
q36 | 637.3 | 7위 | 734.3 | 5위 | +2 |
mcv | 648.8 | 5위 | 695 | 6위 | −1 |
cn | 674.5 | 4위 | 676.2 | 7위 | −3 |
aw | 737.5 | 3위 | 504 | 8위 | −5 |
mg | 645.8 | 6위 | 496 | 9위 | −3 |
bolt | 307 | 10위 | 469.3 | 10위 | 같음 |
lfm | 282.7 | 11위 | 398.7 | 11위 | 같음 |
mel | 237.7 | 12위 | 385 | 12위 | 같음 |
c7r | 0 | 13위 (공동) | 0 | 13위 (공동) | 같음 |
c7 | 0 | 13위 (공동) | 0 | 13위 (공동) | 같음 |
c1 | 0 | 13위 (공동) | 0 | 13위 (공동) | 같음 |
순위 변화는 「테트리스 종합 순위 − 드래곤플라이트 종합 순위」이며 +는 드래곤플라이트에서 더 높은 순위입니다. 두 시험의 상위 4위에 모두 든 것은 ff·q38 뿐이고, fn 은 +6(9위 → 3위), orn 은 +4(8위 → 4위)로 가장 많이 올랐으며 aw 는 −5(3위 → 8위)로 가장 많이 내려갔고 cn·mg 는 −3(4위 → 7위, 6위 → 9위)입니다.
다음 시험: 03 디펜스
- 모델 정보: 00_model_info
- 저장소 첫 화면: llm_model_test
- 같은 형식의 첫 시험: 01 테트리스