역시 브라우저 포팅 예시 · 2026-10-14

원본 파일과 저작권·라이선스는 각 폴더 및 manifest.json에 보존했습니다.
2048.c: Maurits van der Schee, MIT.
TinyExpr: Lewis Van Winkle, zlib.
역시에서 추가한 웹 어댑터와 React 화면은 원본 프로젝트의 공식 버전이 아닙니다.

재현:
1. 원본 폴더를 third-party/ports/game2048 또는 tinyexpr에 둡니다.
2. Emscripten을 설치합니다: https://emscripten.org/docs/getting_started/downloads.html
3. 2048.c에서 findTarget, slideArray, rotateBoard, moveUp, moveLeft, moveDown,
   moveRight, findPairDown, countEmpty, gameEnded, addRandom, initBoard를
   변경 없이 추출한 web-core.c를 web-adapter.c와 함께 사용합니다.
4. emcc web-adapter.c -O2 --no-entry -s MODULARIZE=1 -s ENVIRONMENT=web,node
   -s ALLOW_MEMORY_GROWTH=1 -s FILESYSTEM=0 -s EXPORT_NAME=createYeok2048
   -s EXPORTED_FUNCTIONS='["_web_start","_web_move","_web_cell","_web_score","_web_ended","_web_won","_web_clear","_web_set_cell","_web_slide"]'
   -s EXPORTED_RUNTIME_METHODS='["cwrap"]' -o game2048.js
5. emcc tinyexpr.c web-adapter.c -O2 --no-entry -s MODULARIZE=1 -s ENVIRONMENT=web,node
   -s ALLOW_MEMORY_GROWTH=1 -s FILESYSTEM=0 -s EXPORT_NAME=createYeokTinyExpr
   -s EXPORTED_FUNCTIONS='["_web_calculate","_web_error"]'
   -s EXPORTED_RUNTIME_METHODS='["cwrap"]' -o tinyexpr.js
6. JS와 wasm 파일을 같은 공개 폴더에 두고 HTTP로 제공합니다.
   React 실행 화면은 web/demo.tsx, 공통 로더는 web/port-wasm.ts입니다.
   원본 폴더에는 독립 실행용 play.html과 컴파일한 JS·wasm도 포함합니다.
   압축을 푼 뒤 원본 폴더에서 python3 -m http.server를 실행하고
   http://localhost:8000/play.html에 접속하면 Next.js 없이 실행할 수 있습니다.

web_clear / web_set_cell / web_slide는 원본과의 비교 검증용입니다.
실제 게임에서는 web_move가 원본의 무작위 숫자 생성을 함께 실행합니다.
TinyExpr 계산은 te_interp를 직접 호출합니다. C에서 외부 함수와 변수를
등록하는 API를 브라우저 화면에 제공하지는 않습니다.
