- packages/games/src/catchmind: 규칙 모듈(출제 순서·단어 풀 RNG, 고르기/그리기/공개 단계,
정답 정규화(NFKC·제로폭·끝말·초성 차단·정답 포함 차단·자모 거리 "아까워요"), multi/firstOnly 점수,
힌트 50%/75%, 신고 과반, 출제자 연결 끊김 10초, 자리 비움 건너뛰기와 "돌아왔어요", 결과 순위),
단어 740개(words.ko.json, 10개 분야·쉬움/보통, 어린이 안전), 테스트 34개(§10 전부 + 무작위 1,000판)
- 그림 스트리밍: draw 액션은 canvasOp 이벤트만 'stream' 메시지로 중계하고 view에는 개수만,
(재)접속·sync 때만 syncView로 전체 그림 기록 전송. 스트림 액션 로그는 묶어서(최대 1초) 저장
- 엔진/서버 최소 확장(하위 호환): validate(..., ctx?: {now}), isStreamAction, syncView,
disconnectGraceMs 선택 훅, ServerMessage 'stream', RoomStore.save 로그 배열 허용
- apps/web/src/games/catchmind: 캔버스 그리기(포인터·coalesced 이벤트, 색 12·굵기 4·지우개·되돌리기·
전체 지우기), 게이트웨이 한도 아래로 맞춘 배치 전송, 중간점 곡선 렌더링, 힌트 줄·시간 막대·점수판,
정답/채팅 입력과 "아까워요"·"정답!" 표시, 단어 고르기, 그림 PNG 저장, 옵션·규칙
- 등록(GAMES, 카탈로그, 화면 레지스트리, 아이콘), 방 단위 테스트 4개, E2E 계획(PC+폰 실제 그리기·맞히기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import type { AnyGameDefinition } from '@bg/engine';
|
|
import { omok } from './omok';
|
|
import { othello } from './othello';
|
|
import { chess } from './chess';
|
|
import { janggi } from './janggi';
|
|
import { baduk } from './baduk';
|
|
import { seotda } from './seotda';
|
|
import { poker } from './poker';
|
|
import { yacht } from './yacht';
|
|
import { yut } from './yut';
|
|
import { oneCard } from './one-card';
|
|
import { rummikub } from './rummikub';
|
|
import { davinci } from './davinci-code';
|
|
import { mahjong } from './mahjong';
|
|
import { gostop } from './gostop';
|
|
import { bang } from './bang';
|
|
import { halliGalli } from './halli-galli';
|
|
import { marble } from './marble';
|
|
import { dalmuti } from './dalmuti';
|
|
import { splendor } from './splendor';
|
|
import { quoridor } from './quoridor';
|
|
import { lasVegas } from './las-vegas';
|
|
import { cockroachPoker } from './cockroach-poker';
|
|
import { ninetyNine } from './ninety-nine';
|
|
import { catchmind } from './catchmind';
|
|
|
|
export const GAMES: Record<string, AnyGameDefinition> = {
|
|
[omok.id]: omok,
|
|
[othello.id]: othello,
|
|
[chess.id]: chess,
|
|
[janggi.id]: janggi,
|
|
[baduk.id]: baduk,
|
|
[seotda.id]: seotda,
|
|
[poker.id]: poker,
|
|
[yacht.id]: yacht,
|
|
[yut.id]: yut,
|
|
[oneCard.id]: oneCard,
|
|
[rummikub.id]: rummikub,
|
|
[davinci.id]: davinci,
|
|
[mahjong.id]: mahjong,
|
|
[gostop.id]: gostop,
|
|
[bang.id]: bang,
|
|
[halliGalli.id]: halliGalli,
|
|
[marble.id]: marble,
|
|
[dalmuti.id]: dalmuti,
|
|
[splendor.id]: splendor,
|
|
[quoridor.id]: quoridor,
|
|
[lasVegas.id]: lasVegas,
|
|
[cockroachPoker.id]: cockroachPoker,
|
|
[ninetyNine.id]: ninetyNine,
|
|
[catchmind.id]: catchmind,
|
|
};
|