Files
joke-app/packages/games/src/index.ts
EJClaw dfe4ce1ca4 M7: 달무티 규칙·화면·테스트
- 규칙 모듈 packages/games/src/dalmuti: 80장(광대 2장) 덱, 첫 신분 뽑기(동점 재뽑기),
  신분 순서 분배, 혁명 확인 단계(혁명/대혁명), 세금 자동 이동과 돌려주기, 트릭 진행
  (광대 와일드·13, passLocksOut), 라운드 종료와 순위 점수/마지막 라운드 순위,
  시간 초과 자동 행동(리드: 가장 큰 숫자 전부, 따라 내기: 패스, 세금: 가장 큰 숫자),
  연속 3회 시간 초과 시 5초 마감, 나가도 탈락 없이 자동 진행, view 정보 숨김
- 테스트: 문서 10절 시나리오 전부 + 1,000 시드 무작위 대국(카드 보존, 유출 검사,
  onTimeout 합법, 결정성) + 엔진 randomPlayout
- 화면 apps/web/src/games/dalmuti: 자체 카드 그림, 숫자별 묶음 선택·장수 조절·광대 섞기,
  내기/패스, 바닥 기준 표시, 신분 자리, 혁명 확인·세금 교환 화면, 규칙·옵션
- 등록: GAMES, catalog, registry, GAME_ICON
- E2E: PC 방장 + 휴대폰 3명, 1라운드 끝까지 진행 후 2라운드 세금 교환 화면 확인

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 14:49:44 +09:00

41 lines
1.1 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';
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,
};