브라우저 / 체험형 사례 분석 / 읽는 시간: 16분

Dino: 게임은 왜 점점 빨라질까요?

REA로 Chromium 기반 공룡 게임을 분석하세요. 가속 규칙을 파악하고 속도 조절을 추가하며 부동소수점 경계 사례를 테스트합니다.

이 페이지의 내용

01. 분석하기 전에 직접 해 보기

시작을 누르고 장애물을 뛰어넘으세요. 속도 슬라이더를 3에서 12로 움직이면 장애물이 즉시 빨라집니다. 자동 가속을 다시 켜고 수치가 6.000부터 천천히 올라가는 모습을 확인하세요.

속도 실험체험 / 관찰 / 설명
속도 6.000넘은 장애물 0
익숙한 게임에서 규칙 하나를 분석해 보세요.

시작을 누른 다음 점프하세요. 슬라이더를 움직이면 고정 속도로 전환됩니다.

새로 만든 학습용 게임입니다. 가속 규칙만 문서화된 분석 결과를 따릅니다.

만들 결과물

직접 플레이하는 실험과 다섯 가지 업데이트 횟수로 검증한 속도 함수입니다.

분석하기 전에

실습은 이 페이지에서 실행됩니다. 직접 분석하려면 에이전트에 연결한 REA, Chrome, 공개 HTTP 버전 게임이 필요합니다. REA가 연결되지 않았다면 설치 가이드부터 시작하세요. REA 설정하기 →

02. 분석 가능한 버전에 연결하기

별도의 Chrome 디버깅 프로필에서 wayou의 공개 t-rex-runner를 여세요. 아래 명령은 macOS용입니다. Windows나 Linux에서는 같은 플래그와 해당 Chrome 실행 파일을 사용하세요. 분석하는 동안 이 브라우저와 터미널을 열어 두세요.

이 튜토리얼의 대상은 chrome://dino가 아닌 HTTP 페이지입니다. 페이지가 바뀌었다면 실제로 읽은 스크립트를 저장하고 해시를 기록한 뒤 아래의 과거 결과와 비교하세요.

터미널
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
  --remote-debugging-address=127.0.0.1 \
  --remote-debugging-port=9222 \
  --user-data-dir="$(mktemp -d /tmp/rea-dino.XXXXXX)" \
  https://wayou.github.io/t-rex-runner/
이 분석 프롬프트 복사
REA로 http://127.0.0.1:9222에서 list_browser_targets를 실행하세요. URL로 t-rex-runner 페이지를 선택한 다음 include_script_sources를 활성화해 inspect_web_page를 실행하세요. 로드된 index.js를 읽고 초기 속도, 가속 증가량, 업데이트 조건, 속도 임계값을 찾으세요. 소스 위치를 명시하세요. 아직 게임을 재구현하지 마세요.

03. ‘한 번의 업데이트’가 뜻하는 것 확인하기

ACCELERATION이라는 설정명은 단서일 뿐, 전체 설명은 아닙니다. 이 설정을 사용하는 위치를 추적하세요. 렌더링할 때마다 실행되나요, 플레이 중에만 실행되나요, 충돌이 없을 때만 실행되나요? 정상적인 상황 외에도 설명이 성립하도록 주변 조건까지 포함해 달라고 에이전트에 요청하세요.

문서에 기록된 버전은 6에서 시작하며, 현재 속도가 13 미만이고 업데이트 조건을 만족하면 0.001을 더합니다. ‘초당 0.001’이라는 뜻이 아닙니다. 학습용 게임은 초당 60회의 고정 논리 업데이트를 사용하며 화면 주사율과 독립적으로 그립니다.

  • 한 번 업데이트하기 전과 후의 값을 기록하세요.
  • 증가 연산을 둘러싼 충돌 또는 플레이 상태 조건을 찾으세요.
  • 임계값을 더하기 전과 후 중 언제 검사하는지 확인하세요.
  • 프레임 타이밍과 분석으로 파악한 산술 연산을 구분하세요.

04. 규칙을 유지하며 속도 조절 추가하기

규칙을 눈으로 확인할 수 있는 가장 작은 게임을 만드세요. 단순한 캐릭터, 장애물 하나, 점프 버튼, 속도 표시를 사용하세요. 슬라이더는 고정 속도로 전환하고 자동 모드를 켜면 문서에 기록된 시작값으로 돌아가도록 만드세요.

조건문을 임의로 속도를 13으로 제한하는 처리로 바꾸지 마세요. 무해한 정리처럼 보여도 경계에서 결과가 바뀝니다. 첫 구현은 원래 규칙에 충실하게 유지하고, 의도적인 변경은 별도 모드로 만드세요.

이 분석 프롬프트 복사
시작/일시정지, 점프, 다시 시작을 갖춘 독립적인 브라우저 미니 게임을 만드세요. 문서에 기록된 속도 업데이트 규칙만 재현하세요. 2부터 18까지의 고정 속도 슬라이더와 6에서 시작하는 자동 모드를 추가하세요. 고정 논리 시간 간격을 사용하고 화면 밖에서는 일시정지하며 키보드와 터치 조작을 지원하세요. 새 그래픽, 충돌, 점프 동작은 학습용 코드라고 표시하세요. 함수를 복제해 테스트하지 말고 가져온 실제 속도 함수를 테스트하세요.

05. 추가된 0.001 분석하기

충돌 없이 속도 함수를 반복 실행하세요. 반올림하지 않은 값을 저장하고 아래 검증 지점과 비교하세요. 예상 밖의 최종값이 이 실습의 핵심입니다. 비교는 더하기 전에 일어나며, 부동소수점 증가를 반복해도 십진수 임계값에 정확히 도달하지 않을 수 있습니다.

10,000회 업데이트에서 결과가 13.000이라면 루프 안에 상한 제한이나 소수점 반올림이 있는지 확인하세요. 화면 주사율에 따라 결과가 달라지면 렌더링 프레임마다 시뮬레이션을 한 번씩 진행하는지 확인하세요.

이 분석 프롬프트 복사
속도 6에서 실제 가속 함수를 0, 1000, 4000, 7000, 10000회 업데이트해 재현하세요. 전체 정밀도 값과 소수 셋째 자리까지의 표시값을 반환하세요. 원본 보고서와 비교하고 불일치를 설명하며 실행한 것이 이 사이트의 대체 구현인지 원본 게임인지 명시하세요. 소스를 읽은 것을 원본 게임의 런타임 테스트로 간주하지 마세요.

06. 알려진 결과와 비교하기

다음을 명확한 검증 지점으로 활용하세요. 일치하더라도 이 작은 규칙만 뒷받침하며 앱 전체의 호환성을 입증하지는 않습니다.

업데이트 횟수예상 표시값확인하는 내용
06.000시작값
1,0007.000업데이트당 증가량
4,00010.000누적
7,00013.000반올림으로 경계 현상이 가려질 수 있음
10,00013.001더하기 전에 비교

두 파일을 같은 폴더에 저장하고 Node.js로 검증을 실행하세요. 패키지 설치는 필요 없습니다.

터미널
node check-case-labs.mjs

07. 실제로 검증한 범위는?

REA 보고서에는 원본 HTTP 게임을 통제된 조건에서 실행한 결과가 있습니다. 이 사이트는 자체 속도 모듈을 보고서의 검증 지점과 비교하며 원본 게임 분석을 다시 실행하지 않았습니다. 위의 그래픽, 점프, 충돌, 장애물 간격은 새로 만든 학습용 코드입니다. 재구현한 대상은 가속 규칙뿐입니다.

이 사이트의 수치 테스트 결과 보기 →

출처: REA의 계산기 및 공룡 게임 검증 자료 · 고정 커밋의 게임 업데이트 분기. 튜토리얼, 도해, 브라우저 실험은 독립적으로 제작했습니다.

다음 실험총알 16발은 내 위치를 어떻게 알까요? →

REA가 처음인가요? REA란? · 가이드 검증 방법